Cómo establecer un valor predeterminado para una columna existente

Esto no funciona en SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES' 

El error es:

Sintaxis incorrecta cerca de la palabra clave ‘SET’.

¿Qué estoy haciendo mal?

Esto funcionará en SQL Server:

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

no se puede usar la columna alter para eso, use add en su lugar

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

La forma correcta de hacerlo es la siguiente:

  1. Ejecute el comando:

     sp_help [table name] 
  2. Copie el nombre de la CONSTRAINT .

  3. Suelta la DEFAULT CONSTRAINT :

     ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
  4. Ejecute el siguiente comando:

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

La solución de Hoodaticus fue perfecta, gracias, pero también necesitaba que se pudiera volver a ejecutar y encontrar de esta manera para comprobar si se había hecho …

 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 

Hay dos escenarios en los que se puede cambiar el valor predeterminado de una columna,

  1. En el momento de crear la tabla
  2. Modificar la columna existente para una tabla existente.

  1. En el momento de crear una tabla / crear una nueva columna.

Consulta

 create table table_name ( column_name datatype default 'any default value' ); 
  1. Modificar la columna existente para una tabla existente

En este caso, mi servidor SQL no permite modificar el valor de restricción predeterminado existente. Entonces, para cambiar el valor predeterminado, necesitamos eliminar la restricción predeterminada generada por el sistema o generada por el usuario. Y después de que el valor predeterminado se puede establecer para una columna en particular.

Sigue algunos pasos:

  1. Enumere todas las restricciones de valor predeterminadas existentes para las columnas.

Ejecute este procedimiento de base de datos del sistema, toma el nombre de la tabla como parámetro. Devuelve una lista de todas las restricciones para todas las columnas dentro de la tabla.

 execute [dbo].[sp_helpconstraint] 'table_name' 
  1. Eliminar la restricción predeterminada existente para una columna.

Sintaxis:

 alter table 'table_name' drop constraint 'constraint_name' 
  1. Agregue una nueva restricción de valor predeterminada para esa columna:

Sintaxis:

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

¡salud @!

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

Acabo de encontrar 3 pasos simples para alterar la columna ya existente que era nula antes

 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 

Intenta seguir el comando;

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

Como la respuesta de Yuck con un cheque para permitir que el script se ejecute más de una vez sin error. (menos código / cadenas personalizadas que utilizando 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 

Primeras restricciones de caída

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) 

Segundo crea el valor predeterminado

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

en caso de que ya exista una restricción con su nombre predeterminado:

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