我无法弄清楚为什么会这样,但如果我跑:
BEGIN TRANSACTION
ALTER TABLE [TABLE NAME] DISABLE TRIGGER [TRIGGER NAME];
-- Some query
ALTER TABLE [TABLE NAME] ENABLE TRIGGER [TRIGGER NAME];
COMMIT TRANSACTION
哪些'某些查询'取决于被禁用的触发器,我收到错误(因为触发器未成功禁用)。
但是,如果我单独运行alter语句,那很好。
我已尝试使用DISABLE TRIGGER
语法,并且我已尝试BEGIN
和END
而不是BEGIN TRANSACTION
等。
我在这里误解了什么?为什么这些改变陈述似乎没有及时改变?
我想重新解释这个问题,以支持清晰度来陪伴赏金:
为什么我们必须分批DDL和DML批次?
答案 0 :(得分:2)
由于您在同一个批处理/语句中执行它们,因此您在更改表后,SQL Server已编译您的sql语句。
要解决此问题,您仍然可以在事务中执行此操作,但您需要将其分成批处理。如果从SSMS或类似工具运行,则在每个语句之间插入“GO”,或者如果从代码调用则调用单独的SQL语句。
答案 1 :(得分:-1)
不建议在事务中混合使用DDL和DML,因为它会产生不希望的结果:
#child1{
width:100%;
}