是否可以获取SQL中从ROW_NUMBER生成的最后一个数字

时间:2018-09-26 03:00:46

标签: sql sql-server stored-procedures

我目前在存储过程中有这样的查询:

INSERT INTO YTDTRNI (TRCDE, PROD, WH, DESCR, UCOST, TCOST, DRAC, CRAC, REM, QTY, UM, ORDNO, TRDATE, SYSDATE, PERIOD, USERID)
    SELECT 
        'AJ', PROD, WH, DESCR, 0, -TCOST, STKGL, COSGL,
        'MASS ADJUSTMENT', 0, UM, 
        CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS nvarchar(255)), 
        GETDATE(), GETDATE(), @inputPeriod, @inputUserId
    FROM 
        INV
    WHERE 
        H = 0

我正在使用row_number()来获取执行查询时自身递增的数字。

例如INSERT 2018上方的查询记录在YTDTRNI表中。因此,此row_number()函数生成的最后一个数字是2018。我现在的问题是是否可以掌握row_number()生成的最后一个数字。

在另一个表中,例如,我有一个值存储为I1000。因此执行完以上操作之后。我需要使用新值I3018(1000 + 2018)更新此表。

我坚持如何继续前进。如果我做的任何事情不正确或不遵循约定/标准,请接受任何建议。

2 个答案:

答案 0 :(得分:2)

在查询后只需执行@@rowcount

DECLARE @rc INT

INSERT INTO YTDTRNI ( ... )

SELECT @rc = @@rowcount

之后,您可以使用此@rc更新其他表

答案 1 :(得分:0)

如果数据库中存在触发器,则

@@ROWCOUNT不可靠。我会强烈劝阻您不要使用它。

相反,请使用OUTPUT

declare @t table (rn int);

insert into . . .
    output (inserted.ordno) into @t
    select . . .;

然后您可以简单地做到:

select max(ordno) from @t;

这将准确捕获表中输入的内容。