zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    【LoadRunner-Vuser Generator】录制脚本设置Recording Options
    【LoadRunner-内部结构】
    【LoadRunner-工作过程】
    单片机上内存管理(重定义malloc free)的实现
    stm32模块的初始化顺序要求的更改设值
    [CAN波形分析] 一次CAN波形分析之旅
    w5500调试小记
    keil mdk中save和load指令,在调试中比较有用,以及hex格式的学习
    PHP启用session后抛 session_start(): open(/var/lib/php/session/sess_... 的解决办法
    brew 方式安装的php,关闭与重启----mac启动,关闭php-fpm方式
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/6879461.html
Copyright © 2011-2022 走看看