我目前在存储过程中有这样的查询:
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)更新此表。
我坚持如何继续前进。如果我做的任何事情不正确或不遵循约定/标准,请接受任何建议。
答案 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;
这将准确捕获表中输入的内容。