다음을 통해 공유


CLR 통합 사용자 지정 특성 개요

.NET Framework의 CLR(공용 언어 런타임)을 사용하면 특성이라는 설명이 포함된 키워드를 사용할 수 있습니다. 이러한 특성은 메서드 및 클래스와 같은 많은 요소에 대한 추가 정보를 제공합니다. 특성은 개체의 메타데이터와 함께 어셈블리에 저장되며, 코드를 다른 개발 도구에 설명하거나 SQL Server 내의 런타임 동작에 영향을 미치는 데 사용할 수 있습니다.

SQL Server에 CLR 루틴을 등록하면 SQL Server는 루틴에 대한 속성 집합을 파생합니다. 이러한 루틴 속성은 루틴을 인덱싱할 수 있는지 여부를 포함하여 루틴의 기능을 결정합니다. 예를 들어 CLR 함수 내 DataAccess 의 SQL Server 사용자 테이블에서 데이터에 액세스할 수 있도록 속성을 DataAccessKind.Read 설정합니다. 다음 예제에서는 사용자 테이블 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 루틴에 대한 사용자 지정 특성