Posso descartar uma tabela se ela existir usando o código a seguir, mas não souber como fazer o mesmo com uma restrição:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
Também adiciono a restrição 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
fonte
fonte
constraint_object_id
em vez de apenasobject_id
Isso é muito mais simples que a atual solução proposta:
Se você precisar eliminar outro tipo de restrição, estes são os códigos aplicáveis para passar para a função OBJECT_ID () na segunda posição do parâmetro:
Você também pode usar OBJECT_ID sem o segundo parâmetro.
Lista completa de tipos aqui :
Tipo de objeto:
Aplica-se a: SQL Server 2012 através do SQL Server 2014.
fonte
No SQL Server 2016, você pode usar DROP IF EXISTS:
Consulte http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
fonte
fonte
A resposta de James funciona muito bem se você souber o nome da restrição real. O mais complicado é que, em cenários herdados e em outros cenários do mundo real, você pode não saber como é chamada a restrição.
Se for esse o caso, você corre o risco de criar restrições duplicadas, para evitar que você possa usar:
fonte
fonte
TRY..CATCH
bloco.fonte
Eu acho que isso será útil para você ...
Ele excluirá a restrição de chave estrangeira com base na tabela e coluna específicas.
fonte
Você pode usar essas consultas para encontrar todos os FKs para sua tabela.
fonte
A resposta aceita para esta pergunta não parece funcionar para mim. Consegui a mesma coisa com um método ligeiramente diferente:
fonte