jueves, 26 de junio de 2014

Eliminar una columna foranea

A veces sucede que queremos eliminar una columna pero no sabemos el nombre del constraint, porque nunca lo creamos y SGBD le asigna uno de manera implicita, aqui les dejo el script para solucionar el problema:

// En este ejemplo se pretende eliminar de la tabla GrupoPreguntas la columna IdTipoEvaluacion

declare @default sysname, @sql nvarchar(max)
-- obtener nombre constraint
select @default = name
from sys.default_constraints
where parent_object_id = object_id('[dbo].[GrupoPreguntas]')
AND type = 'D'
AND parent_column_id = (
    select column_id
 from sys.columns
    where object_id = object_id('[dbo].[GrupoPreguntas]')
 and name = 'IdTipoEvaluacion'
)
-- eliminando el default constraint
set @sql = N'alter table TABLE_NAME drop constraint ' + @default
exec sp_executesql @sql
-- ahora se elimina la columna
ALTER TABLE [dbo].[GrupoPreguntas]
DROP COLUMN IdTipoEvaluacion


saludos