2016-06-22 63 views
0

我有一些存儲過程中的Delete語句刪除其他表中的一些子記錄,並最終刪除傳遞給存儲過程的ID。刪除從哪裏選擇,將沒有結果在選擇刪除任何東西?

我很擔心如果與Delete一起使用的select語句中的某一個不返回,會刪除該表上的任何內容嗎?

DELETE FROM [tblPurchases] 
WHERE [ID] IN (SELECT [ID] FROM @PurchaseIDs) 
+0

空集與任何其他類集都一樣有效。在基於集合的語言中,你不應該指望他們以任何特殊的方式對待。 –

回答

4

在這種情況下(從你的例子),當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 
0

答案是否定的,什麼都不會被刪除。什麼都不是「在」空集合中,所以什麼都不會被刪除。