В проекте базы данных не выполняются сценарии после развертывания

У нас есть решение с тремя проектами баз данных. Все три созданных dacpac развертываются последовательно, но по какой-то причине один из этих dacpac не запускает сценарий после развертывания.

Мы используем sqlpackage для создания diffscript, и diffscript действительно правильно включает операторы после развертывания .. вот фрагмент

IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT N'The transacted portion of the database update succeeded.'
COMMIT TRANSACTION
END
ELSE PRINT N'The transacted portion of the database update failed.'
GO
DROP TABLE #tmpErrors
GO
/*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 --------------------------------------------------------------------------------------
*/
print 'SCRIPT: dbo.MEMTYPES.data.sql'

Где: а) Комментарий находится в сценарии заголовка postdeployment.sql, который вызывает другие сценарии с использованием стандартного синтаксиса:: r. \ Dbo.MEMTYPES.data.sql, и б) Строка «print» SCRIPT: dbo.MEMTYPES. data.sql '"- это первая строка первого дочернего сценария, определенного в сценарии после развертывания.

Однако при запуске журнал развертывания заканчивается строкой:

The transacted portion of the database update succeeded.

Это означает, что изменения схемы dacpac были применены (и они были), но, по-видимому, не было предпринято никаких попыток продолжить в сценарии для выполнения задач после развертывания.

Любые идеи?


person Fetchez la vache    schedule 07.06.2013    source источник
comment
Можете ли вы взглянуть на файл dacpac, созданный при сборке, чтобы увидеть, включены ли туда сценарии после развертывания? Переименуйте его в .zip и проверьте файл postdeploy.sql. У вас должно быть полное содержимое всех включенных файлов в разделе после развертывания. Вы также можете посмотреть сценарий, созданный для публикации, чтобы увидеть, присутствует ли содержимое в ваших сценариях после развертывания. Кроме того, настроен ли ваш сценарий после развертывания на действие сборки после развертывания?   -  person Peter Schott    schedule 07.06.2013
comment
Привет, @PeterSchott, спасибо за ответ. Действие сборки прошло нормально, и я проверил, что операторы sql были включены в сценарий, поскольку я использую dacpac для создания сценария, а затем sqlcmd для выполнения сценария.   -  person Fetchez la vache    schedule 10.06.2013
comment
... Что кажется странным, так это то, что решение было удалить комментарии. Комментарии состояли исключительно из заголовка по умолчанию, указанного в одном из ваших сообщений в блоге, но раньше это вызывало странные проблемы (например, пример использования), и в этом случае удаление всего блока комментариев полностью решило мою проблему - как бы странно это ни звучало ...   -  person Fetchez la vache    schedule 10.06.2013
comment
Мог ли это быть плохой закрывающий блок? Я никогда раньше не видел такого поведения, хотя при попытке использовать: On Error Ignore, который является допустимым синтаксисом SQLCMD, но не поддерживается сценариями после развертывания, возникали проблемы. Что произойдет, если вы сгенерируете сценарий и запустили его? Не могли бы вы добавить несколько дополнительных разделов печати / отладки, чтобы проверить, попадает ли он в сценарий после развертывания? (конечно, работает в режиме SQLCMD)   -  person Peter Schott    schedule 10.06.2013
comment
Я до сих пор не могу найти причину неудачи. Я добавил комментарии начала и конца печати в каждый дочерний сценарий развертывания, чтобы они регистрировались, и ни один из них не был выведен для сценария, который не удалось запустить (но был для исходных сценариев). Я также проверил сценарии на наличие непечатаемых символов в Notepad ++, но ничего не увидел. Удаление комментариев теперь означает, что сценарий выполняется, но комментарии не выводятся. Не идеальный сценарий, поддерживающий это .. :(   -  person Fetchez la vache    schedule 11.06.2013
comment
Итак, когда вы смотрите на скрипт, разделы, которые вы ожидаете увидеть, присутствуют, но не запускаются, если есть комментарии? Имеет ли значение, являются ли комментарии встроенными или блочными? Когда действие публикации генерирует сценарий, оно должно включать все сценарии, которые вы указали для его запуска. Если вы видите содержимое, а оно не запускается, вы можете попробовать просто запустить этот раздел сценария публикации. Если вы не видите содержимое, оно неправильно включено.   -  person Peter Schott    schedule 12.06.2013


Ответы (2)


Поскольку прошло несколько месяцев после того, как я разместил вопрос, и https://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ Думаю, я должен указать, каков был результат ...

Я не смог найти рифму или причину проблемы, кроме как удалить комментарии, решившие проблему. Теперь, когда это фактически включено в наши правила, с тех пор мы не сталкивались с этой проблемой.

person Fetchez la vache    schedule 12.08.2013
comment
Ваш сценарий после развертывания должен быть помечен как Build Action PostDeploy в свойствах файла сценария. - person user3683706; 23.07.2020

Как упоминал пользователь3683706 выше, действие сборки вашего сценария развертывания должно быть PostDeploy (как показано в выбранном файле ниже). И может быть только один сценарий после развертывания.

Что делать, если вам нужно несколько сценариев? Вы можете ссылаться на них в одном сценарии следующим образом

:r .\Post-Deployment_Scripts\Events.sql

введите описание изображения здесь

Дайте мне знать, если возникнут вопросы! Мы очень благодарны за голоса!

person Hank Z    schedule 02.06.2021