SQL CLR 데이터베이스 프로젝트 및 데이터베이스 개체의 특성

특성을 각 SQL Server 프로젝트와 해당 프로젝트에 들어 있는 모든 데이터베이스 개체에 적용해야 합니다. SQL Server CLR(공용 언어 런타임)을 사용하여 다음 개체 형식을 만들 수 있습니다.

프로젝트 / 파일

적용해야 하는 특성

Project

SqlAssemblyAttribute

집계

SqlUserDefinedAggregateAttribute

저장 프로시저

SqlProcedureAttribute

트리거

SqlTriggerAttribute

사용자 정의 함수

SqlFunctionAttribute

사용자 정의 형식

SqlUserDefinedTypeAttribute

SqlAssembly 특성

이 특성은 SQL Server 데이터베이스에 배포된 모든 어셈블리에 적용되어야 합니다. 이 특성에는 매개 변수가 없습니다. SQL Server 프로젝트를 만들 때 AssemblyInfo 파일에 추가됩니다.

SqlUserDefinedAggregate 특성

이 특성은 사용자 정의 집계 개체에 적용되어야 합니다. 이 특성에는 두 개의 속성이: FormatandMaxByteSize.

  • Format
    필수 요소입니다. 집계의 저장소 형식입니다. 지원되는 형식은 다음과 같습니다.

    Native – SQL Server에서 디스크에 있는 효율적인 기본 표현을 사용하도록 지정합니다. 이 형식 옵션은 가장 간단하고 성능이 좋습니다. 이 형식에 대한 요구 사항은 다음과 같습니다.

    • StructLayout.LayoutKindSequential 특성은 집계에 적용되어야 합니다.

    • 모든 집계 필드는 blittable이어야 합니다. 즉, 관리되는 메모리와 관리되지 않는 메모리에서 공통적인 표현을 사용하여 Interop 마샬러에서 특별히 처리할 필요가 없도록 해야 합니다.

    • 집계에서 MaxByteSize 값을 지정하면 안 됩니다.

    • 집계에 [NonSerialized] 필드가 있으면 안 됩니다.

    • 필드가 명시적 레이아웃으로 표시되면 안 됩니다.

    UserDefined - 사용자가 이진 형식에 대해 모든 권한을 갖도록 지정합니다. 이 형식에 대한 요구 사항은 다음과 같습니다.

    • 집계에서 IBinarySerialize를 구현해야 합니다.

    • 집계에서 MaxByteSize 값을 지정해야 합니다.

  • MaxByteSize
    이 집계의 인스턴스에 대한 최대 크기(바이트)입니다. Format이 UserDefined로 설정된 경우에만 필요합니다. Format이 Native로 설정된 경우에는 지정하지 않아야 합니다.

이 예제에서는 집계의 Format을 Native로 지정합니다.

<SqlUserDefinedAggregate(Format.Native)>
Public Class SampleAggregate
    '...
End Class
[SqlUserDefinedAggregate(Format.Native)]
public class SampleAggregate
{
   //...
}

SqlProcedure 특성

이 특성은 저장 프로시저 개체에 적용되어야 합니다. 이 특성에는 다음과 같은 매개 변수가 있습니다.

  • Name - 선택적 요소. SQL Server에서 저장 프로시저를 참조할 때 사용할 이름을 지정합니다.

이 예제에서는 sp_sqlName이라는 이름을 사용하여 저장 프로시저를 참조하도록 지정합니다.

Partial Public Class StoredProcedures

    <SqlProcedure(Name:="sp_sqlName")>
    Public Shared Sub SampleProcedure(ByVal s As SqlString)
        '...
    End Sub
End Class
public partial class StoredProcedures
{
    [SqlProcedure(Name="sp_sqlName")]
    public static void SampleProcedure(SqlString s)
    {
        //...
    }
}

SqlTrigger 특성

이 특성은 트리거 개체에 적용되어야 합니다. 이 특성에는 다음과 같은 매개 변수가 있습니다.

  • Name - 선택적 요소. SQL Server에서 트리거를 참조할 때 사용할 이름을 지정합니다.

  • Target - 필수적 요소. 트리거를 적용할 대상을 지정합니다. 대상의 형식은 사용자가 만드는 대상 형식에 따라 다릅니다. DDL, DML 또는 LOGON 트리거를 만들 수 있습니다. 가장 일반적인 형식의 트리거가 테이블에 적용됩니다.

  • Event - 필수적 요소. 트리거를 활성화하는 동작을 지정합니다.

이 예제에서는 authors 테이블의 기존 데이터가 업데이트될 경우(UPDATE) 트리거가 활성화되도록 지정합니다.

Partial Public Class Triggers

    <SqlTrigger(Target:="authors", Event:="FOR UPDATE")>
    Public Shared Sub AuthorsUpdateTrigger()

        '...
    End Sub
End Class
public partial class Triggers
{
    [SqlTrigger(Target="authors", Event="FOR UPDATE")]
    public static void AuthorsUpdateTrigger()
    {
        //...
    }
}

이 예제에서는 trig_onpubinsert라는 이름을 사용하여 트리거를 참조하도록 지정합니다. publishers 테이블에 새 데이터가 추가될 경우(INSERT) 트리거가 활성화됩니다.

Partial Public Class Triggers

    <SqlTrigger(Name:="trig_onpubinsert", Target:="publishers", Event:="FOR INSERT")>
    Public Shared Sub PublishersInsertTrigger()

        '...
    End Sub
