共用方式為


CLR 整合自定義屬性概觀

.NET Framework 的 Common Language Runtime (CLR) 允許使用稱為屬性的描述性關鍵詞。 這些屬性會提供許多元素的其他資訊,例如方法和類別。 屬性會以 物件的元數據儲存在元件中,並可用來將程式代碼描述為其他開發工具,或影響 SQL Server 內的運行時間行為。

當您向 SQL Server 註冊 CLR 例程時,SQL Server 會衍生一組有關例程的屬性。 這些例程屬性會決定例程的功能,包括是否可以編製例程的索引。 例如,將 DataAccess 屬性設定為 DataAccessKind.Read ,可讓您從 CLR 函式內的 SQL Server 使用者資料表存取數據。 下列範例顯示設定 屬性以利用戶數據表數據表 1 進行數據存取的簡單案例DataAccess

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  

針對 Transact-SQL 例程,SQL Server 會直接從例程定義衍生例程屬性。 針對 CLR 例程,伺服器不會分析例程主體以衍生這些屬性。 相反地,您可以將自定義屬性用於以 .NET Framework 語言實作的類別和類別成員。

CLR 例程、使用者定義型別和匯總所需的自定義屬性定義於 命名空間中 Microsoft.SqlServer.Server

另請參閱

CLR 例程的自定義屬性