Información general de los atributos personalizados de la integración CLR

El Common Language Runtime (CLR) de .NET Framework permite el uso de palabras clave descriptivas, llamadas atributos. Estos atributos proporcionan información adicional para muchos elementos, tales como métodos y clases. Los atributos se guardan en el ensamblado con los metadatos del objeto y se pueden utilizar para describir el código a otras herramientas de desarrollo, o para alterar el comportamiento en tiempo de ejecución dentro de SQL Server.

Al registrar una rutina CLR con SQL Server, SQL Server deriva un conjunto de propiedades sobre la rutina. Estas propiedades rutinarias determinan las capacidades de la rutina, incluido si se puede indizar la rutina. Por ejemplo, establecer la propiedad DataAccess en DataAccessKind.Read permite tener acceso a datos de SQL Server dentro de una función CLR. En el ejemplo siguiente se muestra un caso simple en el que se establece la propiedad DataAccess para facilitar el acceso a los datos desde una tabla de usuario 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

Para las rutinas Transact-SQL, SQL Server deriva directamente las propiedades de la rutina de la definición de rutina. Para las rutinas CLR, el servidor no analiza el cuerpo de la rutina para derivar estas propiedades. En su lugar, puede utilizar atributos personalizados para las clases y miembros de clase implementados en un lenguaje .NET Framework.

Los atributos personalizados necesarios para las rutinas CLR, los tipos definidos por el usuario y los agregados se definen en el espacio de nombres Microsoft.SqlServer.Server.