2010-08-03 51 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