Sql-Server
我可以在 INSERT 中使用 UPDATE 中的 OUTPUT 嗎?
我想在我的應用程序的“SystemSettings”表中添加一條記錄,並使用 UPDATE 中的值設置 PK 值。PK 值來自“TS_LASTIDS”表,該表包含此應用程序中每個表的最大 PK 值(MicroFocus SBM)。在將新記錄插入“SystemSettings”表時,我需要增加該表中的“TS_LASTID”列並使用新值作為 PK。
Insert Into ts_SystemSettings ( ts_Id, ts_Name, ts_LongValue) Values ( ( -- ******************** This subquery updates the PK in TS_LASTIDS and outputs the new value Update ts_LastIds Set ts_LastId=ts_LastId+1 Output INSERTED.ts_LastId Where ts_Name = 'SystemSettings' ) , -- ******************** 'NSLastChangeId' , 1 , ) ;
我無法弄清楚語法。這是 MS SQL 伺服器 2012。
添加
INTO
解決了部分問題。訣竅是將
INSERT
操作“移入”OUTPUT INTO
子句。是“暗示的INSERT
”,我認為是OUTPUT INTO
因為INSERT
. 這只有效,因為我想INSERT
用新的 ID 做一個——如果我想做一個UPDATE
這將行不通。Update ts_LastIds Set ts_LastId=ts_LastId+1 Output INSERTED.ts_LastId , 'NSLastChangeId' , 1 Into ts_SystemSettings ( ts_Id, ts_Name, ts_DataType, ts_LongValue ) Where ts_Name = 'SystemSettings' ;
所以你有它; 計算新的PK值;用該值更新一個表,並在
INSERT
;中使用新值 全部在 1 個原子語句中。
這是使用 OUTPUT…INTO 的範例
--demo setup drop table if exists InsertTest; Create Table InsertTest (id int); drop table if exists UpdateTest; Create Table UpdateTest (id int); insert into UpdateTest(id) values(1),(2); --solution UPDATE UpdateTest SET id = id + 1 OUTPUT INSERTED.id INTO InsertTest; --verify results of insert select * from InsertTest
ID 2 3