#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
с него.