Puedo descartar una tabla si existe usando el siguiente código pero no sé cómo hacer lo mismo con una restricción:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
También agrego la restricción usando este código:
ALTER TABLE [dbo].[TableName]
WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name])
REFERENCES [dbo].[TableName2] ([ID])
go
sql
sql-server
sql-server-2005
tsql
solrevdev
fuente
fuente
constraint_object_id
lugar de soloobject_id
Esto es mucho más simple que la solución propuesta actual:
Si necesita eliminar otro tipo de restricción, estos son los códigos aplicables para pasar a la función OBJECT_ID () en la posición del segundo parámetro:
También puede usar OBJECT_ID sin el segundo parámetro.
Lista completa de tipos aquí :
Tipo de objeto:
Se aplica a: SQL Server 2012 a través de SQL Server 2014.
fuente
En SQL Server 2016 puede usar DROP IF EXISTS:
Ver http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
fuente
fuente
La respuesta de James funciona bien si conoce el nombre de la restricción real. Lo complicado es que en el legado y otros escenarios del mundo real, es posible que no sepas cómo se llama la restricción.
Si este es el caso, corre el riesgo de crear restricciones duplicadas, para evitar puede usar:
fuente
fuente
TRY..CATCH
bloque.fuente
Creo que esto te ayudará ...
Eliminará la restricción de clave externa en función de una tabla y columna específicas.
fuente
Puede usar esas consultas para encontrar todos los FK de su tabla.
fuente
La respuesta aceptada a esta pregunta no parece funcionar para mí. Logré lo mismo con un método ligeramente diferente:
fuente