Неверное имя объекта при публикации: SQLPackage (DACFramework 15) Возможная ошибка - PullRequest
0 голосов
/ 08 февраля 2019

Большую часть утра я боролся с этой проблемой, и я готов предположить, что это ошибка в 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.

Почему сгенерированный скрипт создает их не по порядку?

1 Ответ

0 голосов
/ 09 февраля 2019

Хорошо, я уверен, что это ошибка на данный момент.Шаги для воспроизведения:

  1. Создание новой базы данных.
  2. Запустите следующие сценарии создания:

    CREATE TABLE [dbo]. [SomeTable] ([Id] [int] IDENTITY (1,1) НЕ ДЛЯ РЕПЛИКАЦИИ, НЕДЕЙСТВИТЕЛЬНОЙ) НА [ОСНОВНОМ] GO

    СОЗДАТЬ ФУНКЦИЮ [dbo]. [SomeOtherFunction] (@ Id INT = 1) RETURNS @someResults TABLE (IdINT) КАК НАЧАТЬ ВСТАВИТЬ В @someResults (Id) ВЫБРАТЬ * ИЗ [sqlpackagebug]. [Dbo]. [SomeTable] st WHERE @Id = st.Id RETURN;END GO

    СОЗДАТЬ ФУНКЦИЮ [dbo]. [SomeFunction] (@ Id INT = 1) ВОЗВРАЩАЕТ ТАБЛИЦУ КАК ВОЗВРАТ (ВЫБРАТЬ * ИЗ [sqlpackagebug]. [Dbo] .someOtherFunction) GO

Извлеките dacpac, используя:

C:\"Program Files"\"Microsoft SQL Server"\150\DAC\bin\SqlPackage.exe /a:Extract /ssn:$server /sdn:$dbName /st:300 /p:CommandTimeout=300 /tf:extracted.dacpac

Создайте сценарий, используя:

C:\"Program Files"\"Microsoft SQL Server"\150\DAC\bin\SqlPackage.exe /a:Script /tsn:$server /tdn:$newDbName /tt:300 /p:CommandTimeout=300 /sf:extracted.dacpac /op:script.sql

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...