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 de mal?

291
demandé sur gotqn 2011-07-22 18:42:41

12 réponses

Cela fonctionnera dans SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
448
répondu Yuck 2011-07-22 14:48:28
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
137
répondu hoodaticus 2011-07-22 14:46:29

Impossible d'utiliser alter column pour cela, utilisez add place

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
42
répondu Carlos Quintanilla 2011-07-22 14:53:07

La bonne façon de le faire est la suivante:

  1. Exécutez la commande:

    sp_help [table name] 
    
  2. Copiez le nom du CONSTRAINT.

  3. Déposez 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]
    
23
répondu user3310402 2015-04-28 18:36:32

La solution de Hoodaticus était parfaite, merci, mais j'avais aussi besoin qu'elle soit ré-exécutable et trouvée de cette façon pour vérifier si cela avait été 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
répondu Dave 2016-02-03 10:08:45

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

  1. , Au moment de la création de la table
  2. modifier la colonne existante pour une table existante.

  1. , Au moment de la création de tableau / création d'une nouvelle colonne.

Requête

create table table_name
(
    column_name datatype default 'any default value'
);
  1. Modifier 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 modifier la valeur par défaut nous besoin de supprimer la contrainte par défaut générée par le système existant ou 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écute cette procédure de base de données système, elle prend le nom de la table comme paramètre. Il retourne la liste de toutes les contraintes pour toutes les colonnes dans le tableau.

execute [dbo].[sp_helpconstraint] 'table_name'
  1. supprime la contrainte par défaut existante pour colonne.

Syntaxe:

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

Syntaxe:

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

Santé @!!!

5
répondu Sunil Sharma 2015-02-24 05:25:14
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3
répondu steave 2014-01-27 13:52:42

Vient de trouver 3 étapes simples pour modifier la colonne déjà existante qui était nulle avant

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
répondu David Fawzy 2017-12-13 10:10:22

Essayez la commande suivante:

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
2
répondu Hasna Ashraf 2015-09-15 11:25:47

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

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
répondu ScottFoster1000 2017-06-02 05:01:15

Contraintes de première chute

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 valeur par défaut

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
0
répondu Mise 2018-03-20 19:57:18

Dans le cas où 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
répondu tibx 2018-08-17 12:24:43