Impossible d'ajouter un “not NULL” colonne de table dans SQL Server
Je comprends que lors de l'ajout d'une colonne à une table contenant des données dans SQL server, la colonne doit avoir une valeur NULL option ou d'un défaut. Sinon, qu'en serait SQL Server pad les nouvelles lignes?
Je suis à une perte pour expliquer pourquoi je ne peux pas ajouter une colonne not NULL à une table vide. J'ai essayé sur deux instances de SQL 2008 et une instance de SQL 2005 avec pas de problèmes. Cependant, un client avec SQL 2000 n'ont ce problème. Est-ce lié à SQL 2000 ou est-ce une option que vous pouvez désactiver. Espérons que c'est une option.
Select @@Version
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) 17 Déc 2002 14:22:05
Copyright (c) 1988-2003 la Société Microsoft Developer Edition sur Windows
NT 5.1 (Build 2600: Service Pack 3)
Select count(*) from actinv
0
ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL
Msg 4901, Niveau 16, État 1, Ligne 1
ALTER TABLE permet uniquement les colonnes à ajouter qui peut contenir des valeurs null ou ont un
Définition par DÉFAUT spécifié. La colonne "BATCHNUMBER' ne peut pas être ajouté à la table
'ActInv" car il n'autoriser les valeurs null et ne pas spécifier une valeur par DÉFAUT
définition.
Eh bien, je ne Select count(*) from ActInv et elle renvoie zéro!
Slect count(*) renvoie uniquement les enregistrements pour lesquels au moins une colonne n'est pas nulle. Je sais, l'air bête, mais essayez un select * from table à la place.
Je ne savais pas que! Sélectionnez * retourne aucune ligne bien, je viens de vérifier.
Neil N, vous êtes incorrect. créer le tableau b(int) insérer les valeurs de b(null) select count(*) from b -- 1
OriginalL'auteur user69374 | 2009-06-30
Vous devez vous connecter pour publier un commentaire.
SQL Server 2000 ne permet pas de vérifier une table vide. Ce que vous voyez est une amélioration dans SQL Server 2005/2008.
L'une des deux processus d'étapes va faire le changement dans SQL Server 2000 par rapport à une table vide:
aller
Cela a fonctionné à la perfection, sauf entre Modifiant la table pour ajouter la colonne nullable, et Modifiant la table pour ne PAS NULLE, j'ai eu à mettre à JOUR <table> SET newcol = <valeur>. SQL ne permettent pas à une colonne nullable, avec toutes les valeurs null, être converti en une colonne not NULL. C'est une évidence 🙂
Cette réponse est spécifique à l'OP du problème où les OP avaient un vide table de SQL Server 2000. Avec une table vide une mise à jour est un no-op, et n'est pas nécessaire. SQL Server 2005 et versions ultérieures vérifier le tableau si l'ajout d'une colonne not null, et aller de l'avant si la table est vide.
OriginalL'auteur Shannon Severance
Je n'ai pas accès à 2000 pour vérifier, mais pouvez-vous ajouter une colonne avec un nom par défaut, de sorte qu'il réussit, il suffit de déposer le nom par défaut?
OriginalL'auteur A-K
Le message d'erreur vous indique que vous ne pouvez pas ajouter une nouvelle colonne parce qu'il n'autorise pas les valeurs null et ne spécifiez pas une définition par DÉFAUT.
Vous devez ajouter une valeur par défaut à la non nullable champ comme ceci:
Edit: je viens de voir exactement ce que vous faites sur des installations de SQL Server (2000 et 2005). Si la table est vraiment vide peut-être que la meilleure solution est de supprimer ou de créer la table. Cela ressemble à un bug dans SQL Server 2000.
La question est pourquoi ne SQL2000 besoin d'un DÉFAUT si il n'y a pas de lignes dans la table? SQL2005 et versions SQL2008 ne pas!
OriginalL'auteur Andrew Hare
Avez-vous considéré les 2 suivants dans l'ordre:
Je pense que cela devrait travailler sur 2000 (je ne dispose que d'ici 2005)
OriginalL'auteur feihtthief