在哪里可以找到SQL Server函数的定义(CONCAT,LAG)?

时间:2018-06-27 10:55:38

标签: function sql-server-2008

我正在100多个拥有一个应用程序数据库的客户端上实现一个简单的数据仓库。一些客户使用SQL Server 2008,这使我的脚本无法引用CONCAT和LAG。

有关如何解决此问题的最初想法是:

  1. 找到这些函数的定义,并将这些定义作为UDF应用于SQL 2008实例。 (我可以想象这适用于CONCAT,但不适用于LAG)。
  2. 编写我自己的UDF。 (时间限制)。
  3. 用'+'运算符替换CONCAT引用,并将字段包装在ISNULL函数中。 (无法解决LAG问题)。

我认为我可以复制LAG的行为,但是我怀疑要花一些时间才能使其对数百万行的数据有效地执行。构建会在夜间重现,因此速度不是最高优先级。

1 个答案:

答案 0 :(得分:0)

LAG 不兼容:

我通过使用ROWCOUNT来标识行的顺序来代替使用LAG,并使用子选择来引用CTE后半部分中的相同数据集,以便按时间回溯到上一行。分区的行块。

这是一个简化的图示:

`CTE xyz(
    SELECT [Field 1]
    , [Field 2]
    , [Year]
    , [Period]
    , ROWCOUNT(PARTITION BY [field 1], ORDER BY [Year] ASC, [Period] ASC) [Row]
    FROM table
    ) 
SELECT *
, (SELECT [Field 2] FROM xyz x1 WHERE x1.[Field 1] = [Field 1] AND [Row] - 1 = x1.[Row]) [Old row] 
FROM xyz`

CONCAT 不兼容:

我使用历史悠久的'+'运算符来连接VARCHAR,并使用ISNULL来处理NULL,因为我想包括确实存在的数据。

SELECT ISNULL([Field 1], ''), + ISNULL([Field 2])
FROM table