2013-04-16 27 views
0

大家好我有一個存儲過程檢查是否存在一個名爲有效的表中batch_id。如果存在,我想中止程序的其餘部分。我有Raiserror級別16,不會中止程序

If exists(select batch_id 
      from valid 
      Where [email protected]) 
Raiserror ('file has been extracted already',16,1) 

但不會中止程序

+0

你可以發佈過程體? – gotqn

+0

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROC [羔羊] [ETL] 作爲 SET ANSI_NULLS ON。 SET QUOTED_IDENTIFIER ON; SET ANSI_PADDING ON; 使用(fieldterminator =',')從'c:\ temp \ Locality_Extract_01.csv'批量插入Lamb.temp1; insert into Lamb.temp(PostCode,Suburb,State)select * from Lamb.temp1 order by state; 如果存在(從lamb.Invalid_locality 選擇BATCH_ID其中BATCH_ID = 1) RAISERROR( '文件已經被提取',16,1) –

回答

0

raiserror不會中止批次,參見其餘Microsoft's documentation。您可能已經獲得了該印象,因爲某些客戶端可能會取消查詢某些嚴重性閾值以上的錯誤。

要退出錯誤過程,請提出錯誤並返回否定狀態。我通常return -50000 - @@error,以確保我在指定的範圍內。

+0

您也可以嘗試使用'THROW'命令,而不是'RAISERROR'。我相信這個alwyas會終止一個批處理,除非它在'TRY'塊中使用。 – Stainy