SQL Server ALTER COLUMN NOT NULL не имеет никакого эффекта

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

Данные для SOME_TABLE.PrinterPos не содержит никаких NULL ценности.

Я пишу скрипт обновления для применения к ~50 базам данных.

Следующий код не работает:

ALTER TABLE dbo.SOME_TABLE 
ALTER COLUMN PrinterPos smallint NOT NULL;

ALTER TABLE dbo.SOME_TABLE 
ADD CONSTRAINT PK_SOME_TABLE 
PRIMARY KEY CLUSTERED (SOME_TABLE_ID ASC, Store_ID ASC, PrinterPos ASC)
       WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, 
             IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
             ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY];

Я получаю сообщение

Невозможно определить ограничение PRIMARY KEY для столбца с нулевым значением в таблице 'SOME_TABLE'.

Похоже, первая команда полностью игнорируется. Хотя сообщения об этом нет.

  1. Чтобы поместить его в свой пакет, я попытался выполнить первую команду, используя sp_executesql безрезультатно.
  2. Если я выполняю первую команду в SQL Server Management Studio, а затем вторую, то она выполняется ОК.

Мне нужно, чтобы это изменение было полностью автоматизировано. Как я могу заставить это работать через скрипт?

1 ответ

Попробуйте добавить ключевое слово GO между двумя командами ALTER TABLE

Другие вопросы по тегам