表值函数 - 身份(种子,增量)

时间:2016-02-16 10:33:36

标签: sql sql-server tsql

我有一个表值函数qlikview_verlauf。我想返回一张包含idDatePath的表格。

Identity(seed, increment)

ID是自动增量值。我想从另一个名为max(id)+1的表中的Testfortschritt开始这个自动增量(种子)。

我尝试了以下方法,但它不起作用。错误消息不正确语法。

Create FUNCTION [dbo].[qlikview_verlauf](@param INT)
    RETURNS @qlikview_verlauf table (
           ID INT IDENTITY((Select max(id) from Testfortschritt),1) 
          ,[Date] date NOT NULL
          ,[Path] varchar(600) NOT NULL
    )

1 个答案:

答案 0 :(得分:1)

我会将您的ID列的IDENTITY放在一边,而是使用ROW_NUMBERSELECT声明中生成ID。

例如:

SELECT
   (SELECT MAX(id) FROM Testfortschritt) +
      ROW_NUMBER OVER(ORDER BY (SELECT 1)) AS ID,
   [Date],
   [Path]
FROM <YourTable>

由于我不知道您的确切语句是什么样的,我使用了ORDER BY (SELECT 1),它允许SQL Server决定记录的编号顺序。如果您有特定订单,只需将(SELECT 1)替换为您的订单列。

由于ID应该是唯一的,我也省略了你的场景中不需要的PARTITION BY子句。

有关ROW_NUMBER的更多信息,请here