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语法错误。为什么呢?
答案 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
并禁用触发器对我来说都显得非常可疑。
在这种情况下,隔离级别似乎不会对以下语句产生任何影响,所以在所有程序中这是标准做法吗?如果是这样,你是否意识到它的潜在问题?
关于触发器禁用什么是在触发器被禁用时停止修改表的另一个并发事务?