假設我有一張帶有標識字段的表格。如果它不存在,我想在它中插入一條記錄。在下面的例子中,我檢查存儲在@ Field1中的值是否已經存在於表中。如果沒有,我插入一個新的記錄:表中的如何在比賽結束後使用MERGE後獲得身份值?
定義:
MyTable (MyTableId int Identity not null, Field1 int not null, Field2 int not null)
這是我如何檢查是否值已經存在,並在必要時
merge MyTable as t
using (@Field1, @Field2) as s (Field1,Field2)
on (t.Field1=s.Field1)
when not matched then
insert (Field1,Field2) values (s.Field1,s.Field2);
獲取身份插入當表中記錄不存在時可以通過添加值來完成:
output Inserted.MyTableId
但是如果記錄已經在表格中(即如果有匹配)呢?
我發現的唯一方法是執行MERGE語句之後查詢表:
select MyTableId from MyTable where [email protected]
有沒有辦法直接從合併獲得的標識值?
感謝艾德里安,但如果沒有匹配,那麼你如何獲得新的身份值到@MatchedId? – Anthony
感謝您的更新。是的,這將工作,但它看起來像是更多的代碼,而不僅僅是在合併後(顯然它取決於真實表的大小等)「從MyTable中選擇MyTableId where Field1 = @ Field1」。我只是希望Merge語句中有一個「內置」解決方案,它將在兩種情況下返回標識值(匹配或不匹配)。 – Anthony