Come impostare un valore predefinito per una colonna esistente

Questo non funziona in SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES' 

L’errore è:

Sintassi errata vicino alla parola chiave ‘SET’.

Che cosa sto facendo di sbagliato?

Funzionerà in SQL Server:

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

non puoi usare alter column per questo, usa invece add

 ALTER TABLE Employee ADD DEFAULT('SANDNES') FOR CityBorn 

Il modo corretto per farlo è il seguente:

  1. Esegui il comando:

     sp_help [table name] 
  2. Copia il nome del CONSTRAINT .

  3. Eliminare il DEFAULT CONSTRAINT :

     ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
  4. Esegui il comando qui sotto:

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

La soluzione Hoodaticus era perfetta, grazie, ma avevo anche bisogno che fosse ripetibile e trovato in questo modo per verificare se fosse stato fatto …

 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 

Esistono due scenari in cui è ansible modificare il valore predefinito per una colonna,

  1. Al momento della creazione della tabella
  2. Modifica la colonna esistente per una tabella esistente.

  1. Al momento della creazione della tabella / creazione di una nuova colonna.

domanda

 create table table_name ( column_name datatype default 'any default value' ); 
  1. Modifica la colonna esistente per una tabella esistente

In questo caso il mio server SQL non consente di modificare il valore del vincolo predefinito esistente. Pertanto, per modificare il valore predefinito, è necessario eliminare il vincolo predefinito generato dal sistema esistente o generato dall’utente. E dopo che il valore predefinito può essere impostato per una particolare colonna.

Segui alcuni passaggi:

  1. Elenca tutti i vincoli di valore predefiniti esistenti per le colonne.

Esegui questa procedura di database di sistema, prende il nome della tabella come parametro. Restituisce l’elenco di tutti i vincoli per tutte le colonne all’interno della tabella.

 execute [dbo].[sp_helpconstraint] 'table_name' 
  1. Elimina il vincolo predefinito esistente per una colonna.

Sintassi:

 alter table 'table_name' drop constraint 'constraint_name' 
  1. Aggiungi un nuovo vincolo del valore predefinito per quella colonna:

Sintassi:

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

Saluti @!!!

 ALTER TABLE [dbo].[Employee] ADD DEFAULT ('N') FOR [CityBorn] 

Appena trovato 3 semplici passaggi per modificare la colonna già esistente che era null prima

 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 

Prova a seguire il comando;

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

Come la risposta di Yuck con un segno di spunta per consentire allo script di essere eseguito più di una volta senza errori. (meno codice / stringhe personalizzate rispetto all’utilizzo di 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 

Primi limiti di caduta

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) 

Secondo crea valore predefinito

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

nel caso esista già una restrizione con il suo nome predefinito:

 -- 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;