【问题标题】:Trigger is blocking database project publish触发器正在阻止数据库项目发布
【发布时间】:2014-07-21 16:08:02
【问题描述】:

我有一个 Visual Studio 2012 数据库项目,其中包含我的数据库架构。在部署后脚本中,我自动创建了一些触发器,负责记录对表数据的更改。

不幸的是,当我随后修改表并重新发布(在这种情况下,添加身份规范)时,我现在收到此错误:

此部署在执行期间可能会遇到错误,因为对 [dbo].[BenefitInfoVendor] 的更改被 [dbo].[tr_BenefitInfoVendor_Audit] 在目标数据库中的依赖项阻止。

然后发布拒绝继续通过创建发布预览...步骤。

如果我手动删除触发器,则发布成功。但我不想每次从这里更新架构时都要记住手动执行此操作(或将其传达给其他开发人员!)。

我已尝试在预部署脚本中删除所有触发器,但这还不足以阻止此错误。

有没有办法在 Visual Studio 中抑制这个错误,或者让它知道我将自己处理触发器?

【问题讨论】:

    标签: visual-studio-2012 sql-server-2012-datatools


    【解决方案1】:

    在随后的项目中,我找到了一个似乎可以解决此问题的解决方案。我向每个表脚本添加了一个存根,它创建了一个与生成的触发器同名的最小触发器,但它什么也不做。

    这是少量的额外输入,允许我将触发逻辑排除在外。

    CREATE TABLE [dbo].[AlertingDeviceTypes]
    (
        [AlertingDeviceTypeId] INT NOT NULL PRIMARY KEY IDENTITY, 
        [Name] NVARCHAR(MAX) NOT NULL, 
        --Other fields...
        [Deleted] BIT NOT NULL DEFAULT 0, 
        [DeletionId] UNIQUEIDENTIFIER NULL
    )
    GO
    
    CREATE TRIGGER [dbo].[tr_AlertingDeviceTypes_SetDeletionId] ON [dbo].[AlertingDeviceTypes] After UPDATE
        AS
        BEGIN
            --This is a placeholder for the autogenerated trigger.
            noop:
        END
    GO
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。我尝试了至少远程连接到触发器的“忽略”属性的各种组合,但没有成功:(

      接下来,我通过取消选中“验证部署”属性(发布数据库窗口中的“高级...”按钮访问的列表中的最后一个属性)绕过它。

      这确实对我有用,但它可能会导致在实际部署之前没有发现真正的问题。由于我已经习惯于手动检查生成的脚本以检查潜在问题(例如没有 DF 约束的新非空列),因此我不必更改我的例程。

      最后,我改用了“将验证错误视为警告”属性。效果是一样的,但您实际上会在发布预览中获得潜在问题列表

      【讨论】:

        猜你喜欢
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多