错误的TSQL DISABLE和ENABLE语句

错误的TSQL DISABLE和ENABLE语句,tsql,triggers,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

表示禁用和启用语法错误。为什么?

应该是

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
但是你的触发器真的命名为Lending.utrhmdaudit吗

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

最好在proc调用之后和之前禁用和启用触发器,您需要一些分号(在
disable
之前的语句末尾和
enable
之前的语句末尾)

另一方面,将隔离设置为
readuncommitted
和禁用触发器对我来说显然是可疑的

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


关于触发器禁用,当触发器被禁用时,如何停止另一个修改表的并发事务?

可能
[Lending]
不是触发器的正确模式?从那些希望审计数据的人的角度来看,禁用审计触发器通常是一个糟糕的想法。为什么要禁用它?根据MSDN,不需要ALTER TABLE:
ALTER TABLE Lending.HMDA DISABLE TRIGGER Lending.utrHMDAAudit; 

ALTER TABLE Lending.HMDA ENABLE TRIGGER Lending.utrHMDAAudit;