2013-03-04 87 views
0

有人能告訴我正確使用IF EXISTS。我有這個查詢,但我有IF EXISTS函數的問題。IF EXISTS-error

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) 
+0

哪個數據庫? – gdoron 2013-03-04 19:36:43

+2

該語法不正確。你能解釋你想做什麼嗎? – Taryn 2013-03-04 19:37:03

回答

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; 
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 

另外,作爲一個側面說明,不知道你在where子句中的datediff功能與left(Sale_Date,16)做什麼。如果Scale_Datedate/datetime類型,你可以使用它作爲datediff(day,Sale_Date,getdate()= 0