문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

CLR 통합으로 작업 시작

이 항목에서는 .NET Framework CLR(공용 언어 런타임)과 Microsoft SQL Server의 통합을 사용하여 데이터베이스 개체를 컴파일하는 데 필요한 네임스페이스 및 라이브러리에 대해 간략하게 설명합니다. 또한 이 항목에서는 Microsoft Visual C#으로 작성된 간단한 CLR 저장 프로시저를 작성, 컴파일 및 실행하는 방법도 보여 줍니다.

SQL Server 2005부터는 기본적인 CLR 데이터베이스 개체를 개발하는 데 필요한 구성 요소가 SQL Server와 함께 설치됩니다. CLR 통합 기능은 .NET Framework의 일부인 system.data.dll이라는 어셈블리에서 제공되며 이 어셈블리는 GAC(전역 어셈블리 캐시)와 .NET Framework 디렉터리에 있습니다. 이 어셈블리에 대한 참조는 일반적으로 명령줄 도구와 Microsoft Visual Studio에 자동으로 추가되므로 직접 추가하지 않아도 됩니다.

system.data.dll 어셈블리에는 CLR 데이터베이스 개체를 컴파일하는 데 필요한 다음과 같은 네임스페이스가 들어 있습니다.

System.Data

System.Data.Sql

Microsoft.SqlServer.Server

System.Data.SqlTypes

아래의 Visual C# 또는 Microsoft Visual Basic 코드를 복사하여 텍스트 편집기에 붙여넣고 이름이 "helloworld.cs" 또는 "helloworld.vb"인 파일로 저장합니다.

using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;

public class HelloWorldProc
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void HelloWorld(out string text)
    {
        SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
        text = "Hello world!";
    }
}

이 간단한 프로그램에는 공용 클래스에 대한 정적 메서드 하나가 포함되어 있습니다. 이 메서드는 간단한 텍스트 메시지를 출력할 관리되는 데이터베이스 개체를 만들기 위해 SqlContextSqlPipe라는 새로운 클래스 두 개를 사용합니다. 또한 이 메서드는 "Hello world!"라는 문자열을 out 매개 변수 값으로 할당합니다. 이 메서드는 SQL Server에서 저장 프로시저로 선언한 다음 Transact-SQL 저장 프로시저와 같은 방식으로 실행할 수 있습니다.

이제 이 프로그램을 라이브러리로 컴파일하고 SQL Server에 로드한 다음 저장 프로시저로 실행해 봅니다.

SQL Server에서는 Microsoft .NET Framework 재배포 가능 파일을 기본적으로 설치합니다. 이러한 파일에는 csc.exe와 vbc.exe, 그리고 Visual C# 및 Visual Basic 프로그램용 명령줄 컴파일러가 포함됩니다. 예제를 컴파일하려면 csc.exe 또는 vbc.exe가 포함된 디렉터리를 가리키도록 경로 변수를 수정해야 합니다. .NET Framework의 기본 설치 경로는 다음과 같습니다.

C:\Windows\Microsoft.NET\Framework\(version)

version에는 설치된 .NET Framework 재배포 가능 패키지의 버전 번호가 포함됩니다. 예를 들면 다음과 같습니다.

C:\Windows\Microsoft.NET\Framework\v2.0.31113

경로에 .NET Framework 디렉터리를 추가한 후에는 다음 명령을 사용하여 예제 저장 프로시저를 어셈블리로 컴파일할 수 있습니다. /target 옵션을 사용하면 저장 프로시저를 어셈블리로 컴파일할 수 있습니다.

Visual C# 원본 파일의 경우 다음 명령을 실행합니다.

csc /target:library helloworld.cs 

Visual Basic 원본 파일의 경우 다음 명령을 실행합니다.

vbc /target:library helloworld.vb

이러한 명령은 라이브러리 DLL을 빌드하도록 지정하는 /target 옵션을 사용하여 Visual C# 또는 Visual Basic 컴파일러를 시작합니다.

예제 프로시저가 성공적으로 컴파일되면 SQL Server에서 테스트해 볼 수 있습니다. 컴파일된 예제 프로시저를 테스트하려면 SQL Server Management Studio를 열고 새 쿼리를 만들어 적절한 테스트 데이터베이스(예: AdventureWorks 예제 데이터베이스)에 연결합니다.

SQL Server에서는 CLR(공용 언어 런타임) 코드를 실행하는 기능이 기본적으로 OFF로 설정되어 있습니다. sp_configure 시스템 저장 프로시저를 사용하여 CLR 코드가 실행되도록 설정할 수 있습니다. 자세한 내용은 CLR 통합 사용을 참조하십시오.

저장 프로시저에 액세스할 수 있게 어셈블리를 만들어야 합니다. 이 예에서는 C:\ 디렉터리에 helloworld.dll 어셈블리를 만들었다고 가정합니다. 쿼리에 다음의 Transact-SQL 문을 추가합니다.

CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE

어셈블리가 만들어지면 CREATE PROCEDURE 문을 사용하여 HelloWorld 메서드에 액세스할 수 있습니다. 여기서 저장 프로시저 이름은 "hello"입니다.

CREATE PROCEDURE hello
@i nchar(25) OUTPUT
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
-- if the HelloWorldProc class is inside a namespace (called MyNS),
-- the last line in the create procedure statement would be
-- EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld

프로시저가 만들어지면 Transact-SQL로 작성된 일반적인 저장 프로시저와 마찬가지로 프로시저를 실행할 수 있습니다. 다음 명령을 실행하십시오.

DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J

그러면 SQL Server Management Studio 메시지 창에 다음과 같은 메시지가 출력됩니다.

Hello world!
Hello world!

예제 저장 프로시저 실행이 완료되면 프로시저와 어셈블리를 테스트 데이터베이스에서 제거할 수 있습니다.

먼저 drop procedure 명령을 사용하여 프로시저를 제거합니다.

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
   drop procedure hello

프로시저가 삭제되면 예제 코드가 포함된 어셈블리를 제거할 수 있습니다.

IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')
   drop assembly helloworld

커뮤니티 추가 항목

추가
표시: