【问题标题】:DACPAC fails to deploy due to missing object由于缺少对象,DACPAC 无法部署
【发布时间】:2021-12-19 01:26:12
【问题描述】:

我有一个复杂数据库的 DACPAC,我试图通过 Azure DevOps Pipeline 中的 Powershell 进行部署。

我通过 Sqlpackage.exe 运行它

& $(sqlPackage) "/Action:Publish" "/TargetServerName:$(myserver)" /TargetDatabaseName:"(myDB)" "/p:CreateNewDatabase=True" "/TargetUser:$(myUser)" "/TargetPassword:$(myPass)"  "/SourceFile:$(myDacpac)" "/p:IgnoreUserSettingsObjects=True" "/p:IgnoreAuthorizer=True" "/p:VerifyDeployment=True" "/p:ExcludeObjectTypes=Logins;Aggregates" "/p:IncludeTransactionalScripts=True"

查看我的日志文件,我发现我的 [missingobject] 正在创建中:

2021-11-04T17:52:30.6001273Z Creating [missingobject]...

然后很多步骤之后我得到这个错误:

Error SQL72014: .Net SqlClient Data Provider: Msg 208, Level 16, State 103, Procedure MY_VIEW, Line 20 Invalid object name 'myschema.[missingobject]'.
Error SQL72045: Script execution error.  The executed script:
CREATE VIEW myschema.MY_VIEW

缺少的对象是在同名 CLR 程序集中定义的聚合函数。我可以看到 CLR 程序集存在于数据库的 Assemblies 文件夹中。但实际的聚合函数并不存在。

似乎 dacpac 正在部署程序集,然后是视图。但是函数应该在视图之前。

在网上看,我看到 sql server “智能地”确定依赖关系并以正确的顺序部署,但这里似乎没有发生。

【问题讨论】:

    标签: sql-server azure-devops dacpac


    【解决方案1】:

    SQLPROJ 和 dacpac 必须同时包含:程序集 CREATE AGGREGATE/FUNCTION 脚本。

    同名CLR程序集

    这意味着唯一的Creating [missingobject] 代表程序集。

    而且您的 sqlpackage 参数 /p:ExcludeObjectTypes=Logins;Aggregates 不会为任何聚合留下机会。从中删除Aggregates

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 2021-11-11
      • 2014-03-14
      相关资源
      最近更新 更多