Question

Je comprends que l'ajout d'une colonne à une table contenant des données dans le serveur SQL, la colonne doit avoir une option NULL ou une valeur par défaut. Sinon ce serait pad SQL Server les nouvelles lignes avec?

Je suis à une perte pour expliquer pourquoi je ne peux pas ajouter une colonne NOT NULL à une table vide cependant. Je l'ai essayé sur deux instances de SQL 2008 et une instance de SQL 2005 sans problème. Toutefois, un client avec SQL 2000 ne dispose ce problème. Est-ce lié à SQL 2000 ou est-il 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écembre 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Developer Edition sous 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 ne permet que des colonnes à ajouter qui peuvent contenir une ou nulls définition DEFAULT spécifiée. Colonne « conditionnement reference » ne peut pas être ajouté à la table « ActInv » parce qu'elle ne permet pas et ne précise nulls pas DEFAULT définition.

Était-ce utile?

La solution

SQL Server 2000 ne vérifie pas pour une table vide. Ce que vous voyez est une amélioration dans SQL Server 2005/2008.

Soit des procédés à deux étapes suivantes vont faire le changement dans SQL Server 2000 contre une table vide:

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NOT NULL CONSTRAINT ActInv_Temp DEFAULT 'foo'
ALTER TABLE [ActInv] DROP CONSTRAINT ActInv_Temp

go

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) NULL 
ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL 

Autres conseils

Je n'ai pas accès à 2000 pour vérifier, mais pouvez-vous ajouter une colonne avec une valeur par défaut du nom, de sorte qu'il réussit, puis juste laisser tomber le nom par défaut?

Le message d'erreur vous indique que vous ne pouvez pas ajouter la nouvelle colonne car il ne permet pas les valeurs NULL et ne spécifie pas une définition DEFAULT.

Vous devez ajouter une valeur par défaut dans le champ non annulable comme ceci:

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) DEFAULT 'foo' NOT NULL

Modifier Je viens de voir exactement ce que vous faites sur des installations séparées SQL Server (2000 et 2005). Si la table est vraiment vide peut-être la meilleure solution est de laisser tomber / créer la table. Cela ressemble à un bogue dans SQL Server 2000.

Avez-vous envisagé 2 dans l'ordre suivant:

ALTER TABLE [ActInv] ADD [BATCHNUMBER] NVARCHAR(50) 
GO

ALTER TABLE [ActInv] ALTER COLUMN [BATCHNUMBER] NVARCHAR(50) NOT NULL
GO

Je pense que cela devrait fonctionner sur 2000 et (je ne 2005 ici)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top