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?
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;
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.
CA devrait etre -
ALTER TABLE MyTable
ALTER COLUMN CreateDate DATETIME NOT NULL;
ALTER TABLE MyTable
ADD CONSTRAINT DF_Constraint DEFAULT GetDate() FOR CreateDate;
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;