Почему SSDT показывает некоторые незначительные изменения только для определенных таблиц? - PullRequest
0 голосов
/ 28 января 2019

В моем проекте .sqlproj у меня есть несколько таблиц базы данных SQL, в которых есть столбцы с ограничениями по умолчанию, такие как:

 CREATE TABLE TableName
(
-- Some other columns defined too
[State] TINYINT NOT NULL DEFAULT (0),
)

При запуске SSDT схема сравнивает проекта сВ производственной базе данных происходит следующее.Сообщается, что некоторые таблицы, подобные приведенной выше, не имеют различий, а одна из них имеет следующие различия:

Инструмент сравнения говорит, что проект имеет это (и это верно, и это также верно для всех других таблиц):

-- Single braces around zero
[State] TINYINT DEFAULT (0) NOT NULL

но в базе данных есть это:

-- Double braces around zero
[State] TINYINT DEFAULT ((0)) NOT NULL

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

Я попытался открыть SSMS и щелкнуть правой кнопкой мыши по таблице в рабочей базе данных и Таблица сценариев имеет вид , CREATE To new window , и в сценарии создания появляется следующая строка:

ALTER TABLE [dbo].[TableName]
  ADD  DEFAULT ((0)) FOR [State]

, и для всех таблиц создается одно и то же, норазница указывается только для одной таблицы в сравнении.

Как мне это исправить?Как мне узнать, почему эта таблица особая , а разница сообщается только для этой таблицы?

1 Ответ

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

Это старая проблема с SSDT, которая была исправлена ​​- теперь, когда SSDT импортирует модель из базы данных, которую он использует для генерации списка различий, скобка-переносчик удаляется, а оставшееся выражение сравнивается, поэтому прежде всегоскачайте последний SSDT.

Я проверил, и проблема в версии 12.0 SSDT и исправлена ​​в 14.0, так что исправление находится где-то посередине.

Я бы просто установил все ваши значения по умолчаниюto (()) - либо сделайте это вручную, либо сделайте сравнение из вашей базы данных обратно в ваш проект, во-первых, это сделает две вещи, во-первых, это будет означать, что вы не получите этих надоедливых дополнительных вещей, а во-вторых, это сделает сравнение немногоБыстрее.

Если версия, хранящаяся в проекте SSDT, не имеет двух (s и) переносов, выражение SSDT проходит дополнительный шаг удаления (s) из скрипта, полученного из базы данных. но если у вас есть ((x)), тогда SSDT знает, что база данных также будет иметь ((x)), поэтому ей не нужно снимать лишние скобки.

Итак, 1- обновить, 2 - поставить их правильно.

ред

...