【发布时间】:2020-06-04 14:18:38
【问题描述】:
我从现有数据库创建了一个 SSDT 项目。它包括 tablename.sql 文件中的现有触发器。
CREATE TABLE [dbo].[TableName] (
[ID] INT NULL
)
GO
CREATE TRIGGER trgTableName ON dbo.TableName
FOR INSERT
AS
BEGIN
....
END
GO
DISABLE TRIGGER [dbo].[trgTableName] ON [dbo].[TableName]; /* My trigger is currently disabled */
GO
但是,每当我修改触发器时,SSDT 都会再次启用它。它在部署时不考虑触发禁用属性。
无论如何我可以让 SSDT 禁用触发器(如果它已在数据库上禁用)?
我想到的一种方法是添加为部署后脚本。但是,最好为此使用现有的 SSDT 功能,而不是手动添加部署后脚本。
编辑:如果我们更新它们,SQL 服务器似乎会自动启用触发器。就我而言,触发器有更新,因此它启用了触发器。但是,SSDT 不会在更新后禁用它。
【问题讨论】:
-
刚刚提到,在导入数据库后,我们将触发器定义移动到它们自己的文件中。这使它们更易于管理。没有任何残疾人,所以无法帮助解决这个问题。
-
没问题,我想我也会这样做 - 这是更清洁的方法。
-
我已经记不清有多少微妙的issues within SSDT 导致了意想不到的结果。我喜欢所需状态部署的想法,但最终像这样的边缘情况会导致我们放弃 SSDT。
-
能否检查一下部署属性的状态:忽略 DML 触发器状态?
-
@DavidRushton 您可能使用了错误的论坛来提出 SSDT 问题。您应该尝试使用 Visual Studio 将这些问题提交到他们的developer community 以获得更快的响应。
标签: sql-server sql-server-data-tools