J'ai une très grande table, contenant beaucoup, beaucoup de champs de bits. Ces champs de bits ont été initialement configurés comme nullables. Maintenant, nous venons de décider qu'il n'est pas logique de les annuler. la valeur est Oui ou Non, par défaut Non Autrement dit, le schéma devrait passer de:Mise à jour de la nullité des colonnes dans SQL 2008
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
Je viens juste de passer à travers le SQL Management Studio, la mise à jour tous ces champs à non-nullable, valeur par défaut 0. Et devinez quoi - quand j'essaie de le mettre à jour, SQL Mgmt studio recrée en interne la table, puis essaie de réinsérer toutes les données dans la nouvelle table ... y compris les valeurs nulles! Ce qui bien sûr génère une erreur, car il essaie explicitement d'insérer une valeur nulle dans une colonne non nullable. Aaargh!
Il est évident que je pouvais exécuter des instructions N de mise à jour du formulaire:
update MyTable set BitField1 = 0 where BitField1 is null
update MyTable set BitField2 = 0 where BitField2 is null
mais comme je l'ai dit, il y a n champs là-bas, et ce qui est plus, ce changement doit se propager vers plusieurs identiques bases de données. Très douloureux à mettre en œuvre manuellement.
Est-il possible de faire en sorte que la modification de la table ignore simplement les valeurs nulles et permette l'activation de la règle par défaut lorsque vous tentez d'insérer une valeur nulle?