Freigeben über


Übersicht über benutzerdefinierte CLR-Integrationsattribute

Die Common Language Runtime (CLR) von .NET Framework ermöglicht die Verwendung beschreibender Schlüsselwörter, die als Attribute bezeichnet werden. Diese Attribute enthalten zusätzliche Informationen für viele Elemente, z. B. Methoden und Klassen. Die Attribute werden in der Assembly mit den Metadaten des Objekts gespeichert und können verwendet werden, um Ihren Code für andere Entwicklungstools zu beschreiben oder um das Laufzeitverhalten in SQL Server zu beeinflussen.

Wenn Sie eine CLR-Routine bei SQL Server registrieren, leitet SQL Server eine Reihe von Eigenschaften über die Routine ab. Diese Routineeigenschaften bestimmen die Funktionen der Routine, einschließlich der Indizierung der Routine. Wenn Sie beispielsweise die DataAccess Eigenschaft DataAccessKind.Read so festlegen, dass Sie auf Daten aus SQL Server-Benutzertabellen in einer CLR-Funktion zugreifen können. Das folgende Beispiel zeigt einen einfachen Fall, in dem die Eigenschaft so festgelegt ist, dass der DataAccess Datenzugriff aus einer Benutzertabelle1 erleichtert wird.

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 Routineeigenschaften direkt aus der Routinedefinition ab. Bei CLR-Routinen analysiert der Server nicht den Textkörper der Routine, um diese Eigenschaften abzuleiten. Stattdessen können Sie benutzerdefinierte Attribute für Klassen und Klassenmember verwenden, die in einer .NET Framework-Sprache implementiert sind.

Die benutzerdefinierten Attribute, die für CLR-Routinen, benutzerdefinierte Typen und Aggregate erforderlich sind, werden im Microsoft.SqlServer.Server Namespace definiert.

Siehe auch

Benutzerdefinierte Attribute für CLR-Routinen