End Class
public partial class Triggers
{
    [SqlTrigger(Name="trig_onpubinsert", Target="publishers", Event="FOR INSERT")]
    public static void PublishersInsertTrigger()
    {
        //...
    }
}

SqlFunction 특성

이 특성은 스칼라 값이나 테이블을 반환하는 사용자 정의 함수 개체에 적용되어야 합니다. 이 특성에는 다음과 같은 매개 변수가 있습니다.

  • Name - 선택적 요소. SQL Server에서 사용자 정의 함수를 참조할 때 사용할 이름을 지정합니다.

    참고

    테이블 값을 반환하는 함수의 경우 반환된 테이블 정의의 Transact-SQL 표현이 포함된 TableDefinition 속성 값을 지정해야 합니다.

이 예제에서는 sp_scalarFunc라는 이름을 사용하여 사용자 정의 함수를 참조하도록 지정합니다.

Partial Public Class UserDefinedFunctions

    <SqlFunction(Name:="sp_scalarFunc")> 
    Public Shared Function SampleScalarFunction(ByVal s As SqlString) As SqlString

        '...
        Return ""
    End Function
End Class
public partial class UserDefinedFunctions
{
    [SqlFunction(Name="sp_scalarFunc")]
    public static SqlString SampleScalarFunction(SqlString s)
    {
        //...
        return "";
    }
}

이 예제에서는 sp_tableFunc라는 이름을 사용하여 사용자 정의 함수를 참조하도록 지정합니다. TableDefinition 속성 값은 letter nchar(1)입니다.

Partial Public Class UserDefinedFunctions

    <SqlFunction(Name:="sp_tableFunc", TableDefinition:="letter nchar(1)")> 
    Public Shared Function SampleTableFunction(ByVal s As SqlString) As IEnumerable

        '...
        Return New Char(2) {"a"c, "b"c, "c"c}
    End Function
End Class
public partial class UserDefinedFunctions
{
    [SqlFunction(Name="sp_tableFunc", TableDefinition="letter nchar(1)")]
    public static IEnumerable SampleTableFunction(SqlString s)
    {
        //...
        return new ArrayList(new char[3] {'a', 'b', 'c'});
    }
}

SqlUserDefinedType 특성

이 특성은 사용자 정의 형식 개체에 적용되어야 합니다. 이 특성에는 네 개의 속성이: Format, MaxByteSize, IsFixedLength 및 IsByteOrdered

  • Format
    필수 요소입니다. 사용자 정의 형식의 저장소 형식입니다. 지원되는 형식은 다음과 같습니다.

    Native – SQL Server에서 디스크에 있는 효율적인 기본 표현을 사용하도록 지정합니다. 이 옵션은 가장 간단하면서 최상의 성능을 제공합니다. 이 형식에 대한 요구 사항은 다음과 같습니다.

    • StructLayout.LayoutKindSequential 특성은 형식에 적용되어야 합니다.

    • 모든 사용자 정의 형식 필드는 blittable이어야 합니다. 즉, 관리되는 메모리와 관리되지 않는 메모리에서 공통적인 표현을 사용하여 Interop 마샬러에서 특별히 처리할 필요가 없도록 해야 합니다.

    • 형식에서 MaxByteSize 값을 지정하면 안 됩니다.

    • 형식에 [NonSerialized] 필드가 있으면 안 됩니다.

    • 필드가 명시적 레이아웃으로 표시되면 안 됩니다.

    UserDefined - 사용자가 이진 형식에 대해 모든 권한을 갖도록 지정합니다. 이 형식에 대한 요구 사항은 다음과 같습니다.

    • 형식에서 IBinarySerialize를 구현해야 합니다.

    • 형식에서 MaxByteSize 값을 지정해야 합니다.

  • MaxByteSize
    필수 요소입니다. 이 형식의 인스턴스에 대한 최대 크기(바이트)입니다.

  • IsFixedLength
    선택적 요소로서, 모든 형식 인스턴스의 길이가 같은지 여부를 지정합니다. 기본값 false입니다.

  • IsByteOrdered
    선택적 요소로서, 이 형식의 이진 표현에 순서가 있는지, 즉 이 형식의 인스턴스를 비교하는 데 이진 표현을 사용할 수 있는지 여부를 지정합니다. 기본값 false입니다.

이 예제에서는 사용자 정의 형식의 Format과 MaxByteSize를 각각 SerializedDataWithMetadata와 8000바이트로 지정합니다.

<SqlUserDefinedType(Format.Native, MaxByteSize:=8000)>
Public Class SampleType

   '...
End Class
[SqlUserDefinedType(Format.Native, MaxByteSize=8000)]
public class SampleType
{
   //...
}

참고 항목

작업

방법: SQL Server 공용 언어 런타임 통합을 사용하는 데이터베이스 개체의 프로젝트 만들기

방법: 공용 언어 런타임 통합을 사용하여 SQL Server 저장 프로시저 만들기 및 실행

방법: 공용 언어 런타임 통합을 사용하여 SQL Server 트리거 만들기 및 실행

방법: 공용 언어 런타임 통합을 사용하여 SQL Server 집계 만들기 및 실행

방법: 공용 언어 런타임 통합을 사용하여 SQL Server 사용자 정의 함수 만들기 및 실행

방법: 공용 언어 런타임 통합을 사용하여 SQL Server 사용자 정의 형식 만들기 및 실행

연습: 관리 코드로 저장 프로시저 만들기

방법: SQL CLR 저장 프로시저 디버깅

개념

SQL Server CLR 통합 소개(ADO.NET)

관리 코드를 사용하여 데이터베이스 개체를 만드는 경우의 이점