J'ai ce sql:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
mais apparemment, sur certaines autres bases de données que nous utilisons, la contrainte a un nom différent. Comment vérifier s'il y a une contrainte avec le nom FK_ChannelPlayerSkins_Channels
.
sql-server
information-schema
system-tables
Lieven Cardoen
la source
la source
Réponses:
essaye ça:
-- ÉDITER --
Lorsque j'ai répondu à l'origine à cette question, je pensais à "Clé étrangère" car la question d'origine demandait de trouver "FK_ChannelPlayerSkins_Channels". Depuis lors, de nombreuses personnes ont commenté la recherche d'autres «contraintes», voici quelques autres requêtes pour cela:
voici une autre méthode
Si vous avez besoin de plus d'informations sur les contraintes, consultez la procédure stockée système
master.sys.sp_helpconstraint
pour voir comment obtenir certaines informations. Pour afficher le code source à l'aide de SQL Server Management Studio, accédez à l '"Explorateur d'objets". De là, vous développez la base de données "Master", puis développez "Programmabilité", puis "Procédures stockées", puis "Procédures stockées système". Vous pouvez alors trouver "sys.sp_helpconstraint" et faire un clic droit dessus et sélectionner "modifier". Veillez simplement à ne pas y enregistrer de modifications. En outre, vous pouvez simplement utiliser cette procédure stockée système sur n'importe quelle table en l'utilisant commeEXEC sp_helpconstraint YourTableNameHere
.la source
Le moyen le plus simple de vérifier l'existence d'une contrainte (puis de faire quelque chose comme la supprimer si elle existe) est d'utiliser la fonction OBJECT_ID () ...
OBJECT_ID peut être utilisé sans le deuxième paramètre («C» pour les contraintes de vérification uniquement) et cela peut également fonctionner, mais si le nom de votre contrainte correspond au nom d'autres objets de la base de données, vous pouvez obtenir des résultats inattendus.
OBJECT_ID peut également être utilisé avec d'autres "contraintes" telles que les contraintes de clé étrangère ou les contraintes de clé primaire, etc. Pour de meilleurs résultats, incluez toujours le type d'objet approprié comme deuxième paramètre pour la fonction OBJECT_ID:
Types d'objet de contrainte:
Notez également que le schéma est souvent requis. Le schéma de contraintes prend généralement le schéma de la table parent.
Le fait de ne pas mettre vos contraintes (ou tout ce que vous vérifiez) entre crochets lors de l'utilisation de cette méthode peut également provoquer un faux négatif - si votre objet utilise des caractères inhabituels (tels que a.), Les crochets sont requis.
la source
OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1
pour être compatible de la version actuelle jusqu'à sql2000. Aucundbo
schéma requis également.Si vous recherchez un autre type de contrainte, par exemple des valeurs par défaut, vous devez utiliser une requête différente (de Comment trouver une contrainte par défaut en utilisant INFORMATION_SCHEMA? Répondu par devio ). Utilisation:
pour trouver une contrainte par défaut par son nom.
J'ai mis en place différents "si pas existe" vérifie dans mon message " DDL 'IF not Exists" pour rendre les scripts SQL réexécutables "
la source
la source
Cherchez-vous quelque chose comme ça, ci-dessous est testé dans SQL Server 2005
la source
Juste quelque chose à surveiller ......
Dans SQL Server 2008 R2 SSMS, la commande «Script Constraint as -> DROP And CREATE To» produit T-SQL comme ci-dessous
Hors de la boîte, ce script ne supprime PAS la contrainte car SELECT renvoie 0 lignes. (voir l'article Microsoft Connect ).
Le nom de la contrainte par défaut est incorrect mais je suppose que cela a aussi quelque chose à voir avec la fonction OBJECT_ID car changer le nom ne résout pas le problème.
Pour résoudre ce problème, j'ai supprimé l'utilisation de OBJECT_ID et utilisé le nom de contrainte par défaut à la place.
la source
OBJECT_ID(N'[YourSchema].[DEF_Detail_IsDeleted]')
si vous avez 2 contraintes du même nom dans différents schémas.J'utilise la requête suivante pour vérifier une contrainte existante avant de la créer.
Cela interroge la contrainte par nom en ciblant un nom de table donné. J'espère que cela t'aides.
la source
la source
la source
INFORMATION_SCHEMA
est votre ami. Il a toutes sortes de vues qui affichent toutes sortes d'informations de schéma. Vérifiez vos vues système. Vous constaterez que vous avez trois vues traitant des contraintes, une étantCHECK_CONSTRAINTS
.la source
J'utilise ceci pour vérifier les contraintes à distance sur une colonne. Il devrait avoir tout ce dont vous avez besoin.
la source
la source
Vous pouvez utiliser celui ci-dessus avec une mise en garde:
Vous devez utiliser le puis
name = [Constraint name]
une table peut avoir plusieurs clés étrangères et toujours pas la clé étrangère en cours de vérificationla source