2008-11-17 6 views
5

J'ai un champ (disons, foo) dans une table dans une base de données SQL Server qui a été défini comme nullable, mais les nouvelles exigences indiquent que ce champ doit être non nul. Quelle est la meilleure façon de mettre à jour ce champ non-null via un script de mise à jour sans supprimer le contenu de la table? J'ai essayé de générer un script à partir de la vue Création, mais échoue pendant l'exécution car le contenu actuel de la table avait des valeurs NULL pour foo. Pire encore, si j'ai ignoré cette erreur, il procède à supprimer tout le contenu de la table!Mise à jour du script pour mettre à jour un champ de table de SQL Server de NULL à non-nul

Répondre

10

Vous devez définir une valeur sur toutes les lignes avec NULL dans la colonne NULL avant de la modifier en NOT NULL.

-- Clean up the data which won't comply with the schema changes 
UPDATE t SET foo = 0 WHERE foo IS NULL 

-- Apply the NOT NULL 
ALTER TABLE t ALTER COLUMN foo int NOT NULL 

-- Add a default for the future if that's what you want 
ALTER TABLE t ADD CONSTRAINT t_foo_def DEFAULT 0 FOR foo 
0

Vous pouvez définir une valeur par défaut pour le champ non-nullable. Si vous voulez le changer de nullable à non-nullable, vous devez fournir une valeur qui peut être assignée aux lignes avec une valeur nulle dans ce champ.

Questions connexes