Comment modifier un type de table défini par l'utilisateur dans SQL Server?
A ma connaissance, il est impossible de modifier/modifier un type de table.Vous pouvez créer le type avec un nom différent, puis supprimer l'ancien type et le modifier pour le nouveau nom.
Crédits à jkrajes
Selon msdn , cela ressemble à "La définition du type de table définie par l'utilisateur ne peut pas être modifiée après sa création".
C'est un peu un bidouillage, mais semble fonctionner. Vous trouverez ci-dessous les étapes et un exemple de modification d’un type de table. Une remarque est que sp_refreshsqlmodule échouera si la modification apportée au type de table est une modification radicale de cet objet, généralement une procédure.
sp_rename
_ pour renommer le type de table, j’ajoute généralement z au début du nom.sp_refreshsqlmodule
dessus.EXEC sys.sp_rename 'dbo.MyTableType', 'zMyTableType';
GO
CREATE TYPE dbo.MyTableType AS TABLE(
Id INT NOT NULL,
Name VARCHAR(255) NOT NULL
);
GO
DECLARE @Name NVARCHAR(776);
DECLARE REF_CURSOR CURSOR FOR
SELECT referencing_schema_name + '.' + referencing_entity_name
FROM sys.dm_sql_referencing_entities('dbo.MyTableType', 'TYPE');
OPEN REF_CURSOR;
FETCH NEXT FROM REF_CURSOR INTO @Name;
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC sys.sp_refreshsqlmodule @name = @Name;
FETCH NEXT FROM REF_CURSOR INTO @Name;
END;
CLOSE REF_CURSOR;
DEALLOCATE REF_CURSOR;
GO
DROP TYPE dbo.zMyTableType;
GO
ATTENTION:
Cela peut être destructeur pour votre base de données, vous devrez donc commencer par le tester sur un environnement de développement.
Voici des étapes simples qui minimisent l’ennui et ne nécessitent pas de scripts semi-automatisés ou d’outils coûteux.
N'oubliez pas que vous pouvez générer des instructions DROP/CREATE pour plusieurs objets à partir de la fenêtre Détails de l'explorateur d'objets (les scripts DROP et CREATE sont ainsi regroupés, ce qui facilite l'insertion de logique entre les actions Drop et Create):
Si vous avez des projets plus petits où il peut être judicieux de modifier l'architecture de l'infrastructure, envisagez d'éliminer les types de table définis par l'utilisateur. Entity Framework et des outils similaires vous permettent de déplacer la plupart, sinon la totalité, de votre logique de données vers votre base de code, où il est plus facile à gérer.
Si vous pouvez utiliser un projet de base de données dans Visual Studio, vous pouvez y apporter vos modifications et utiliser une comparaison de schéma pour synchroniser les modifications apportées à votre base de données.
De cette façon, la suppression et la recréation des objets dépendants sont gérées par le script de modification.
vous ne pouvez pas modifier/modifier votre type. Vous devez supprimer l'existant et le recréer avec le nom/type de données correct ou ajouter une nouvelle colonne/s
Simon Zeinstra a trouvé la solution!
Cependant, j'ai utilisé la communauté Visual Studio 2015 et je n'ai même pas eu besoin d'utiliser la comparaison de schéma.
À l'aide de l'explorateur d'objets SQL Server, j'ai trouvé mon type de table défini par l'utilisateur dans la base de données. J'ai cliqué avec le bouton droit sur le type de table et sélectionné. Cela a ouvert un onglet de code dans IDE avec le code TSQL visible et éditable. J'ai simplement changé la définition (dans mon cas, la taille d'un champ nvarchar a été augmentée) et cliqué sur le bouton Mettre à jour la base de données en haut à gauche de l'onglet.
Hé Presto! - une vérification rapide dans SSMS et la définition de udtt a été modifiée.
Génial - merci Simon.
Vous devez supprimer l'ancien type de table et en créer un nouveau. Cependant, s'il existe des dépendances (toutes les procédures stockées l'utilisant), vous ne pourrez pas le supprimer. J'ai posté une autre réponse sur la façon d'automatiser le processus de suppression temporaire de toutes les procédures stockées, de modification de la table, puis de restauration des procédures stockées.