Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le Common Language Runtime (CLR) du .NET Framework permet d’utiliser des mots clés descriptifs, appelés attributs. Ces attributs fournissent des informations supplémentaires pour de nombreux éléments, tels que des méthodes et des classes. Les attributs 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 d’exécution à l’intérieur de SQL Server.
Lorsque vous inscrivez une routine CLR auprès de SQL Server, SQL Server dérive un ensemble de propriétés sur la routine. Ces propriétés de routine déterminent les fonctionnalités de la routine, notamment si la routine peut être indexée. Par exemple, la définition de la DataAccess propriété DataAccessKind.Read pour vous permet d’accéder aux données à partir de tables utilisateur SQL Server à l’intérieur d’une fonction CLR. L’exemple suivant montre un cas simple dans lequel la propriété est définie pour faciliter l’accès DataAccess aux données à partir d’une table de table utilisateur1.
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 Transact-SQL routines, SQL Server dérive les propriétés de routine directement de la définition de routine. Pour les routines CLR, le serveur n’analyse pas le corps de la routine pour dériver ces propriétés. Au lieu de cela, vous pouvez utiliser des attributs personnalisés pour les classes et les membres de classe implémentés dans un langage .NET Framework.
Les attributs personnalisés nécessaires pour les routines CLR, les types définis par l’utilisateur et les agrégats sont définis dans l’espace Microsoft.SqlServer.Server de noms.