Hello World 샘플은 간단한 CLR(공용 언어 런타임) 통합 기반 저장 프로시저를 만들고, 배포하고, 테스트하는 데 관련된 기본 작업을 보여 줍니다. 또한 이 샘플에서는 저장 프로시저에 의해 동적으로 생성되고 호출자에게 반환되는 레코드를 통해 데이터를 반환하는 방법을 보여 줍니다.
저장 프로시저는 HelloWorld 한 행으로 구성된 결과 집합에서 "Hello world!" 문자열을 반환합니다. 이 예제에서는 Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord 및 Microsoft.SqlServer.Server.Pipe 클래스에 대한 몇 가지 용도를 보여 줍니다.
필수 조건
이 프로젝트를 만들고 실행하려면 다음 소프트웨어를 설치해야 합니다.
SQL Server 또는 SQL Server Express. SQL Server Express 설명서 및 샘플 웹 사이트에서 SQL Server Express를 무료로 받을 수 있습니다.
SQL Server 개발자 웹 사이트에서 사용할 수 있는 AdventureWorks 데이터베이스
.NET Framework SDK 2.0 이상 또는 Microsoft Visual Studio 2005 이상. .NET Framework SDK를 무료로 얻을 수 있습니다.
또한 다음 조건을 충족해야 합니다.
사용 중인 SQL Server 인스턴스는 CLR 통합을 사용하도록 설정해야 합니다.
CLR 통합을 사용하도록 설정하려면 다음 단계를 수행합니다.
CLR 통합 활성화
- 다음 Transact-SQL 명령을 실행합니다.
sp_configure 'clr enabled', 1GORECONFIGUREGO비고
CLR을 사용하도록 설정하려면 서버 수준 권한이 있어야 합니다
ALTER SETTINGS. 이 권한은 서버 역할 및sysadmin고정 서버 역할의serveradmin멤버가 암시적으로 보유합니다.AdventureWorks 데이터베이스는 사용 중인 SQL Server 인스턴스에 설치해야 합니다.
사용 중인 SQL Server 인스턴스의 관리자가 아닌 경우 설치를 완료하려면 관리자에게 CreateAssembly 권한을 부여해야 합니다.
샘플 빌드
다음 지침을 사용하여 샘플을 만들고 실행합니다.
Visual Studio 또는 .NET Framework 명령 프롬프트를 엽니다.
필요한 경우 샘플에 대한 디렉터리를 만듭니다. 이 예제에서는 C:\MySample을 사용합니다.
c:\MySample에서 (Visual Basic 샘플용) 또는
HelloWorld.vb(C# 샘플의 경우) 만들고HelloWorld.cs적절한 Visual Basic 또는 C# 샘플 코드(아래)를 파일에 복사합니다.선택한 언어에 따라 다음 중 하나를 실행하여 명령줄 프롬프트에서 샘플 코드를 컴파일합니다.
vbc C:HelloWorld.vb /target:librarycsc /target:library HelloWorld.cs
Transact-SQL 설치 코드를 파일에 복사하고 샘플 디렉터리에 저장
Install.sql합니다.실행하여 어셈블리 및 저장 프로시저 배포
sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Transact-SQL 테스트 명령 스크립트를 파일에 복사하고 샘플 디렉터리에 저장
test.sql합니다.다음 명령을 사용하여 테스트 스크립트 실행
sqlcmd -E -I -i test.sql
Transact-SQL 정리 스크립트를 파일에 복사하고 샘플 디렉터리에 저장
cleanup.sql합니다.다음 명령을 사용하여 스크립트 실행
sqlcmd -E -I -i cleanup.sql
예제 코드
다음은 이 샘플의 코드 목록입니다.
C# (프로그래밍 언어)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld()
{
Microsoft.SqlServer.Server.SqlMetaData columnInfo
= new Microsoft.SqlServer.Server.SqlMetaData("Column1", SqlDbType.NVarChar, 12);
SqlDataRecord greetingRecord
= new SqlDataRecord(new Microsoft.SqlServer.Server.SqlMetaData[] { columnInfo });
greetingRecord.SetString(0, "Hello world!");
SqlContext.Pipe.Send(greetingRecord);
}
};
Visual Basic (비주얼 베이직 언어)
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Partial Public NotInheritable Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub HelloWorld()
Dim columnInfo As New Microsoft.SqlServer.Server.SqlMetaData("Column1", _
SqlDbType.NVarChar, 12)
Dim greetingRecord As New SqlDataRecord(New _
Microsoft.SqlServer.Server.SqlMetaData() {columnInfo})
greetingRecord.SetString(0, "Hello World!")
SqlContext.Pipe.Send(greetingRecord)
End Sub
End Class
어셈블리를 배포하고 데이터베이스에 저장 프로시저를 만드는 Transact-SQL 설치 스크립트(Install.sql)입니다.
USE AdventureWorks
GO
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')
DROP PROCEDURE usp_HelloWorld;
GO
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')
DROP ASSEMBLY HelloWorld;
GO
DECLARE @SamplesPath nvarchar(1024)
set @SamplesPath = '$(root)'
CREATE ASSEMBLY HelloWorld
FROM @SamplesPath + 'HelloWorld.dll'
WITH permission_set = Safe;
GO
CREATE PROCEDURE usp_HelloWorld
--(
-- @Greeting nvarchar(12) OUTPUT
--)
AS EXTERNAL NAME HelloWorld.[StoredProcedures].HelloWorld;
GO
저장 test.sql프로시저를 실행하여 샘플을 테스트하는 것입니다.
use AdventureWorks
go
execute usp_HelloWorld
USE AdventureWorks;
GO
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')
DROP PROCEDURE usp_HelloWorld;
GO
다음 Transact-SQL 데이터베이스에서 어셈블리 및 저장 프로시저를 제거합니다.
USE AdventureWorks
GO
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')
DROP PROCEDURE usp_HelloWorld;
GO
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')
DROP ASSEMBLY HelloWorld;
GO