SqlServer自定义函数Function中调用with as

SET QUOTED_IDENTIFIER ON

标识符可以由双引号分隔,而文字必须由单引号分隔

SET QUOTED_IDENTIFIER OFF

标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。

SET NOCOUNT ON  --返回受影响的行数
SET DATEFIRST 1   --定义日期周一开始
SET ANSI_NULLS ON

在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE

如果 ColumnA 包含 Null 值,则 ColumnA = NULL 之类的比较操作会返回 TRUE;如果 ColumnA 除了包含 NULL 外还包含某些值,则这类比较操作将返回 FALSE。比较计算结果为 NULL 的两个表达式也会返回 TRUE。SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于
(<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE
column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHERE
column_name <> NULL 的 SELECT
语句返回列中包含非空值的行。此外,使用 WHERE column_name
<> XYZ_value 的 SELECT 语句返回所有不为
XYZ_value 也不为 NULL 的行。
CREATE FUNCTION  dbo.GetTargetSummaryRefNew
(
@TargetGroupList dbo.GuidList READONLY
)RETURNS
@ TABLE(
TargetDetailID NVARCHAR(36)
	,pTargetID NVARCHAR(36)
	,pTargetName NVARCHAR(256)
	,sTargetID NVARCHAR(36)
	,sTargetName NVARCHAR(256)
	,TargetGroupID NVARCHAR(36)
	,pSummaryType NVARCHAR(64)
	,ConversionValue DECIMAL(18,8)
	,pToTargetID NVARCHAR(36)
	,pIsCalculated INT
)
AS
BEGIN
WITH v_targetdetail(ID,ParentID,TargetID,TargetName,TargetGroupID,ConversionValue,ToTargetID,IsCalculated,IsLeaf,IDFullPath,IsDisplay)
AS
(SELECT p.ID
			,p.ParentID
			,ISNULL(p.TargetID,p.ID) TargetID
			,p.Name TargetName
			,p.GroupID TargetGroupID
			,p.ConversionValue
			,p.ToTargetID
			,p.IsCalculated
			,p.IsLeaf
			,CAST(p.ID AS NVARCHAR(max)) IDFullPath
			,p.IsDisplay
FROM ToBusinessTargetGroupDetail2(NOLOCK) p
INNER JOIN @TargetGroupList p1 ON p1.[GUID]=p.GroupID
WHERE p.ParentID IS NULL OR p.IsReported=0
UNION ALL
SELECT p.ID
			,p.ParentID
			,ISNULL(p.TargetID,p.ID) TargetID
			,p.Name TargetName
			,p1.TargetGroupID
			,p.ConversionValue
			,p.ToTargetID
			,p.IsCalculated
			,p.IsLeaf
			,CAST(p1.IDFullPath+‘.‘+p.ID AS NVARCHAR(max)) IDFullPath
			,p.IsDisplay
FROM ToBusinessTargetGroupDetail2(NOLOCK) p
INNER JOIN v_targetdetail p1 ON p1.ID=p.ParentID AND p1.TargetGroupID=p.GroupID
WHERE p.IsReported=1
)
,v_taregetsummaryref(TargetDetailID,pTargetID,pTargetName,TargetGroupID,sTargetID,sTargetName,ConversionValue,pToTargetID,pIsCalculated,sIsLeaf)
AS
(
SELECT p.ID
			,p.TargetID pTargetID
			,p.TargetName pTargetName
			,p.TargetGroupID
			,p1.TargetID sTargetID
			,p1.TargetName sTargetName
			,p1.ConversionValue
			,p.ToTargetID
			,p.IsCalculated
			,p1.IsLeaf
			FROM v_targetdetail p
			INNER JOIN v_targetdetail p1 ON p1.TargetGroupID=p.TargetGroupID AND  p1.IDFullPath LIKE p.IDFullPath+‘%‘
			WHERE p.IsDisplay=1
)

INSERT INTO @t(TargetDetailID,pTargetID,pTargetName,sTargetID,sTargetName,TargetGroupID,ConversionValue,pToTargetID,pIsCalculated)
SELECT TargetDetailID,pTargetID,pTargetName,sTargetID,sTargetName,TargetGroupID,ConversionValue,pToTargetID,pIsCalculated
	FROM v_taregetsummaryref
	UNION ALL
	SELECT  p1.TargetDetailID
		,p1.pTargetID
		,p1.pTargetName
		,p2.ID sTargetID
		,p2.Name sTargetName
		,p1.TargetGroupID
		,p1.ConversionValue
		,p1.pToTargetID
		,p1.pIsCalculated
		FROM dbo.ToFinanceAccount(NOLOCK) p
		INNER JOIN v_taregetsummaryref p1 ON p1.sTargetID=p.ID AND p1.sIsLeaf=1
		INNER JOIN dbo.ToFinanceAccount p2 ON p2.FullPath LIKE p.FullPath+‘\%‘ AND ISNULL(p2.IsDelete,0)=0
		WHERE ISNULL(p.IsDelete,0)=0 AND p.IsLeaf!=1

		UPDATE p
	SET p.pSummaryType=ISNULL(p1.SummaryType,‘Org&Date‘)
	FROM @t p
	LEFT JOIN ToBusinessTarget2 p1 ON p1.ID=p.pTargetID
	RETURN
end
时间: 2024-10-08 04:00:32

SqlServer自定义函数Function中调用with as的相关文章

Sqlserver自定义函数Function

一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的:                                        a, CREATE FUNCTION F_NAME(传入的参数名称    传入参数的类型)                                        b,RETURNS         返回值类型                 

数据库系列之mysql 自定义函数function,函数和存储过程的区别

mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要求,语法如下, 创建新函数: Create function function_name(参数列表) returns返回值类型 函数体内容 相关说明, 函数名:应该合法的标识符,并且不应该与已有的关键字冲突.一个函数应该属于某数据库,可以使用db_n

PHP Smarty 模板 自定义函数function和块函数block

自定义函数 function.yangA.php页面 采用插件形式调用 <?php /*  * 文件名    * function.函数名.php    function.yangA.php  * 声明的函数名规则  * smarty_function_函数名()  smarty_function_yangA  * 参数  * 1.数组 array  * 2.smarty  * 模板使用  * <{yangA content="I am Mr.Yang" color=&qu

shell从函数文件中调用函数

碰到一个shell中函数调用的小问题,记录一下. shell中函数有三种调用方式,一种是在文件前面定义函数,然后在下面直接调用:一种是通过载入shell,在shell中直接调用:第三种是将函数写入文件,然后在其他shell中调用函数. 这里写一下关于第三种方法的例子: is_it_a_directory() { if [ $# -lt 1 ];then echo "is_it_a_directory:I need an argument" return 1 fi _DIRECTORY_

sqlserver自定义函数的创建与调用

sqlserver中有系统提供的函数,像avg.sum.getdate()等,用户还可以自定义函数. 用户自定义的函数包括:标量函数和表值函数,其中标量函数和系统函数的用法一样,表值函数根据主体的定义方式又可分为内嵌函数和多语句函数. 下面一一介绍语法. 标量函数: 1 Create function 函数名(参数) 2 Returns 返回值数据类型 3 [with {Encryption | Schemabinding }] 4 [as] 5 begin 6 SQL语句(return变量)

java mysql自定义函数UDF之调用c函数

正如sqlite可以定义自定义函数,它是通过API定义c函数的,不像其他,如这里的mysql.sqlite提供原生接口就可以方便的调用其他语言的方法,同样的mysql也支持调用其它语言的方法. google "mysql call c function"发现一片文章 MySQL User Defined Functions  This tutorial explains what an User Defined Function (UDF) is, what it does and w

SQL自定义函数function

https://blog.csdn.net/qq_23833037/article/details/53170789 https://www.cnblogs.com/youring2/p/4916400.html 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回. sql函数必须有返回值. ps: 函数看成一个处理某些数据的功能,因有返回值,则在代码使用中,需要一个处理过的数据. 可直接调用函数处理数据,返回数据给代码使用. 标量函数:返回一个标量值. 表格值函数{内联表

sqlserver自定义函数与存储过程的区别 实例详解

分享下sql server自定义函数与存储过程的区别,一起来学习下. 一.自定义函数: 1. 可以返回表变量 2. 限制颇多,包括 不能使用output参数: 不能用临时表: 函数内部的操作不能影响到外部环境: 不能通过select返回结果集: 不能update,delete,数据库表: 3. 必须return 一个标量值或表变量 自定义函数一般用在复用度高,功能简单单一,争对性强的地方.二.存储过程 1. 不能返回表变量 2. 限制少,可以执行对数据库表的操作,可以返回数据集 3. 可以ret

sqlserver自定义函数

标量函数 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 语法 Create function 函数名(参数) Returns 返回值数据类型 [with {Encryption | Schemabinding }] [as] begin SQL语句(必须有return 变量或值) End 释义: with 子句指出了创建函数的选项,如果指出了 encryption 参数,则创建的函数是被加密的,函数定义的文本将以不可读的形式存储在 syscomments 表中,任何人都不能查看