CLR 集成自定义属性概述

.NET Framework 的公共语言运行时(CLR)允许使用描述性关键字(称为属性)。 这些属性为许多元素(如方法和类)提供了其他信息。 这些属性使用对象的元数据保存在程序集中,可用于将代码描述到其他开发工具或影响 SQL Server 中的运行时行为。

向 SQL Server 注册 CLR 例程时,SQL Server 将派生有关该例程的一组属性。 这些例程属性确定例程的功能,包括是否可以为例程编制索引。 例如,设置 DataAccess 属性以 DataAccessKind.Read 允许访问 CLR 函数内 SQL Server 用户表中的数据。 以下示例演示了一个简单的情况,在该情况下,该 DataAccess 属性设置为便于从用户 表表 1 进行数据访问。

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 例程的自定义属性