0

我有一个无限期运行的简单 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'

但是子查询 (如果存在(子查询)打印'警告消息') 本身会立即执行(见下面的截图)

“完整”查询 在此处输入图像描述

子查询 在此处输入图像描述

为两个查询生成的估计执行计划(见下文)表明,子查询的查询成本必须高于“完整”查询......其中,正如我上面所说,第一个(子查询)立即运行,第二个(“完整”)无限长跑……

在此处输入图像描述

这是怎么回事?


原始查询

在此处输入图像描述

4

2 回答 2

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;

但我仍然认为对于这样一个简单的问题来说,即使这也是矫枉过正 :)

于 2013-05-09T08:58:54.770 回答
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'
于 2013-05-09T08:30:28.290 回答