Attributs personnalisés CLR Integration - vue d’ensemble
Le CLR (Common Language Runtime) du .NET Framework autorise l'utilisation de mots clés descriptifs, appelés attributs. Ces attributs fournissent des informations supplémentaires sur de nombreux éléments, comme les méthodes et les classes. Ils sont enregistrés dans l'assembly avec les métadonnées de l'objet et peuvent être utilisés pour décrire votre code à d'autres outils de développement ou pour affecter le comportement au moment de l'exécution au sein de SQL Server.
Lorsque vous enregistrez une routine CLR avec SQL Server, SQL Server ce dernier dérive un jeu de propriétés relatives à la routine. Ces propriétés déterminent les fonctionnalités de la routine, notamment sa capacité d'indexation. Par exemple, si le DataAccess propriété DataAccessKind.Read permet d’accéder à données SQL Server tables utilisateur à l’intérieur d’une fonction CLR. L’exemple suivant illustre un cas simple dans lequel le DataAccess propriété est définie pour faciliter l’accès aux données d’une table utilisateur table1.
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
public partial class UserDefinedFunctions
{
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static string func1()
{
// Open a connection and create a command
SqlConnection conn = new SqlConnection("context connection = true");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT str_val FROM table1 WHERE int_val = 10";
// where table1 is a user table
// Execute this command
SqlDataReader rd = cmd.ExecuteReader();
// Set string ret_val to str_val returned from the query
string ret_val = rd.GetValue(0).ToString();
rd.Close();
return ret_val;
}
}
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlClient
Public partial Class UserDefinedFunctions
<SqlFunction(DataAccess = DataAccessKind.Read)> _
Public Shared Function func1() As String
' Open a connection and create a command
Dim conn As SqlConnection = New SqlConnection("context connection = true")
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText = "SELECT str_val FROM table1 WHERE int_val = 10"
' where table1 is a user table
' Execute this command
Dim rd As SqlDataReader = cmd.ExecuteReader()
' Set string ret_val to str_val returned from the query
Dim ret_val As String = rd.GetValue(0).ToString()
rd.Close()
Return ret_val
End Function
End Class
Pour les routines Transact-SQL, SQL Server dérive directement leurs propriétés de leur définition. Pour les routines CLR, le serveur n'analyse pas le corps de la routine pour dériver ces propriétés. À la place, vous pouvez utiliser des attributs personnalisés pour les classes et les membres des classes implémentés dans un langage du .NET Framework.
Les attributs personnalisés que nécessaires pour les routines CLR et agrégats définis par l’utilisateur sont définies dans le Microsoft.SqlServer.Server espace de noms.