TSQL DISABLE和ENABLE语句不正确

时间:2010-08-03 19:22:02

标签: tsql triggers

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语法错误。为什么呢?

2 个答案:

答案 0 :(得分:1)

应该是

ALTER TABLE Lending.HMDA DISABLE TRIGGER Lending.utrHMDAAudit; 

ALTER TABLE Lending.HMDA ENABLE TRIGGER Lending.utrHMDAAudit;

但你的触发器真的名为Lending.utrHMDAAudit?

另外

您知道如果您的更新在proc中失败,那么触发器将被禁用吗?您的proc没有任何错误处理,约束违规将中止批处理并且您的触发器被禁用

最好在proc调用之后和

之前禁用和启用触发器

答案 1 :(得分:1)

你需要一些分号(在DISABLE之前的语句的末尾和ENABLE之前的语句的末尾)

在旁注上,将隔离设置为READ UNCOMMITTED并禁用触发器对我来说都显得非常可疑。

在这种情况下,隔离级别似乎不会对以下语句产生任何影响,所以在所有程序中这是标准做法吗?如果是这样,你是否意识到它的潜在问题?

关于触发器禁用什么是在触发器被禁用时停止修改表的另一个并发事务?