Итак, я установил новый SqlPackage 150 (у которого было 140 раньше без проблем) и дважды развернул базу данных (sqlpackage - шутка, это нужно сделать дважды при любом обновлении, чтобы увидеть какие новые причуды он имеет, когда изменяет нетронутый код) , я заметил, что это изменяет функции, даже если в реальном коде не произошло никаких изменений. Раньше у меня были проблемы с SqlPackage и очень плохо разработанными методами сравнения, я научился обходить их:
- не используйте
iif
, используйте case
- сохраняйте все
case when then
... end
в одной строке независимо от ее длины - всегда заключать в скобки (значения по умолчанию) и (вычисляемые поля)
- называть все ограничения (pks, unique) , проверки)
Сегодня что-то новое появилось . Весь мой код sql написан строчными буквами, а все имена заключены в кавычки [name]
, поэтому он чистый, как: create function [dbo].[fnFunction1](...)
. Но новый SqlPackage решил изменить ALL мои функции. Не процедуры, не таблицы, не представления, не триггеры, даже если все они написаны строчными буквами create *
. Я пытался опубликовать sh 3 раза, то же самое. Всегда меняются только функции.
Поэтому я запустил Schema Compare
, чтобы увидеть, в чем проблема. Вот как я ранее нашел причуды sqlpackage, которые я перечислил ранее, методом проб и ошибок. Я посмотрел на различия, и всегда есть одна разница:
- локальный код имеет
create function ...
- удаленный код имеет
CREATE function ...
Да, Ignore keyword casing
отмечен в опциях сравнения схем и в профиле Publi sh в проекте SSDT. Кажется, это не имеет отношения к функциям.
Разница в корпусе вызывает изменение функций, но не более того, даже если я всегда использую (и всегда использовал) create
в нижнем регистре. Так удаленно он хочет CREATE function
, в то время как локально он имеет create function
. Пока create table\view\procedure\trigger\index\...
круто.
Что здесь происходит? Я действительно не хочу менять регистр функций, также я не хочу изменять в каждой публикации sh, также не хочу возвращаться к SqlPackage 140.
Проблема не произошла происходит с использованием SqlPackage140 с SqlServer 2019 , но происходит на SqlPackage150 с SqlServer 2019 .