我有一个简单的SQL查询(见下文)无限期地运行(我无法等待它的完成)
if exists(
select 1
from [files].[Contacts_Migration_Template] c
where not exists(select 1
from [files].[Additional_Contact_Migration_Template]
where contact = c.[migration id])
) print 'warning message'
但子查询(如果存在(子查询)打印'警告消息')本身会立即执行(请参阅下面的屏幕截图)
"全"查询
子查询
两个查询的生成估计执行计划(见下文)显示子查询的查询成本必须高于" full"查询...其中,如上所述,第一个(子查询)立即运行,第二个("完全")运行无限长......
发生了什么?
ORIGINAL QUERY
答案 0 :(得分:0)
试试这个:
if exists(
select 1 from [files].[Contacts_Migration_Template] c left join
[files].[Additional_Contact_Migration_Template] a
on c.[migration id]=a.contact
where a.contact is null
)
print 'warning message'
答案 1 :(得分:0)
我使用临时表来破坏执行顺序。它有所帮助。
select 1 [x] into #tmp_87624435
from [files].[Contacts_Migration_Template] c
where not exists( select 1
from [files].[Additional_Contact_Migration_Template]
where contact = c.[migration id]);
if exists(select 1 from #tmp_87624435) throw 51000, 'warning', 1;
但是我仍然认为即使这对于这样一个简单的问题也是过度的:)