DACPAC не удается развернуть из-за отсутствия объекта

#sql-server #azure-devops #dacpac

Вопрос:

У меня есть DACPAC для сложной базы данных, которую я пытаюсь развернуть с помощью Powershell из конвейера Azure DevOps.

Я запускаю его через Sqlpackage.exe

 amp; $(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 существует в папке «Сборки» для базы данных. Но фактической агрегатной функции не существует.

Похоже, что dacpac развертывает сборку, а затем представление. Но функция должна стоять перед представлением.

Глядя в Интернете, я вижу, что sql server «разумно» определяет зависимости и развертывается в правильном порядке, но здесь, похоже, этого не происходит.

Ответ №1:

SQLPROJ и dacpac должны содержать как сборку, так и сценарий СОЗДАНИЯ АГРЕГАТА/ФУНКЦИИ.

Одноименная сборка CLR

Что означает, что только Creating [missingobject] стенды для ассамблеи.

И ваш параметр /p:ExcludeObjectTypes=Logins;Aggregates sqlpackage не оставляет никаких шансов для каких-либо агрегатов. Снимите Aggregates с него.