首页 > 代码库 > SqlServer自定义函数Function中调用with as

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 标准。使用 WHEREcolumn_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHEREcolumn_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)ASBEGINWITH 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.IsDisplayFROM ToBusinessTargetGroupDetail2(NOLOCK) pINNER JOIN @TargetGroupList p1 ON p1.[GUID]=p.GroupIDWHERE p.ParentID IS NULL OR p.IsReported=0UNION ALLSELECT 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.IsDisplayFROM ToBusinessTargetGroupDetail2(NOLOCK) pINNER JOIN v_targetdetail p1 ON p1.ID=p.ParentID AND p1.TargetGroupID=p.GroupIDWHERE 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	RETURNend

 

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