Benutzerdefinierte CLR-Integration-Attribute - Übersicht

 

Die CLR-Komponente (Common Language Runtime) von .NET Framework ermöglicht den Einsatz beschreibender Schlüsselwörter, so genannter Attribute. Diese Attribute stellen weitere Informationen für viele Elemente bereit, z. B. Methoden und Klassen. Die Attribute werden mit den Metadaten des Objekts in der Assembly gespeichert. Mit Attributen kann Code für andere Entwicklungstools beschrieben oder das Laufzeitverhalten in SQL Server beeinflusst werden.

Wenn Sie eine CLR-Routine bei SQL Server registrieren, leitet SQL Server einen Satz von Eigenschaften zu der Routine ab. Diese Routineneigenschaften bestimmen die Fähigkeiten der Routine, darunter auch, ob die Routine indiziert werden kann. Z. B. die DataAccess Eigenschaft DataAccessKind.Read ermöglicht den Zugriff auf Daten aus SQL Server Benutzertabellen in einer CLR-Funktion. Das folgende Beispiel zeigt einen einfachen Fall, in dem die DataAccess Eigenschaftensatz zur Erleichterung der Datenzugriff aus einer Benutzertabelle 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  

Für Transact-SQL-Routinen leitet SQL Server Routineneigenschaften direkt aus der Routinendefinition ab. Für CLR-Routinen analysiert der Server den Routinentext nicht, um diese Eigenschaften abzuleiten. Stattdessen können Sie benutzerdefinierte Attribute für Klassen und Klassenmember verwenden, die in einer .NET Framework-Sprache implementiert wurden.

Für CLR-Routinen, benutzerdefinierte Typen und Aggregate benötigten benutzerdefinierten Attribute sind definiert, der Microsoft.SqlServer.Server Namespace.

Siehe auch

Benutzerdefinierte Attribute für CLR-Routinen