アプリの「SystemSettings」テーブルにレコードを追加し、UPDATEからの値を使用してPK値を設定したいと思います。 PK値は、このアプリケーション(MicroFocus SBM)の各テーブルの最大PK値を含む「TS_LASTIDS」テーブルから取得されます。そのテーブルの「TS_LASTID」列をインクリメントし、「SystemSettings」テーブルに新しいレコードを挿入するときに、新しい値を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
を実行するためです。これは、新しいIDでINSERT
を実行したいためにのみ機能します。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値を計算します。その値で1つのテーブルを更新し、INSERT
で新しい値を使用します。すべて1つのアトミックステートメント。
ドキュメント: OUTPUT句から返されたデータをテーブルに挿入する
これは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