Sql 从Select中的位置删除,Select中不会有结果删除任何内容吗?

Sql 从Select中的位置删除,Select中不会有结果删除任何内容吗?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在存储过程中使用了一些Delete语句来删除其他表中的一些子记录,并最终删除传递给存储过程的ID 我关心的是,如果与Delete一起使用的select语句中有一个不返回任何内容,会发生什么情况,这会删除该表中的任何内容吗 范例 DELETE FROM [tblPurchases] WHERE [ID] IN (SELECT [ID] FROM @PurchaseIDs) 在这种情况下(从您的示例中),当SELECT[ID]from@PurchaseIDs不会返回任何内容时,将不会从tblp

我在存储过程中使用了一些
Delete
语句来删除其他表中的一些子记录,并最终删除传递给存储过程的ID

我关心的是,如果与
Delete
一起使用的select语句中有一个不返回任何内容,会发生什么情况,这会删除该表中的任何内容吗

范例

DELETE FROM [tblPurchases] 
WHERE [ID] IN (SELECT [ID] FROM @PurchaseIDs)
在这种情况下(从您的示例中),当
SELECT[ID]from@PurchaseIDs
不会返回任何内容时,将不会从
tblpources
中删除任何内容,因为
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
在这种情况下(从您的示例中),当
SELECT[ID]from@PurchaseIDs
不会返回任何内容时,将不会从
tblpources
中删除任何内容,因为
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

答案是否定的,不会删除任何内容。空集合中没有任何内容,因此不会删除任何内容

答案为否,不会删除任何内容。空集合中没有任何内容,因此不会删除任何内容

空集与任何其他类型的集一样有效。在基于集合的语言中,您不应该期望以任何特殊方式处理它们。空集合与任何其他类型的集合一样有效。在基于集合的语言中,您不应该期望以任何特殊方式对待它们。