这对我来说看起来很奇怪:
delete from GearsDev.dbo.Products from GearsDev.dbo.Products as C inner join #Common as M on M.item = C.ItemNumber
#Common 是一个临时表,但是其余的对我来说毫无意义。
#Common
你怎么能有两个from子句?
from
从DELETE的文档中可以看出,它可以包含两个FROM子句。
FROM
第一个FROM:
FROM:是可选关键字,可以在DELETE关键字和目标table_or_view_name或rowset_function_limited之间使用。
第二个FROM:
FROM <table_source>:指定一个附加的FROM子句。Transact- SQL的DELETE扩展允许在第一个FROM子句中从表中指定数据并删除表中的相应行。 可以使用此扩展(指定一个联接)代替WHERE子句中的子查询来标识要删除的行。
FROM <table_source>:指定一个附加的FROM子句。Transact- SQL的DELETE扩展允许在第一个FROM子句中从表中指定数据并删除表中的相应行。
FROM <table_source>
可以使用此扩展(指定一个联接)代替WHERE子句中的子查询来标识要删除的行。
因此,当与联接时,SQL将从Products表中删除具有匹配项的记录#common。
Products
#common
这等效于(在含义上)以下查询:
delete from [GearsDev].[dbo].[Products] where ItemNumber in ( select item from #common )