Utilisation et modification d'instances de types définis par l'utilisateur
Mis à jour : 5 décembre 2005
Vous pouvez utiliser des types définis par l'utilisateur pour effectuer les opérations suivantes :
- Création de tables contenant des colonnes de type défini par l'utilisateur
- Insertion et modification de valeurs de colonnes de type défini par l'utilisateur
- Utilisation d'un type défini par l'utilisateur comme variable ou paramètre
Création de tables contenant des colonnes de type défini par l'utilisateur
Vous pouvez créer une table contenant des colonnes de type défini par l'utilisateur en spécifiant un nom de colonne et en indiquant le nom du type. Il s'agit de la même méthode que pour créer des colonnes associées à des types de données système ou à des types d'alias. Pour créer une colonne sur un type défini par l'utilisateur du CLR (Common Language Runtime), vous devez disposer de l'autorisation REFERENCES sur le type.
Pour créer une table contenant des colonnes de type défini par l'utilisateur
Insertion et modification de valeurs de colonnes de type défini par l'utilisateur
Vous pouvez insérer et modifier des valeurs de colonnes et modifier les valeurs de variables et de paramètres de type défini par l'utilisateur.
Remarque : |
---|
Une fois créés, les types définis par l'utilisateur ne peuvent pas être modifiés, car leur modification pourrait invalider les données des tables ou des index. Pour modifier un type, vous devez soit le supprimer et le recréer, soit émettre une instruction ALTER ASSEMBLY en utilisant une clause WITH UNCHECKED DATA. Pour plus d'informations, consultez ALTER ASSEMBLY (Transact-SQL). |
Vous pouvez insérer ou modifier des valeurs de colonnes de type défini par l'utilisateur en procédant comme suit :
Fournissez une valeur dans un type de données système SQL Server, à condition que le type défini par l'utilisateur prenne en charge la conversion de façon implicite ou explicite. L'exemple suivant indique comment mettre à jour une valeur dans une colonne de type
Point
défini par l'utilisateur, en la convertissant explicitement à partir d'une chaîne.UPDATE Cities SET Location = CONVERT(Point, '12.3:46.2') WHERE Name = 'Anchorage'
Appelez une méthode, marquée en tant que mutateur, du type défini par l'utilisateur afin d'effectuer la mise à jour. L'exemple suivant appelle une méthode « mutateur » de type point appelée
SetXY
qui met à jour l'état de l'occurrence du type :UPDATE Cities SET Location.SetXY(23.5, 23.5) WHERE Name = 'Anchorage'
Remarque : SQL Server retourne une erreur si une méthode mutateur est appelée pour une valeur Transact-SQL NULL, ou si une nouvelle valeur produite par une méthode mutateur est NULL. Modifiez la valeur d'une propriété ou d'un champ public du type défini par l'utilisateur. L'expression qui fournit la valeur doit pouvoir être implicitement convertie dans le type de la propriété. L'exemple suivant modifie la valeur de propriété
X
du type point défini par l'utilisateur :UPDATE Cities SET Location.X = 23.5 WHERE Name = 'Anchorage'
Pour modifier différentes propriétés de la même colonne de type défini par l'utilisateur, exécutez plusieurs instructions UPDATE ou appelez une méthode mutateur du type.
Dans l'exemple suivant, des valeurs de type Point
sont insérées dans la table :
INSERT INTO Cities (Name, Location)
VALUES ('Anchorage', CONVERT(Point, '23.5, 23.5'))
Pour insérer une valeur de type défini par l'utilisateur dans une table ou une vue
- INSERT (Transact-SQL)
- Pour mettre à jour une valeur de type défini par l'utilisateur dans une table ou une vue
Utilisation d'un type défini par l'utilisateur comme variable ou paramètre
Vous pouvez déclarer une variable Transact-SQL, ou le paramètre d'une fonction ou d'une procédure Transact-SQL ou Microsoft .NET Framework, comme étant un type défini par l'utilisateur. Les règles suivantes s'appliquent :
- Vous devez disposer d'une autorisation EXECUTE pour le type.
- Si vous créez une fonction, une procédure stockée ou un déclencheur qui contient une déclaration de type défini par l'utilisateur avec une liaison de schéma, vous devez détenir une autorisation REFERENCES pour ce type.
Si vous utilisez un nom constitué d'une seule partie, SQL Server recherche la référence du type dans l'ordre suivant :
- Schéma de l'utilisateur courant dans la base de données active.
- Schéma du propriétaire de la base de données (dbo) dans la base de données active.
- Espace du type natif du système.
Pour déclarer un type défini par l'utilisateur en tant que paramètre ou variable Transact-SQL d'une fonction ou procédure
Restrictions liées à l'utilisation de types définis par l'utilisateur
Lorsque vous créez et utilisez des types définis par l'utilisateur, tenez compte des points suivants :
- Vous ne pouvez pas définir la longueur, l'échelle, la précision ou autres métadonnées lorsque vous créez un type défini par l'utilisateur dans SQL Server.
- Une colonne, une variable ou un paramètre ne peut pas être déclaré comme étant un type défini par l'utilisateur si ce dernier est défini dans une autre base de données. Pour plus d'informations, consultez Utilisation de types définis par l’utilisateur dans les bases de données.
- Pour déterminer si un type défini par l'utilisateur est identique à un autre défini antérieurement, ne comparez pas l'ID du type, car celui-ci n'est valide que pendant la durée d'existence du type défini par l'utilisateur et peut être réutilisé. Comparez plutôt le nom de type CLR, le nom en quatre parties de l'assembly, et le nombre d'octets de ce dernier.
- Les colonnes sql_variant ne peuvent pas contenir d'occurrences d'un type défini par l'utilisateur.
- Les types définis par l'utilisateur ne peuvent pas être utilisés comme valeurs par défaut dans les procédures, fonctions ou déclencheurs CLR, ou dans les fonctions de partition.
- Il n'est pas possible de faire référence aux types définis par l'utilisateur dans les colonnes calculées des variables table.
Voir aussi
Concepts
Utilisation de types CLR définis par l'utilisateur
Autres ressources
Aide et Informations
Assistance sur SQL Server 2005
Historique des modifications
Version | Historique |
---|---|
5 décembre 2005 |
|