Modifier type défini par l'utilisateur dans Sql Server
J'ai créé quelques types définis par l'utilisateur dans la bd comme ci-dessous
CREATE TYPE [dbo].[StringID] FROM [nvarchar](20) NOT NULL
et affectés à différentes tables. Mes tables en db sont dans différents schémas (pas seulement dbo)
Mais j'ai réalisé que j'ai besoin d'un plus grand champ, et j'ai besoin de modifier, d'e.g augmentation de nvarchar nvarchar, mais il n'existe pas de MODIFIER le TYPE de déclaration
J'ai besoin d'un script qui table temp/curseur quoi que ce soit et sauvegarder toutes les tables et les champs où mon type est utilisé. Puis modifier les champs d'un type de base - par exemple à partir de CustID [StringID] pour CustID [nvarchar(20)].
Déposer le type d'utilisateur et de le recréer avec le nouveau type - par exemple de type nvarchar(50)
et enfin retour des champs de type d'utilisateur
Je n'ai pas de définir des règles sur les types, donc ne pas avoir à déposer les règles et les rajouter
Je ne suis pas très familier avec T-Sql, de sorte que toute aide est très appréciée.
Vous devez vous connecter pour publier un commentaire.
C'est ce que j'ai l'habitude d'utiliser, mais un peu manuel:
sp_addtype
etsp_droptype
ont été dépréciées depuis SQL Server 2005.Cannot drop type 'dbo.MyUDT' because it is being referenced by object 'usp_do_whatever'. There may be other objects that reference this type.
Nous sommes à l'aide de la procédure suivante, elle nous permet de re-créer un type à partir de zéro, ce qui est une "start". Il renomme le type existant, crée le type, recompile des proc et des gouttes puis l'ancien type. Cela prend en charge les scénarios où tout simplement la suppression de l'ancien type de définition échoue en raison de références de ce type.
Exemple D'Utilisation:
Code:
il y a un bon exemple d'une étude plus complète de script ici
Il est intéressant de noter que ce script va comprendre des points de vue si vous en avez. J'ai couru et au lieu de exec avec inline généré un script que la sortie que j'ai ensuite modifié et a couru.
Aussi, si vous avez des fonctions/sprocs à l'aide de l'utilisateur defeined types vous aurez besoin de laisser avant l'exécution de votre script.
Leçon Apprise: à l'avenir, ne vous embêtez pas avec Udt ils sont plus de tracas que ce qu'ils valent.
Un: http://www.sql-server-performance.com/2008/how-to-alter-a-uddt/ a remplacé http://www.sql-server-performance.com/faq/How_to_alter_a%20_UDDT_p1.aspx
Comme devio dit il n'y a aucun moyen de simplement modifier un type défini par l'utilisateur si elle est en cours d'utilisation.
Un tour par SMS qui a fonctionné pour moi était de créer un créer un script et de faire les modifications appropriées; renommer l'existant UDT; exécuter le créer un script; recompiler le liés sprocs et déposer la version renommée.
Les solutions proposées ici ne peut être appliquée que si les types définis par l'utilisateur sont utilisés dans le tableau des définitions, et si l'UDT colonnes ne sont pas indexés.
Certains développeurs ont également des SP et des fonctions à l'aide de l'UDT paramètres, ce qui n'est pas couvert. (voir les commentaires sur le Robin lien et dans le Connecter l'entrée)
La connexion d'entrée à partir de 2007, a finalement été fermée au bout de 3 ans:
J'ai essayé de résoudre un problème similaire Modifier les COLLECTIONS de schémas XML, et les mesures semblent s'applique principalement pour MODIFIER le TYPE, trop:
Pour supprimer un type défini par l'utilisateur, les étapes suivantes sont nécessaires:
Nouvelle réponse à une vieille question:
Base de données Visual Studio les Projets gérer les supprimer et recréer de processus lorsque vous déployez des changements. Il va tomber stockées procs qui utilisent UDDTs et puis les recréer après suppression et recréation du type de données.
La façon la plus simple de le faire est par le biais de Visual Studio, de l'explorateur d'objets, qui est également pris en charge dans l'édition de la Communauté.
Une fois que vous avez faites un lien à SQL server, accédez au type, cliquez droit et sélectionnez Afficher le Code, effectuez vos modifications sur le schéma du type défini par l'utilisateur et cliquez sur mettre à jour. Visual Studio devrait vous montrer toutes les dépendances de cet objet et de générer des scripts de mise à jour du type et de recompiler les dépendances.
1.Renommez l'ancien type défini par l'utilisateur,
2.Exécuter la requête ,
3.Chute de l'ancien UDT.
J'ai rencontré ce problème avec des types personnalisés dans stockées procedres, et résolu avec le script ci-dessous. Je n'ai pas bien compris les scripts ci-dessus, et j'ai suivi la règle du "si vous ne savez pas ce qu'il fait, ne le faites pas".
En un mot, j'ai renommer l'ancien type, et en créer un nouveau avec le type d'original nom. Alors, je dis à SQL Server pour actualiser ses détails à propos de chaque procédure stockée en utilisant le type personnalisé. Vous disposez pour ce faire, que tout est encore "compilé" en référence à l'ancien type, même avec le changement de nom. Dans ce cas, le type j'avais besoin de changement a été "PrizeType". J'espère que cette aide. Je suis à la recherche de commentaires, de trop, j'ai donc apprendre 🙂
Notez que vous devrez peut-être aller à la Programmabilité > les Types > [Appropriées Type d'Utilisateur] et supprimer l'objet. J'ai trouvé que la BAISSE de TYPE ne semble pas toujours supprimer le type même après l'aide de l'instruction.
Simple
DROP TYPE
d'abord, puisCREATE TYPE
à nouveau avec des corrections/modifications?Il existe un test simple pour voir si elle est définie avant de vous laisser tomber ... un peu comme un tableau, proc ou de la fonction -- si je n'étais pas au travail, je regarde ce que c'est?
(Je ne écrémé au-dessus de trop ... si j'ai mal je m'excuse à l'avance! 😉