CLR 集成自定义属性的概览

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

向 SQL Server 注册 CLR 例程时,SQL Server 将派生有关该例程的一组属性。这些例程属性确定该例程的功能,包括是否可以对该例程编制索引。例如,如果将 DataAccess 属性设置为 DataAccessKind.Read,您将能够访问 CLR 函数内的 SQL Server 用户表中的数据。以下示例显示一种简单情况,其中设置了 DataAccess 属性以加快自用户表 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

对于 Transact-SQL 例程,SQL Server 从例程定义直接派生例程属性。对于 CLR 例程,该服务器派生这些属性时并不分析例程主体;您可以使用采用 .NET Framework 语言实现的类和类成员的自定义属性。

在 Microsoft.SqlServer.Server 命名空间中定义 CLR 例程、用户定义类型和聚合所需的自定义属性。

请参阅

概念