Alter Table 'DEFAULT' ne pas définir les valeurs par défaut – SQL Server

J'essaie de modifier une colonne existante et d'append une colonne entière. En ajoutant une colonne entière, je définis DEFAULT sur 10 mais la valeur par défaut n'est pas définie lors de l'ajout de la colonne

ALTER TABLE dbo.Contacts ADD Col1 INT DEFAULT 10 

J'ai besoin de faire un script de mise à jour explicite pour définir tous les loggings passés comme valeurs par défaut

Alors que si la colonne est 'non nulle' alors elle vaut 10 par défaut pour tous les loggings.

 ALTER TABLE dbo.Contacts ADD Col2 INT NOT NULL DEFAULT 10 

Pourquoi la colonne nullable n'est pas définie avec la valeur par défaut? Dans mon tableau actuel, j'ai près de 850 mil loggings et ma nouvelle colonne est colonne nullable et j'essaye d'éviter une mise à jour après mon script de table ALTER. Quel est le path?

Je pense à créer une colonne non nullable avec la valeur par défaut de 10 et modifier de nouveau la contrainte à NULL. Est-ce que c'est une bonne approche? D'autres façons?

Vous devez utiliser WITH VALUES pour get la valeur et non la valeur null. En utilisant WideWorldImporters sur 2016:

 ALTER TABLE sales.orders ADD c1 INT DEFAULT 10 WITH VALUES GO 

La valeur de la colonne Valeur par défaut est appliquée aux nouvelles lignes insérées dans la table après la définition de la valeur de la colonne par défaut. Pour tester cela, essayez une command INSERT comme celle-ci.

 INSERT INTO TableName col1 VALUES (col1_value) 

Après cet INSERT, la valeur col2 doit get la valeur par défaut de 10 pour la ligne insérée.

Cependant, les lignes existantes dans la table ne reçoivent pas automatiquement la nouvelle valeur de colonne Default