如果出现错误

时间:2013-03-04 19:35:40

标签: tsql

有人可以告诉我IF EXISTS的正确使用方法。我有这个查询,但我的IF EXISTS函数有问题。

insert into master.dbo.turnover3(shop,somefield)
select '301',Curr_Turnover 
from [S301].vpm.dbo.BO_POS_SAP_Turnover
where datediff(day,left(Sale_Date,16),getdate())= '0' if not exists (select NULL)

2 个答案:

答案 0 :(得分:0)

正确使用if exists很容易。它不是selectupdateSQL语句的有效语法。没有它,您的查询将正常工作:

insert into master.dbo.turnover3(shop,somefield)
    select '301',Curr_Turnover 
    from [S301].vpm.dbo.BO_POS_SAP_Turnover
    where datediff(day,left(Sale_Date,16),getdate())= '0' ;

if exists T-SQL的一部分。也就是说,您可以使用它编写脚本。使用此语法,它只是if语句的另一种变体:

if not exists (select *
               from master.dbo.turnover3(shop,somefield)
               where shop = '301'
              )
begin
    insert into master.dbo.turnover3(shop,somefield)
        select '301',Curr_Turnover 
        from [S301].vpm.dbo.BO_POS_SAP_Turnover
        where datediff(day,left(Sale_Date,16),getdate())= '0' ;
end;

答案 1 :(得分:0)

由于您未在此处进行更新(或者由于没有其他部分),因此您无需检查是否存在记录。的 No records found means no records inserted 即可。

insert into master.dbo.turnover3(shop,somefield)
select '301',Curr_Turnover 
from [S301].vpm.dbo.BO_POS_SAP_Turnover
where datediff(day,left(Sale_Date,16),getdate()) = 0 

另外作为附注,不确定您对 left(Sale_Date,16) 子句中 datediff 函数中的where做了什么。如果Scale_Datedate/datetime类型,您可以将其用作datediff(day,Sale_Date,getdate()= 0