sql server - tabla - Cómo establecer un valor predeterminado para una columna existente
modificar valor por defecto de una columna sql (12)
Esto no está funcionando 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?
Acaba de encontrar 3 pasos simples para modificar una columna ya existente que antes era nula
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
Al igual que la respuesta de Yuck con una comprobación 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
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;
Esto funcionará en SQL Server:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N''SANDNES'' FOR CityBorn;
Hay dos escenarios donde se puede cambiar el valor predeterminado para una columna,
- A la hora de crear mesa.
- Modificar columna existente para una tabla existente.
- En el momento de crear tabla / crear nueva columna.
Consulta
create table table_name
(
column_name datatype default ''any default value''
);
- Modificar columna existente para una tabla existente
En este caso, mi servidor SQL no permite modificar el valor de restricción predeterminado existente. Por lo tanto, para cambiar el valor predeterminado, necesitamos eliminar la restricción predeterminada generada por el usuario o el sistema existente. Y después de ese valor predeterminado se puede establecer para una columna en particular.
Siga algunos pasos:
- Listar todas las restricciones de valor por defecto existentes para las columnas.
Ejecute este procedimiento de la base de datos del sistema, toma el nombre de la tabla como un parámetro. Devuelve la lista de todas las restricciones para todas las columnas dentro de la tabla.
execute [dbo].[sp_helpconstraint] ''table_name''
- Eliminar la restricción predeterminada existente para una columna.
Sintaxis:
alter table ''table_name'' drop constraint ''constraint_name''
- Agregar nueva restricción de valor por defecto para esa columna:
Sintaxis:
alter table ''table_name'' add default ''default_value'' for ''column_name''
saludos @ !!!
Intenta seguir el comando;
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT ''This is not NULL'' FOR Address
La forma correcta de hacerlo es la siguiente:
Ejecuta el comando:
sp_help [table name]
Copia el nombre del
CONSTRAINT
.Suelte la
DEFAULT CONSTRAINT
:ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
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 encontré esta manera para verificar 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
Restricciones de primera caída
https://.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 crear valor por defecto
ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
no se puede usar alterar columna para eso, usa agregar en su lugar
ALTER TABLE Employee
ADD DEFAULT(''SANDNES'') FOR CityBorn
ALTER TABLE Employee ADD DEFAULT ''SANDNES'' FOR CityBorn
ALTER TABLE [dbo].[Employee] ADD DEFAULT (''N'') FOR [CityBorn]