web-dev-qa-db-fra.com

Comment définir une valeur par défaut pour une colonne existante

Cela ne fonctionne pas dans SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

L'erreur est:

Syntaxe incorrecte près du mot clé 'SET'.

Qu'est-ce que je fais mal?

316
Nakul Chaudhary

Cela fonctionnera dans SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
493
Yuck
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
144
hoodaticus

ne peut pas utiliser alter column pour cela, utilisez plutôt add

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
45
Carlos Quintanilla

La bonne façon de faire est la suivante: 

  1. Exécutez la commande: 

    sp_help [table name] 
    
  2. Copiez le nom de la CONSTRAINT.

  3. Supprimer le DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  4. Exécutez la commande ci-dessous:

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    
26
user3310402

La solution de Hoodaticus était parfaite, merci, mais j’avais aussi besoin de l’être de nouveau exécutable et j’ai trouvé le moyen de vérifier si c’était fait 

IF EXISTS(SELECT * FROM information_schema.columns 
           WHERE table_name='myTable' AND column_name='myColumn' 
             AND Table_schema='myDBO' AND column_default IS NULL) 
BEGIN 
  ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END
9
Dave

Il existe deux scénarios dans lesquels la valeur par défaut d'une colonne peut être modifiée,

  1. Au moment de créer la table
  2. Modifier la colonne existante pour une table existante.

  1. Au moment de créer la table/créer une nouvelle colonne.

Question 

create table table_name
(
    column_name datatype default 'any default value'
);
  1. Modifier la colonne existante pour une table existante

Dans ce cas, mon serveur SQL ne permet pas de modifier la valeur de contrainte par défaut existante. Donc, pour changer la valeur par défaut, nous devons supprimer la contrainte par défaut générée par le système existant ou celle générée par l'utilisateur. Et après cette valeur par défaut peut être définie pour une colonne particulière.

Suivez quelques étapes:

  1. Répertorie toutes les contraintes de valeur par défaut existantes pour les colonnes.

Exécutez cette procédure de base de données système, elle prend le nom de la table en tant que paramètre. Il renvoie la liste de toutes les contraintes pour toutes les colonnes de la table.

execute [dbo].[sp_helpconstraint] 'table_name'
  1. Supprimer les contraintes par défaut existantes pour une colonne.

Syntaxe:

alter table 'table_name' drop constraint 'constraint_name'
  1. Ajoutez une nouvelle contrainte de valeur par défaut pour cette colonne:

Syntaxe:

alter table 'table_name' add default 'default_value' for 'column_name'

à votre santé @!!!

5
Sunil Sharma

Vient de trouver 3 étapes simples pour modifier une colonne existante qui était nulle auparavant

update   orders
set BasicHours=0 where BasicHours is null

alter table orders 
add default(0) for BasicHours

alter table orders 
alter  column CleanBasicHours decimal(7,2) not null 
3
David Fawzy
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3
steave

Essayez de suivre la commande;

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
2
Hasna Ashraf

Comme la réponse de Yuck avec une vérification permettant au script d'être exécuté plusieurs fois sans erreur. (moins de code/chaînes personnalisées que d'utiliser information_schema.columns)

IF object_id('DF_SomeName', 'D') IS NULL BEGIN
    Print 'Creating Constraint DF_SomeName'
   ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END
1
ScottFoster1000

Vous pouvez utiliser la syntaxe suivante. Pour plus d'informations, consultez la question et les réponses suivantes: Ajoute une colonne avec une valeur par défaut à une table existante dans SQL Server

Syntaxe:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Exemple :

ALTER TABLE SomeTable
ADD SomeCol Bit NULL --Or NOT NULL.
CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is 
autogenerated.
DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Autre moyen:

Cliquez avec le bouton droit sur la table et cliquez sur Conception, puis cliquez sur la colonne pour laquelle vous souhaitez définir la valeur par défaut.

Puis, en bas de page, ajoutez une valeur par défaut ou une liaison: quelque chose comme "1" pour chaîne ou 1 pour int.

1

Contraintes de première goutte

https://stackoverflow.com/a/49393045/2547164

DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
                        WHERE NAME = N'__ColumnName__'
                        AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)

Deuxième créer une valeur par défaut

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
1
Mise

si une restriction existe déjà avec son nom par défaut:

-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);

-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;
0
tibx