我有一些存儲過程中的Delete
語句刪除其他表中的一些子記錄,並最終刪除傳遞給存儲過程的ID。刪除從哪裏選擇,將沒有結果在選擇刪除任何東西?
我很擔心如果與Delete
一起使用的select語句中的某一個不返回,會刪除該表上的任何內容嗎?
例
DELETE FROM [tblPurchases]
WHERE [ID] IN (SELECT [ID] FROM @PurchaseIDs)
我有一些存儲過程中的Delete
語句刪除其他表中的一些子記錄,並最終刪除傳遞給存儲過程的ID。刪除從哪裏選擇,將沒有結果在選擇刪除任何東西?
我很擔心如果與Delete
一起使用的select語句中的某一個不返回,會刪除該表上的任何內容嗎?
例
DELETE FROM [tblPurchases]
WHERE [ID] IN (SELECT [ID] FROM @PurchaseIDs)
在這種情況下(從你的例子),當SELECT [ID] FROM @PurchaseIDs
將不會返回任何東西,什麼也不會從tblPurchases
刪除,因爲ID in (empty_set)
條件將無法實現。
的方式 - 你可以很容易地檢查自己,比如像這樣:
declare @t1 table (ID int)
insert into @t1 (ID)
select 1
union all
select 2
union all
select 3
declare @t2 table (ID int)
insert into @t2 (ID)
select 1
delete from @t1 where ID in (select ID from @t2 where ID > 1)
select * from @t1
答案是否定的,什麼都不會被刪除。什麼都不是「在」空集合中,所以什麼都不會被刪除。
空集與任何其他類集都一樣有效。在基於集合的語言中,你不應該指望他們以任何特殊的方式對待。 –