SSDT publish script обновляет процедуры без изменений

У меня есть база данных, импортированная в профиль a .sqlprojи .publish.xmlпубликацию, который публикует изменения в удаленной БД.

Я понимаю, что когда я щелкнул правой кнопкой мыши -> Опубликовать -> Создать сценарий, он должен рассчитать разницу между локальными определениями и удаленной БД и сгенерировать сценарий, чтобы привести удаленный БД в соответствие.

Кажется, что все работает нормально, однако в сценарии, который он генерирует, всегда содержатся ALTER FUNCTIONи ALTER PROCEDUREоператоры для тех же 40 или около того функций и процедур (из примерно 1000 определенных), независимо от того, изменились они или нет . Когда я сравниваю ALTERутверждения со скриптовой функцией как -> ALTER с скриптом в SSMS, они точно такие же.

Поэтому мой вопрос: почему VS думает, что они разные, или почему они воссоздают их в любом случае, если они одинаковы?

Заметки:

  • Функции не являются особенными - некоторые из них так же просты, как определение varchar, установка его в значение и его возврат.
  • Я попытался запустить ALTERскрипты в базе данных, но они продолжают создаваться.
  • Я проверил свойства (правый щелчок -> свойства) в SSMS, но не вижу ничего явно отличающегося от тех, которые он всегда воссоздает, и тех, что он не делает.
  • Мой профиль публикации - это стандартное болото.

благодаря

visual-studio-2015,ssdt,sqlproj,

0

Ответов: 1


0 принят

Обновить:

Переименовав .dacpac как .zip и извлекая файл model.xml, я мог видеть, что <HeaderContents>некоторые из процедур были &#xA;(LF - символ линии) в них.

Это заставило меня понять, что по некоторым причинам все мои .SQL-файлы имели окончание строк Unix (LF), а не окончания строк Windows (CR LF). Преобразование всех файлов в конец оконной строки ( с помощью notepad ++ ) решило проблему.

Оригинал:

Хорошо, похоже, что большинство из них связано с строковыми константами в скриптах, содержащих новые строковые символы. Замена их с помощью определенных вручную символов означает, что они больше не собираются для перераспределения. т.е.

SET @doesnt_work = 
'FOO
BAR'

можно заменить на

SET @works = 'FOO'  + CHAR(13) + CHAR(10) + 'BAR'

Примечание. Это скорее обходное решение, чем решение, и, надеюсь, кто-то может предложить лучший способ сделать это ...

зрительно-студия-2015, SSDT, sqlproj,
Похожие вопросы