我在 MSDN 论坛上问过这个问题,没有任何回应。也许这里有人可以帮助我?
我认为这是 SSDT 中的一个错误,而且很老。我已经尝试了几个版本的 SSDT 二进制文件,但问题仍然存在。SQLPackage.exe 不能正确排除触发器,尤其是在加密的情况下。情况:
- 在空数据库中创建简单表 dbo.TheTable 和加密触发器:
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 并将该数据库提取(操作:提取)到 dacpac:
SqlPackage.exe /Action:Extract /TargetFile:"DB.dacpac" /SourceDatabaseName:"DB" /SourceServerName:".\Sandbox"
- 运行SQLPackage.exe生成脚本(Action:Script),可以使用同一个数据库:
SqlPackage.exe /Action:Script /SourceFile:".\DB.dacpac" /Profile:".\Sandbox.Publish.xml" /p:CreateNewDatabase=True /OutputPath:".\DB.sql"
并引发以下错误:
错误 SQL0:元素 [dbo].[trgInsTheTable] 无法部署,因为脚本正文已加密。
- 好的,现在让我们尝试只生成表 TheTable 并为此使用 /p:ExludeObjectTypes=DatabaseTriggers;ServerTriggers:
SqlPackage.exe /Action:Script /SourceFile:".\DB.dacpac" /Profile:".\Sandbox.Publish.xml" /p:CreateNewDatabase=True /OutputPath:".\DB.sql" /p:ExcludeObjectTypes=数据库触发器;服务器触发器
再次抛出上述错误。唯一但不可接受的方法是将表添加到 ExludeObjectTypes。然后排除此触发器,但与创建它的表一起。
发布 XML 文件可以是任何默认值。
我在这里想念什么?