Большую часть утра я боролся с этой проблемой, и я готов предположить, что это ошибка в SqlPackage.exe
Я извлекаю dacpac, используя следующую команду:
C:\"Program Files"\"Microsoft SQL Server"\150\DAC\bin\SqlPackage.exe /a:Extract /ssn:$server /sdn:$dbName /st:300 /p:CommandTimeout=300 /tf:obj\$dbName\extracted.dacpac
И опубликуйте скрипт, используя:
C:\"Program Files"\"Microsoft SQL Server"\150\DAC\bin\SqlPackage.exe /a:Script /tcs:"Server=$server`;Database=$newDbName`;Trusted_Connection=True`;Connection Timeout=300`;" /p:CommandTimeout=300 /p:ExcludeObjectType=Logins /p:ExcludeObjectType=Users /p:ExcludeObjectType=RoleMembership /p:IgnoreNotForReplication=true /p:UnmodifiableObjectWarnings=false /sf:obj\$dbName\extracted.dacpac /op:obj\$dbName\publish_script.sql
Сценарий генерируется, но он завершается неудачно, когда я пытаюсь выполнить его с ошибкой:
Procedure MY_FUNCTION, Line 39 Invalid object name 'MY_OTHER_FUNCTION'
Если я проверяю скриптЯ вижу следующее:
LINE 300: PRINT N'Creating [dbo].[MY_FUNCTION]...'
... More code ...
LINE 400: PRINT N'Creating [dbo].[MY_OTHER_FUNCTION]...';
Я дошел до того, что копался в извлеченном dacpac, чтобы подтвердить, что model.xml определяет зависимость MY_FUNCTION от MY_OTHER_FUNCTION.Я также убедился, что это не случай круговой зависимости.MY_OTHER_FUNCTION зависит от одной таблицы, созданной в LINE 100.
Почему сгенерированный скрипт создает их не по порядку?