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

SQL CLR(공용 언어 런타임) 데이터베이스 프로젝트에 저장 프로시저 항목을 추가하여 SQL 저장 프로시저를 만듭니다. SQL Server를 실행하는 컴퓨터에 배포한 후에는 관리 코드로 만든 저장 프로시저를 다른 저장 프로시저처럼 호출하고 실행할 수 있습니다.

참고

표시되는 대화 상자와 메뉴 명령은 실제 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 설정에 대한 작업을 참조하십시오.

SQL Server 저장 프로시저 만들기

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

  1. 기존의 SQL CLR 데이터베이스 프로젝트를 열거나 새 프로젝트를 만듭니다. 자세한 내용은 방법: SQL Server 공용 언어 런타임 통합을 사용하는 데이터베이스 개체의 프로젝트 만들기을 참조하십시오.

  2. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

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

  4. 새 저장 프로시저의 이름을 입력합니다.

  5. 저장 프로시저가 실행될 때 실행할 코드를 추가합니다. 이 절차 다음에 나오는 첫 번째 예제를 참조하십시오.

  6. 솔루션 탐색기에서 TestScripts 폴더를 열고 Test.sql 파일을 두 번 클릭합니다.

    참고

    다른 스크립트를 기본 디버그 스크립트로 지정할 수 있습니다. 자세한 내용은 방법: Test.sql 스크립트를 편집하여 SQL Server 공용 언어 런타임 통합을 사용하는 개체 실행을 참조하십시오.

  7. Test.sql 파일에 저장 프로시저를 실행하는 코드를 추가합니다. 이 절차 다음에 나오는 두 번째 예제를 참조하십시오.

  8. F5 키를 눌러 저장 프로시저를 빌드, 배포 및 디버깅합니다. 디버깅하지 않고 배포하는 방법에 대한 자세한 내용은 방법: SQL Server에 SQL CLR 데이터베이스 프로젝트 항목 배포를 참조하십시오.

    중요

    SQL Server 2005 및 SQL Server 2008에서는 .NET Framework 2.0, 3.0 또는 3.5 버전으로 빌드된 SQL Server 프로젝트만 지원합니다. 배포 하려고 하는 경우는 SQL Server 프로젝트를 SQL Server 2005 또는 SQL Server 2008, 오류 메시지가 나타납니다: Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database(어디 AssemblyName 배포 하는 어셈블리의 이름입니다). 자세한 내용은 방법: SQL Server 공용 언어 런타임 통합을 사용하는 데이터베이스 개체의 프로젝트 만들기을 참조하십시오.

  9. 보기에서 결과 출력 창 선택 및 쇼에서 출력: 출력 데이터베이스.

예제

다음 코드 예제에서는 Adventure Works 샘플 데이터베이스의 Currency 테이블에 레코드를 삽입하는 저장 프로시저를 만듭니다. 저장 프로시저를 만든 후에는 SQL Server에 배포합니다. 자세한 내용은 방법: SQL Server에 SQL CLR 데이터베이스 프로젝트 항목 배포을 참조하십시오.

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();
        }
    }
}

프로젝트의 TestScripts 폴더에 있는 Test.sql 파일에 저장 프로시저를 실행 및 테스트하는 코드를 추가합니다. 예를 들어, 저장 프로시저를 배포한 경우 EXEC <StoredProcedureName>을 호출하고 필요한 매개 변수를 전달하여 저장 프로시저를 실행합니다. 저장 프로시저가 값을 반환하지 않으면 저장 프로시저가 데이터에 적용되었는지 확인하는 코드를 추가로 삽입합니다.

참고

Visual C#을 사용하여 샘플을 만든 경우 다음 샘플에서 저장 프로시저 이름 대신에 InsertCurrency_CS를 사용합니다.

EXEC InsertCurrency 'AAA', 'Currency Test'
SELECT * from Sales.Currency where CurrencyCode = 'AAA'

참고 항목

작업

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

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

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

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

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

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

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

참조

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

개념

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

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

SQLCLR 개체를 참조하는 데이터베이스의 팀 개발 시작

관리 코드로 SQL Server 개체 만들기

기타 리소스

SQL CLR Database Debugging