2010-08-03 73 views
0
SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [Lending].[uspHMDAUpdateExport] (@BatchId int, @ModifiedById int) 
AS 
BEGIN 
SET NOCOUNT ON 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

DISABLE TRIGGER Lending.utrHMDAAudit ON Lending.HMDA 

UPDATE Lending.HMDA SET IsExported = 1,ModifiedById = @ModifiedById WHERE BatchId = @BatchId 

ENABLE TRIGGER Lending.utrHMDAAudit ON Lending.HMDA 

END 

SET QUOTED_IDENTIFIER OFF 
GO 
GRANT EXECUTE ON [Lending].[uspHMDALarInfoGet] TO [caApplication] AS [dbo] 
GO 

說DISABLE和ENABLE語法是錯誤的。爲什麼?錯誤的TSQL DISABLE和ENABLE語句

+0

也許'[Lending]'不是觸發器的正確​​模式? – 2010-08-03 19:26:01

+0

從希望進行數據審計的人的角度來看,禁用審計觸發通常是一個糟糕的主意。你爲什麼禁用它? – HLGEM 2010-08-03 21:38:26

回答

1

你需要一些分號(在前DISABLE的聲明,並在聲明的結尾ENABLE前)

在一個側面說明隔離設置爲READ UNCOMMITTED和禁用同時觸發的結束似乎明顯可疑的給我。

在這種情況下,隔離級別似乎不會對以下語句產生任何影響,所以您的所有過程都是這種標準做法嗎?如果是的話,你是否知道它的潛在問題?

關於觸發器禁用什麼是停止另一個併發事務修改表,而觸發器被禁用?

1

應該

ALTER TABLE Lending.HMDA DISABLE TRIGGER Lending.utrHMDAAudit; 

ALTER TABLE Lending.HMDA ENABLE TRIGGER Lending.utrHMDAAudit; 

但你的觸發真名叫Lending.utrHMDAAudit?

而且

你知道,如果你的更新在proc失敗觸發器將被禁止嗎?您PROC沒有任何錯誤處理,違反約束將中止批次和你的觸發禁止

最好禁用和proc調用後啓用觸發器之前

+1

根據MSDN,ALTER TABLE不是必需的:http://msdn.microsoft.com/en-us/library/ms189748.aspx – dcp 2010-08-03 19:27:43