我有一個語句來更新一個字段,如果相關的表記錄存在。查詢更新每個記錄。我不確定最有效/最好的做法是什麼。到目前爲止,我拿出2個解決方案案例VS多個更新
解決方法一: Case語句
UPDATE item
SET IsRestricted =
CASE
WHEN restriction.Id is null THEN 0
ELSE 1
END
FROM [dbo].[Item] item
left join [dbo].[Restriction] restriction
on restriction.Id = item.Id
解決方法二:多個更新語句
UPDATE item
SET IsRestricted = 1
FROM [dbo].[Restriction] restriction
inner join [dbo].[Item] item
on restriction.Id = item.Id
UPDATE item
SET IsRestricted = 0
FROM [dbo].[Item] item
left join [dbo].[Restriction] restriction
on item.Id = restriction.Id
WHERE restriction.Id is null
如果有人可以幫助我判斷哪些我應該使用它,將不勝感激。
注意:我不確定這是否是一個重複的帖子,到目前爲止只有我見過的類似的包含觸發器或各種其他的東西,我不知道如果這改變了答案。也可隨意建議替代方法
你需要的IsRestricted列?在特定時間不會詢問是否存在限制,以確保您始終得到正確答案? – 2011-04-01 09:34:47
把它們都放在同一個查詢窗口中,打開「包含實際執行計劃」(ctrl + m),運行批處理,觀察結果:) – Blorgbeard 2011-04-01 09:35:13
@Damien這個標誌在那裏,因爲數據庫的使用情況會相當的性能密集而且我們不希望在特定時間進行查詢。儘管我並沒有真正尋找特定於我的問題的答案,也沒有像這兩種方法的一般比較那樣多的問題 – Manatherin 2011-04-01 09:49:47