我有一个包含我的数据库架构的Visual Studio 2012数据库项目。在部署后脚本中,我会自动创建一些触发器,负责记录对表数据的更改。
不幸的是,当我随后修改表并重新发布(在这种情况下,添加标识规范)时,我现在收到此错误:
此部署在执行期间可能会遇到错误,因为[dbo]。[BenefitInfoVendor]的更改被[dbo]。[tr_BenefitInfoVendor_Audit]在目标数据库中的依赖性阻止。
然后发布拒绝继续创建发布预览...步骤。
如果我手动删除触发器,则发布成功。但是我不想记得每次从这里开始更新架构时手动执行此操作(或者将其传达给其他开发人员!)。
我已尝试在预部署脚本中删除所有触发器,但这不足以“很快”停止此错误。
有没有办法在Visual Studio中抑制此错误,或者让它知道我将自己处理触发器?
答案 0 :(得分:1)
我遇到了同样的问题。我尝试了至少远程连接到触发器的“忽略”属性的各种组合,但没有成功:(
接下来,我通过取消选中“验证部署”属性(发布数据库窗口中由高级...按钮访问的列表中的最后一个)来绕过它。
这确实对我有用,但它可能导致在实际部署之前没有被捕获的真正问题。由于我已经习惯于手动检查生成的脚本以检查潜在的问题(例如没有DF约束的新的非空列),我不必更改我的例程。
最后,我使用了“将验证错误视为警告”属性。效果是一样的,但您实际上会在发布预览中获得潜在问题列表
答案 1 :(得分: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