Partager via


Exécution d'opérations sur des types définis par l'utilisateur

Vous pouvez effectuer diverses opérations sur des instances de types définis par l'utilisateur. Ces opérations peuvent être notamment les suivantes :

  • appel à des méthodes ou récupération de propriétés d'un type défini par l'utilisateur ;

  • exécution de conversions des types de données ;

  • retour de valeurs d'un type défini par l'utilisateur à un client SQL ;

  • utilisation des clauses ORDER BY ;

  • création d'index sur des colonnes d'un type défini par l'utilisateur ;

  • création de colonnes calculées.

Appel à des méthodes ou récupération de propriétés d'un type défini par l'utilisateur

Vous pouvez appeler une méthode ou récupérer une propriété d'un type défini par l'utilisateur à n'importe quel endroit où peut apparaître une expression scalaire. Vous devez bénéficier de l'autorisation EXECUTE sur le type. Les méthodes qui changent l'état des données en dehors d'une instruction UPDATE seront exécutées, mais les modifications seront ignorées parce que les méthodes modifiables ne sont pas autorisées dans les requêtes.

Les chaînes retournées par des méthodes de type défini par l'utilisateur assument le classement de la base de données dans laquelle le type défini par l'utilisateur a été créé, quelle que soit la base de données actuelle.

AttentionAttention

Les méthodes et les propriétés qui sont utilisées dans des instructions SELECT ne doivent pas avoir d'effets secondaires. Si une méthode utilisée dans une instruction SELECT a des répercussions, les résultats ne sont pas déterministes.

AttentionAttention

Lorsque des appels de méthode ou de propriété se produisent sur des types définis par l'utilisateur, que des colonnes calculées reposent sur ces types et que l'appel se produit dans le contexte d'une opération sur la colonne calculée, les autorisations EXECUTE sur le type ne sont pas vérifiées. Dans ce cas, les autorisations sont vérifiées lors de la création de la colonne calculée.

Pour appeler une méthode ou récupérer une propriété d'un type défini par l'utilisateur

[!REMARQUE]

SQL Server Management Studio renvoie des valeurs d'un type défini par l'utilisateur en représentation binaire. Pour retourner ces valeurs sous forme de chaîne ou au format XML, utilisez CAST ou CONVERT.

Exécution de conversions de types de données en types définis par l'utilisateur

Vous pouvez effectuer une conversion implicite et explicite en des types définis par l'utilisateur ; consultez le tableau ci-dessous.

 

EN :

Type défini par l'utilisateur

Binaire

nvarchar

xml

DE :

Type défini par l'utilisateur

 

Explicite

Explicite

Implicite

Binaire

Implicite

 

 

 

nvarchar

Implicite

 

 

 

xml

Implicite

 

 

 

L'exemple suivant convertit explicitement une instance ComplexNumber d'un type défini par l'utilisateur en xml, puis appelle une expression XQuery dessus.

DECLARE @c ComplexNumber
SET @c = CONVERT(ComplexNumber, '(1,2i)')
SELECT CAST(@c AS xml).query('//Real/text()')

L'exemple suivant convertit implicitement les données xml en une instance du type défini par l'utilisateur ComplexNumber.

DECLARE @x xml, @u ComplexNumber
SET @x = '<ComplexNumber><Real>100</Real><Imaginary>4</Imaginary></ComplexNumber>'
SET @u = @x -- implicit convert
SELECT @u.ToString()

Pour plus d'informations, consultez CAST et CONVERT (Transact-SQL).

Retour de valeurs d'un type défini par l'utilisateur à un client SQL

Lorsqu'une colonne ou une expression d'un type défini par l'utilisateur est retournée à un client SQL comme résultat d'une instruction SELECT ou FETCH, la manière dont l'API du client accède à la colonne varie selon que cette API est managée (ADO.NET) ou non (ODBC ou OLE DB). Si le client utilise ADO.NET, il peut récupérer une instance du type sous la forme d'une valeur binaire en utilisant la méthode GetValue sur la classe SqlDataReader ou sous la forme d'un objet. Si le client utilise OLE DB, il reçoit les valeurs du type défini par l'utilisateur sous la forme d'une valeur binaire. Si le client utilise OLE DB, il reçoit la valeur du type défini par l'utilisateur sous forme de valeur binaire uniquement.

Utilisation des clauses ORDER BY, GROUP BY et PARTITION BY avec des types définis par l'utilisateur

Vous pouvez effectuer des opérations ORDER BY, GROUP BY et PARTITION BY avec des types définis par l'utilisateur si ce type prend en charge le classement binaire. Un type a un classement binaire si son indicateur IsByteOrdered est égal à TRUE dans l'attribut SqlUserDefinedType qui est spécifié dans sa définition. Cet indicateur signale que la représentation binaire du type est dans l'ordre sémantiquement correct pour ce type.

Création d'index sur des colonnes d'un type défini par l'utilisateur

Vous pouvez créer des index sur des colonnes d'un type défini par l'utilisateur si ce type prend en charge le classement binaire. Vous pouvez aussi créer des index sur des colonnes calculées qui sont définies comme appels de méthodes émanant d'une colonne d'un type défini par l'utilisateur, pourvu que les méthodes soient identifiées comme étant déterministes. Pour plus d'informations, consultez Types CLR définis par l'utilisateur.