valores unico unicas una tipo restricción restriccion permitir negativos llaves indice duplicados crear constraint check agregar aceptar sql sql-server sql-server-2008

sql - unico - restricción de tipo check



¿Por qué SQL Server sigue creando una restricción de DF? (2)

Estoy tratando de crear scripts de actualización y retroceso en SQL. El script de actualización agrega una columna como esta:

IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N''ColumnName'' AND object_id = OBJECT_ID(N''[dbo].[TableName]'')) ALTER TABLE TableName ADD ColumnName bit NOT NULL DEFAULT(0)

El script de retroceso elimina la columna de esta manera:

IF EXISTS (SELECT * FROM sys.columns WHERE Name = N''ColumnName'' AND object_id = OBJECT_ID(N''[dbo].[TableName]'')) ALTER TABLE TableName DROP COLUMN ColumnName

Sin embargo, la secuencia de comandos de retroceso produce este error:

Msg 5074, Level 16, State 1, Line 5 The object ''DF__TableName__ColumnName__1BF3D5BD'' is dependent on column ''ColumnName''. Msg 4922, Level 16, State 9, Line 5 ALTER TABLE DROP COLUMN ColumnName failed because one or more objects access this column.

Sé cómo eliminar la restricción, pero el nombre de la restricción cambia cada vez (el sufijo cambia). O bien necesito que SQL Server deje de crear esta restricción aleatoria de nombre O necesito poder eliminar la restricción en mi script usando caracteres comodín, ya que el nombre cambia.


Ejecuta esto:

declare @name as nvarchar(255); SELECT @name = name FROM dbo.sysobjects WHERE name like ''DF__XXX__YYY__%'' and type = ''D'' IF @name is not null BEGIN EXEC(''ALTER TABLE XXX] DROP CONSTRAINT '' + @name); END


Esta es la restricción default que se agrega debido a la DEFAULT(0) en la columna que acaba de agregar.

Puede nombrarlo usted mismo para que tenga un nombre fijo conocido en lugar de confiar en la generación automática de nombres.

ALTER TABLE TableName ADD ColumnName bit NOT NULL CONSTRAINT DF_Some_Fixed_Name DEFAULT(0)

A continuación, para eliminar la columna y la restricción juntos

ALTER TABLE dbo.TableName DROP CONSTRAINT DF_Some_Fixed_Name, COLUMN ColumnName