У меня очень широкая таблица, содержащая множество битовых полей. Эти битовые поля были изначально установлены как обнуляемые. Теперь мы только что решили, что не имеет смысла их обнулять; значение равно либо Да, либо Нет, значение по умолчанию. Другими словами, схема должна измениться с:
create table MyTable(
ID bigint not null,
Name varchar(100) not null,
BitField1 bit null,
BitField2 bit null,
...
BitFieldN bit null
)
до
create table MyTable(
ID bigint not null,
Name varchar(100) not null,
BitField1 bit not null,
BitField2 bit not null,
...
BitFieldN bit not null
)
alter table MyTable add constraint DF_BitField1 default 0 for BitField1
alter table MyTable add constraint DF_BitField2 default 0 for BitField2
alter table MyTable add constraint DF_BitField3 default 0 for BitField3
Итак, я только что прошел через SQL Management Studio, обновив все эти поля до значения, отличного от NULL, по умолчанию 0. И угадайте, что - когда я пытаюсь обновить его, SQL Mgmt studio внутренне воссоздает таблицу и затем пытается заново вставить все данные в новую таблицу ... включая нулевые значения! Что, конечно, приводит к ошибке, потому что он явно пытается вставить нулевое значение в необнуляемый столбец. Aaargh!
Очевидно, я мог запустить N операторов обновления вида:
update MyTable set BitField1 = 0 where BitField1 is null
update MyTable set BitField2 = 0 where BitField2 is null
но, как я уже говорил, есть поля n , и, более того, это изменение должно распространиться на несколько идентичных баз данных. Очень больно осуществлять вручную.
Есть ли способ заставить модификацию таблицы просто игнорировать нулевые значения и позволить правилу по умолчанию срабатывать при попытке вставить нулевое значение?