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

업데이트: 2007년 11월

이제 SQL Server 2005 데이터베이스용 저장 프로시저를 Visual Basic, C# 및 C++ 등의 .NET Framework 언어를 사용하는 관리 코드로 작성할 수 있습니다. 관리 코드로 작성된 저장 프로시저는 CLR 저장 프로시저라고 합니다.

SQL Server 프로젝트에 저장 프로시저 항목을 추가하여 SQL 저장 프로시저를 만들 수 있습니다. SQL Server에 배포한 후에는 관리 코드로 만든 저장 프로시저를 다른 저장 프로시저처럼 호출하고 실행할 수 있습니다.

이 연습에서 수행할 작업은 다음과 같습니다.

  • 새 Windows 응용 프로그램 프로젝트 만들기

  • 관리 코드로 저장 프로시저 만들기

  • SQL Server 2005 데이터베이스에 저장 프로시저 배포

  • 데이터베이스에서 저장 프로시저를 테스트하는 스크립트 만들기

  • 데이터베이스에서 데이터를 쿼리하여 저장 프로시저가 올바르게 실행되었는지 확인

사전 요구 사항

이 연습을 완료하려면 다음과 같은 요건을 갖추어야 합니다.

프로젝트 만들기

새 SQL Server 프로젝트를 만들려면

  1. 파일 메뉴에서 새 프로젝트를 만듭니다.

  2. SQL Server 프로젝트를 선택하고 프로젝트의 이름을 SQLCLRStoredProcedure로 지정한 후 확인을 클릭합니다. 자세한 내용은 방법: SQL Server 프로젝트 만들기를 참조하십시오.

SQL Server 2005 데이터베이스에 연결

이 연습을 수행하려면 SQL Server 2005에서 실행 중인 AdventureWorks 샘플 데이터베이스에 연결되어 있어야 합니다. 서버 탐색기에서 AdventureWorks 샘플 데이터베이스에 연결할 수 있으면 데이터베이스 참조 추가 대화 상자에 이러한 연결이 나열됩니다.

참고:

기본적으로 CLR(공용 언어 런타임) 통합 기능은 Microsoft SQL Server에서 해제됩니다. SQL Server 프로젝트 항목을 사용하려면 이를 설정해야 합니다. CLR 통합 기능을 사용하도록 설정하려면 sp_configure 저장 프로시저의 clr enabled 옵션을 사용합니다. 자세한 내용은 CLR 통합 설정을 참조하십시오.

AdventureWorks 샘플 데이터베이스에 연결하려면

  • 연결 추가 대화 상자를 완료하여 SQL Server 2005에 포함된 AdventureWorks 샘플 데이터베이스에 연결합니다. 자세한 내용은 연결 추가/수정(Microsoft SQL Server)을 참조하십시오.

    - 또는 -

  • 데이터베이스 참조 추가 대화 상자에서 AdventureWorks 샘플 데이터베이스에 대한 기존 연결을 선택합니다. 자세한 내용은 데이터베이스 참조 추가 대화 상자를 참조하십시오.

SQL Server 저장 프로시저 만들기

SQL Server 프로젝트를 만든 후 저장 프로시저를 추가합니다.

