web-dev-qa-db-fra.com

Modifier la valeur par défaut de la colonne

Je sais que vous pouvez modifier la valeur par défaut d’une colonne existante telle que this

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;

Mais selon ceci ma requête est supposée fonctionner: 

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL 
      CONSTRAINT DF_Constraint DEFAULT GetDate()

Donc ici, j'essaie de créer une colonne non nulle et de définir la valeur par défaut. Mais obtenir une erreur de syntaxe Incoorect près de CONSTRAINT. Est-ce que je manque qch?

19
SZT

Pour modifier une colonne existante, vous devez:

ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
5
Alex K.

Il n'y a pas de moyen direct pour changer la valeur par défaut d'une colonne dans SQL Server, mais le script paramétré suivant fera le travail:

DECLARE @table nvarchar(100)
DECLARE @column nvarchar(100)
DECLARE @newDefault nvarchar(100)
SET @table='TableName'
SET @column='ColumnName'
SET @newDefault='0'

IF EXISTS (select name from sys.default_constraints 
    where parent_object_id = object_id(@table) 
    and parent_column_id = columnproperty(object_id(@table), @column, 'ColumnId'))
BEGIN
    DECLARE @constraintName as nvarchar(200)
    DECLARE @constraintQuery as nvarchar(2000)

    SELECT @constraintName = name from sys.default_constraints 
        where parent_object_id = object_id(@table) and parent_column_id = columnproperty(object_id(@table),@column, 'ColumnId')

    SET @constraintQuery = 'ALTER TABLE '+@table+' DROP CONSTRAINT '+@constraintName +'; ALTER TABLE '+ @table 
        + ' ADD CONSTRAINT ' + @constraintName +' DEFAULT '+@newDefault+' FOR '+@column 

    EXECUTE sp_executesql @constraintQuery  
END 

Il suffit de remplir les paramètres et d'exécuter. Le script supprime la contrainte existante et en crée une nouvelle avec la valeur par défaut désignée.

4
Plamen Kasabov

CA devrait etre -

ALTER TABLE MyTable
ALTER COLUMN CreateDate DATETIME NOT NULL;

ALTER TABLE MyTable 
ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
2
Krishnraj Rana

De MSDN ALTER TABLE exemples:

D. Ajout d'une contrainte DEFAULT à une colonne existante

L'exemple suivant crée une table avec deux colonnes et insère une valeur dans la première colonne, l'autre colonne restant NULL. Une contrainte DEFAULT est ensuite ajoutée à la seconde colonne. . Pour vérifier que la valeur par défaut est appliquée, une autre valeur est insérée dans la première colonne et la table est interrogée.

CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ;
GO
INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ;
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
DEFAULT 50 FOR column_b ;
GO
INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ;
GO
SELECT * FROM dbo.doc_exz ;
GO
DROP TABLE dbo.doc_exz ;
GO

En bref, vous avez besoin du ADD CONSTRAINT

ALTER TABLE MyTable 
    ALTER COLUMN CreateDate DATETIME NOT NULL ;

ALTER TABLE MyTable
    ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
1
Will Marcouiller