Je peux supprimer une table si elle existe en utilisant le code suivant mais je ne sais pas comment faire de même avec une contrainte:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
J'ajoute également la contrainte en utilisant ce code:
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
la source
la source
constraint_object_id
au lieu de simplementobject_id
C'est beaucoup plus simple que la solution actuelle proposée:
Si vous devez supprimer un autre type de contrainte, voici les codes applicables à passer dans la fonction OBJECT_ID () dans la deuxième position du paramètre:
Vous pouvez également utiliser OBJECT_ID sans le deuxième paramètre.
Liste complète des types ici :
Type d'objet:
S'applique à: SQL Server 2012 à SQL Server 2014.
la source
Dans SQL Server 2016, vous pouvez utiliser DROP IF EXISTS:
Voir http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
la source
la source
La réponse de James fonctionne très bien si vous connaissez le nom de la contrainte réelle. La chose délicate est que dans les scénarios hérités et autres scénarios réels, vous ne savez peut-être pas comment la contrainte est appelée.
Si tel est le cas, vous risquez de créer des contraintes en double, pour éviter, vous pouvez utiliser:
la source
la source
TRY..CATCH
bloc.la source
Je pense que cela vous sera utile ...
Il supprimera la contrainte de clé étrangère basée sur une table et une colonne spécifiques.
la source
Vous pouvez utiliser ces requêtes pour trouver tous les FK de votre table.
la source
La réponse acceptée à cette question ne semble pas fonctionner pour moi. J'ai réalisé la même chose avec une méthode légèrement différente:
la source