Comment puis-je renommer mes contraintes
J'ai renommé une table dans ma base de données avec
EXEC sp_rename 'tblOldAndBusted', 'tblNewAndShiny'
et toutes les contraintes de clé étrangère ont été mises à jour pour le nouveau nom de la table, mais ils sont toujours nommés d'après l'ancien nom de la table. Par exemple, j'ai maintenant FK_tblOldAndBusted_tblTastyData mais j'aimerais avoir FK_tblNewAndShiny_tblTastyData.
Est-il un moyen facile de faire un script de ce?
Aussi, suis-je trop anale? Je sais que la base de données fonctionne très bien avec l'ancien nom de la table dans la les contraintes, mais il se sent comme fenêtres cassées.
ce n'est pas anal, lorsque vous obtenez une erreur de contrainte, il est agréable d'avoir le véritable nom de la table et de la colonne en tant que partie du nom de la contrainte, de sorte que vous pouvez déterminer le problème. si le nom de la contrainte qui a le mauvais nom de la table, qui va juste vous causer un peu de retard dans la compréhension du problème.
Ce n'est pas l'anal, c'est pénal.
Ce n'est pas l'anal, c'est pénal.
OriginalL'auteur Matt Casto | 2010-09-16
Vous devez vous connecter pour publier un commentaire.
Essayer:
Aussi, il y a un bug concernant le renommage de telles choses lorsque vous traitez avec des non-par défaut
schema
.Impossible de renommer une contrainte par défaut pour une table dans un schéma qui n'est pas dbo par rsocol @Microsoft Connect
Pour ceux qui utilisent
sp_rename
avec des objets qui ont un point dans le nom (ala EntityFramework créé des contraintes de), vous aurez besoin de support-vers le haut le@objname
paramètre, ainsi que notamment'OBJECT'
comme le@objtype
paramètre:exec sp_rename @objname = '[dbo].[FK_dbo.TableA_dbo.TableB_ColumnOne]', @newname = 'FK_dbo.TableA_dbo.TableC_ColumnOne', @objtype = 'object';
OriginalL'auteur Denis Valeev
Je ne suis pas un grand fan de curseurs et ceci peut être écrit de façon beaucoup plus simple.
OriginalL'auteur foxfire
Si quelqu'un est intéressé, j'ai juste eu à renommer toutes les contraintes par défaut pour l'un audit champ nommé "EnteredDate"à un modèle spécifique. Mise à jour et remplacez-les au besoin. J'espère que cette aide, et peut-être un point de départ.
OriginalL'auteur user906573
Après certains plus de creuser, j'ai trouvé qu'en fait, il doit être de cette forme:
Source
OriginalL'auteur ozz
Si il y a trop de renommer, comment au sujet de l'exportation de vidage, modifiez le fichier de vidage dans un éditeur de texte de son choix pour remplacer le nom de la table, puis restaurer à partir d'une décharge? Je veux dire à l'exportation du cliché des seules contraintes, pas tous.
Ok. J'ai eu à utiliser cette méthode lorsque un de mes bases de données MySQL a été migré de Windows pour Amazon RDS. On a tous les noms de table en majuscules, alors que le DUMP nous avons obtenu à partir de windows a en bas de casse. Et sur RDS, et sous linux, MySQL noms de table sont sensibles à la casse.
OriginalL'auteur Ashish Patil
En fonction user906573 du script. Générer un script pour renommer tous les paramètres par défaut dans la base de données. Utile pour la correction des contraintes qui n'étaient pas explicitement nommé à créer des temps.
OriginalL'auteur Mark Challen
Je sais que cette discussion date un peu mais je voulais poster mon alternative à @foxfire la réponse que j'ai apporté quelques modifications. Fait prendre un petit morceau de noms que j'ai couru dans la base de données où il y avait tellement de renomme fait l' @sql truncate. J'ai aussi ajouté de la gestion d'erreur de sortir ainsi que des noms de schéma pour le traitement des différents schémas autres que dbo. J'ai choisi de ne pas utiliser de commencer à essayer de sorte qu'il pourrait être utilisé entre plusieurs versions de sql server. La clause where peut être manipulé pour répondre à l'OP de l'intention d'origine.
OriginalL'auteur SpaceGhost440