SQL Server 저장 프로시저를 만들려면

  1. 프로젝트 메뉴에서 새 항목 추가를 클릭합니다.

  2. 새 항목 추가 대화 상자에서 저장 프로시저를 선택합니다.

  3. 새 저장 프로시저의 이름으로 InsertCurrency를 입력합니다.

  4. 추가를 클릭합니다.

  5. 코드 편집기에서 코드를 다음과 같이 바꿉니다.

    참고:

    C++ 예제는 /clr:safe 컴파일러 옵션을 사용하여 컴파일해야 합니다.

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.SqlTypes
    Imports Microsoft.SqlServer.Server
    
    Partial Public Class StoredProcedures
    
        <SqlProcedure()> _
        Public Shared Sub InsertCurrency( _
            ByVal currencyCode As SqlString, ByVal name As SqlString)
    
            Using conn As New SqlConnection("context connection=true")
    
                Dim InsertCurrencyCommand As New SqlCommand()
                Dim currencyCodeParam As New SqlParameter("@CurrencyCode", SqlDbType.NVarChar)
                Dim nameParam As New SqlParameter("@Name", SqlDbType.NVarChar)
    
                currencyCodeParam.Value = currencyCode
                nameParam.Value = name
    
    
                InsertCurrencyCommand.Parameters.Add(currencyCodeParam)
                InsertCurrencyCommand.Parameters.Add(nameParam)
    
                InsertCurrencyCommand.CommandText = _
                    "INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" & _
                    " VALUES(@CurrencyCode, @Name, GetDate())"
    
                InsertCurrencyCommand.Connection = conn
    
                conn.Open()
                InsertCurrencyCommand.ExecuteNonQuery()
                conn.Close()
            End Using
        End Sub
    End Class
    
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;
    
    
    public partial class StoredProcedures
    {
        [SqlProcedure()]
        public static void InsertCurrency_CS(
            SqlString currencyCode, SqlString name)
        {
            using (SqlConnection conn = new SqlConnection("context connection=true"))
            {
                SqlCommand InsertCurrencyCommand = new SqlCommand();
                SqlParameter currencyCodeParam = new SqlParameter("@CurrencyCode", SqlDbType.NVarChar);
                SqlParameter nameParam = new SqlParameter("@Name", SqlDbType.NVarChar);
    
                currencyCodeParam.Value = currencyCode;
                nameParam.Value = name;
    
                InsertCurrencyCommand.Parameters.Add(currencyCodeParam);
                InsertCurrencyCommand.Parameters.Add(nameParam);
    
                InsertCurrencyCommand.CommandText =
                    "INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" +
                    " VALUES(@CurrencyCode, @Name, GetDate())";
    
                InsertCurrencyCommand.Connection = conn;
    
                conn.Open();
                InsertCurrencyCommand.ExecuteNonQuery();
                conn.Close();
            }
        }
    }
    
    #include "stdafx.h"
    
    #using <System.dll>
    #using <System.Data.dll>
    #using <System.Xml.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::Sql;
    using namespace System::Data::SqlClient;
    using namespace System::Data::SqlTypes;
    using namespace Microsoft::SqlServer::Server;
    
    // In order to debug your Stored Procedure, add the following to your debug.sql file:
    //
    // EXEC InsertCurrency_CPP 'AAA', 'Currency Test'
    // SELECT * FROM Sales.Currency WHERE CurrencyCode = 'AAA'
    
    public ref class StoredProcedures
    {
    public:
        [SqlProcedure]
        static void InsertCurrency_CPP(SqlString currencyCode, SqlString name)
        {
            SqlConnection ^conn = gcnew SqlConnection("context connection=true");
    
            SqlCommand ^insertCurrencyCommand = gcnew SqlCommand();
            SqlParameter ^currencyCodeParam =
                gcnew SqlParameter("@CurrencyCode", SqlDbType::NVarChar);
            SqlParameter ^nameParam =
                gcnew SqlParameter("@Name", SqlDbType::NVarChar);
    
            insertCurrencyCommand->CommandText =
                "insert Sales.Currency(CurrencyCode, Name, ModifiedDate)" +
                " values(@CurrencyCode, @Name)";
            insertCurrencyCommand->Connection = conn;
    
            conn->Open();
            insertCurrencyCommand->ExecuteNonQuery();
    
            conn->Close();
        }
    };
    

저장 프로시저 배포, 실행 및 디버깅

새 저장 프로시저를 만든 후에는 F5 키를 눌러 빌드, SQL Server에 배포 및 디버깅을 수행할 수 있습니다. 먼저 프로젝트의 TestScripts 폴더에 있는 Test.sql 파일에 저장 프로시저를 실행하고 테스트하는 코드를 추가합니다. Visual C++에서 이 파일의 이름은 debug.sql입니다. 테스트 스크립트를 만드는 방법에 대한 자세한 내용은 방법: SQL 개체를 실행하도록 Test.sql 스크립트 편집을 참조하십시오.

SQL 디버깅에 대한 자세한 내용은 SQL 데이터베이스 개체 디버깅을 참조하십시오.

InsertCurrency 저장 프로시저를 배포하고 실행하려면

  1. Visual Basic 및 Visual C#의 경우 솔루션 탐색기에서 TestScripts 폴더를 확장하고 Test.sql 파일을 두 번 클릭합니다.

    Visual C++의 경우 솔루션 탐색기에서 debug.sql 파일을 두 번 클릭합니다.

  2. Test.sql(Visual C++의 경우 debug.sql) 파일의 코드를 다음 코드로 바꿉니다.

    EXEC InsertCurrency 'AAA', 'Currency Test'
    SELECT * from Sales.Currency where CurrencyCode = 'AAA'
    
  3. F5 키를 눌러 저장 프로시저를 빌드, 배포 및 디버깅합니다. 디버깅하지 않고 배포하는 방법에 대한 자세한 내용은 방법: SQL Server에 SQL Server 프로젝트 항목 배포를 참조하십시오.

    출력 창에 표시된 결과를 보고 다음에서 출력 보기: 데이터베이스 출력을 선택합니다.

참고 항목

작업

방법: CLR SQL Server 저장 프로시저 만들기 및 실행

방법: CLR SQL Server 트리거 만들기 및 실행

방법: CLR SQL Server 집계 만들기 및 실행

방법: CLR SQL Server 사용자 정의 함수 만들기 및 실행

방법: CLR SQL Server 사용자 정의 형식 만들기 및 실행

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

개념

SQL Server CLR 통합 소개

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

SQL Server 프로젝트에 대한 항목 템플릿

참조

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

기타 리소스

SQL CLR 데이터베이스 디버깅