Sql server 是不是SSDT错误-不包括加密触发器?
我在MSDN论坛上问过这个问题,没有任何回应。也许有人能帮我 我认为这是SSDT中的一个bug,而且非常旧。我尝试了几种版本的SSDT二进制文件,但问题仍然存在。SQLPackage.exe无法正确排除触发器,尤其是在触发器已加密的情况下。情况:Sql server 是不是SSDT错误-不包括加密触发器?,sql-server,sql-server-data-tools,sqlpackage,Sql Server,Sql Server Data Tools,Sqlpackage,我在MSDN论坛上问过这个问题,没有任何回应。也许有人能帮我 我认为这是SSDT中的一个bug,而且非常旧。我尝试了几种版本的SSDT二进制文件,但问题仍然存在。SQLPackage.exe无法正确排除触发器,尤其是在触发器已加密的情况下。情况: 在空数据库中创建简单表dbo.TheTable和加密触发器: 使用SQLPackage.exe并将该数据库提取(操作:提取)到dacpac: 运行SQLPackage.exe生成脚本(操作:Script),可以使用相同的数据库: 并抛出以下错误: 错误
我在这里遗漏了什么?这似乎不是一个bug,而是一个无法排除任何DML触发器的特性。我试图排除简单的未加密触发器,但它也不起作用 现在我需要考虑如何克服数据库dacpac中所有代码都加密的情况,我只需要部署dacpac中的表,我不能排除加密的DML触发器,而所有其他代码(如存储过程和函数)都已成功排除
希望在下一个SSDT版本中修复此问题。我发现了类似的问题。我正在尝试用新内容更新触发器,但是当他完成时,触发器应该保持禁用状态。在他开始之前,扳机被禁用了。当他完成时,触发器被启用。什么 dac发布操作更新触发器内容,但同时启用触发器。我现在已经运行了几十次测试用例。我只是恢复数据库并再次运行。同样的问题 我在修改后的表上再次运行dac操作,dac注意到已启用的触发器并将其禁用。没有其他操作要做。因此,解决方法是运行所有dac操作两次,以清除在第一次运行时意外启用的任何触发器
我相信这是某种错误。当您在未经许可的情况下启用触发器时,这是一个特别令人讨厌的问题。看起来无法排除DML触发器:( 已尝试此最新版本的sqlpackage.exe
2019年10月29日18.4 15.0.4573.2数据库触发器和服务器触发器都是两种类型。表触发器既不是数据库触发器,也不是服务器触发器,因此,排除这两种类型都不会阻止表触发器被包括在内。感谢@Damien_非信徒的评论-这解释了这种情况。我已经尝试过了排除简单的未加密触发器,它也不起作用。这意味着它的一个功能是不能专门排除任何DML触发器。这也意味着,还不可能从数据库中创建dacpac,并对所有代码进行加密,并且只从中部署特定对象,排除所有加密代码。我只是做了一些调查这似乎不是一个bug,而是sql server的预期行为。对禁用触发器的任何更改都会在您完成后将触发器设置为enabled(启用)。我猜Microsoft认为,如果您更改触发器的内容,他们会在不通知的情况下启用它,从而帮助您解决问题。
create table dbo.TheTable(Name varchar(30) not null);
create trigger dbo.trgInsTheTable on dbo.TheTable with encryption for insert as print 'insert to TheTable';
SqlPackage.exe /Action:Extract /TargetFile:"DB.dacpac" /SourceDatabaseName:"DB" /SourceServerName:".\Sandbox"
SqlPackage.exe /Action:Script /SourceFile:".\DB.dacpac" /Profile:".\Sandbox.Publish.xml" /p:CreateNewDatabase=True /OutputPath:".\DB.sql"