저장 프로시저 실행

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

이 문서에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 저장 프로시저를 실행하는 방법을 설명합니다.

저장 프로시저를 실행하는 여러 가지 방법이 있습니다. 가장 일반적인 첫 번째 방법은 애플리케이션 또는 사용자가 프로시저를 호출하는 것입니다. 또 다른 방법은 SQL Server 인스턴스가 시작될 때 저장 프로시저를 자동으로 실행하도록 설정하는 것입니다.

애플리케이션이나 사용자가 프로시저를 호출할 때 Transact-SQL EXECUTE 또는 EXEC 키워드가 호출에서 명시적으로 지정됩니다. 프로시저가 Transact-SQL 일괄 처리의 첫 번째 문이면 EXEC 키워드 없이 프로시저를 호출하고 실행할 수 있습니다.

제한 사항

시스템 프로시저 이름을 일치시킬 때 호출 데이터베이스 데이터 정렬이 사용됩니다. 이러한 이유로, 프로시저 호출에서 대/소문자를 구분하여 시스템 프로시저 이름을 항상 정확하게 지정해야 합니다. 예를 들어 대/소문자를 구분하는 데이터 정렬이 있는 데이터베이스의 컨텍스트에서 실행되면 이 코드가 실패합니다.

EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help  

정확한 시스템 프로시저 이름을 표시하려면 sys.system_objectssys.system_parameters 카탈로그 뷰를 쿼리합니다.

사용자 정의 프로시저의 이름이 시스템 프로시저와 동일한 경우 사용자 정의 프로시저가 실행되지 않을 수 있습니다.

권장 사항

저장 프로시저를 실행하려면 다음 권장 사항을 사용합니다.

시스템 저장 프로시저

시스템 프로시저는 접두사 sp_로 시작합니다. 모든 사용자 및 시스템 정의 데이터베이스에 논리적으로 표시되므로 프로시저 이름을 정규화하지 않고도 모든 데이터베이스에서 시스템 프로시저를 실행할 수 있습니다. 그러나 이름 충돌을 방지하기 위해 sys 스키마 이름을 사용하여 모든 시스템 프로시저 이름을 스키마로 한정하는 것이 좋습니다. 다음 예제에서는 시스템 프로시저를 호출하는 데 권장되는 메서드를 보여줍니다.

EXEC sys.sp_who;  

사용자 정의 저장 프로시저

사용자 정의 프로시저를 실행하는 경우 프로시저 이름을 스키마 이름으로 한정하는 것이 가장 좋습니다. 이렇게 하면 데이터베이스 엔진에서 여러 스키마를 검색할 필요가 없으므로 성능이 약간 향상됩니다. 또한 스키마 이름을 사용하면 여러 스키마에서 동일한 이름의 프로시저가 데이터베이스에 있는 경우 잘못된 프로시저가 실행되지 않습니다.

다음 예제에서는 사용자 정의 프로시저를 실행하는 데 권장되는 메서드를 보여줍니다. 이 프로시저는 두 가지 입력 매개 변수를 허용합니다. 입력 및 출력 매개 변수를 지정하는 방법에 대한 자세한 내용은 저장 프로시저에서 매개 변수 지정을 참조하세요.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

또는

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO  

한정되지 않은 사용자 정의 프로시저가 지정되면 데이터베이스 엔진에서 다음 순서로 프로시저를 검색합니다.

  1. 현재 데이터베이스의 sys 스키마.

  2. 호출자의 기본 스키마(프로시저가 일괄 처리 또는 동적 SQL에서 실행되는 경우). 한정되지 않은 프로시저 이름이 다른 프로시저 정의의 본문 내에 나타나면 이 다른 프로시저를 포함하는 스키마가 다음으로 검색됩니다.

  3. 현재 데이터베이스의 dbo 스키마

보안

보안 정보는 EXECUTE AS(Transact-SQL)EXECUTE AS 절(Transact-SQL)을 참조하세요.

사용 권한

권한 정보는 EXECUTE(Transact-SQL)사용 권한을 참조하세요.

저장 프로시저 실행

저장 프로시저는 SSMS(SQL Server Management Studio) 쿼리 창에서 SSMS 사용자 인터페이스 또는 TransAct-SQL을 사용하여 실행할 수 있습니다. 항상 최신 버전의 SSMS 사용하세요.

SQL Server Management Studio 사용

  1. 개체 탐색기에서 SQL Server 또는 Azure SQL Database 인스턴스에 연결하고, 해당 인스턴스, 데이터베이스를 차례로 확장합니다.

  2. 원하는 데이터베이스, 프로그래밍, 저장 프로시저를 차례로 확장합니다.

  3. 마우스 오른쪽 단추로 실행하려는 사용자 정의 저장 프로시저를 클릭하고, 저장 프로시저 실행을 선택합니다.

  4. 프로시저 실행 대화 상자에서 매개 변수는 각 매개 변수의 이름을 나타내고, 데이터 형식은 해당 데이터 형식을 나타내고, 출력 매개 변수는 출력 매개 변수인지 여부를 나타냅니다.

    각 매개 변수에 대해 다음을 수행합니다.

    • 아래에서 매개 변수에 사용할 값을 입력합니다.
    • Null 값 전달 아래에서 NULL을 전달할지 여부를 매개 변수의 값으로 선택합니다.
  5. 확인을 선택하여 저장 프로시저를 실행합니다. 저장 프로시저에 매개 변수가 없으면 확인을 선택합니다.

    저장 프로시저가 실행되고 결과 창에 결과가 표시됩니다.

    예를 들어 저장 프로시저 만들기 문서의 SalesLT.uspGetCustomerCompany 저장 프로시저를 실행하려면 @LastName 매개 변수에 대해 Cannon을 입력하고, @FirstName 매개 변수에 대해 Chris를 입력하고, 확인을 선택합니다. 프로시저에서 FirstNameChris, LastNameCannonCompanyName야외 스포츠 용품을 반환합니다.

쿼리 창에서 Transact-SQL 사용

  1. 개체 탐색기에서 SQL Server 또는 Azure SQL 데이터베이스의 인스턴스에 연결합니다.

  2. 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 구문이 포함된 EXECUTE 문을 쿼리 창에 입력하여 필요한 모든 매개 변수에 대한 값을 제공합니다.

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    예를 들어 다음 Transact-SQL 문은 Cannon 매개 변수 값이 @LastName이고 Chris 매개 변수 값이 @FirstNameuspGetCustomerCompany 저장 프로시저를 실행합니다.

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. 도구 모음에서 실행을 선택합니다. 저장 프로시저가 실행됩니다.

매개 변수 값에 대한 옵션

매개 변수 및 값을 저장 프로시저 EXECUTE 문에 제공하는 여러 가지 방법이 있습니다. 다음 예제에서는 EXECUTE 문에 대한 몇 가지 다른 옵션을 보여줍니다.

  • 매개 변수 값을 저장 프로시저에 정의된 것과 동일한 순서로 제공하는 경우 매개 변수 이름을 명시할 필요가 없습니다. 예시:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • 매개 변수 이름을 @parameter_name=value패턴으로 제공하는 경우 매개 변수 이름과 값을 정의된 것과 동일한 순서로 지정할 필요가 없습니다. 다음 문 중 하나가 유효합니다.

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    또는

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • @parameter_name=value 형식을 매개 변수에 사용하는 경우 해당 문의 모든 후속 매개 변수에도 사용해야 합니다. 예를 들어 EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';은 사용할 수 없습니다.

시작 시 자동 실행

적용 대상: SQL Server

SQL Server에서 sysadmin 서버 역할의 멤버는 sp_procoption을 사용하여 시작할 때 자동으로 실행할 프로시저를 설정하거나 지울 수 있습니다. 시작 프로시저는 반드시 master 데이터베이스에 있어야 하며, sa에서 소유해야 하며, 입력 또는 출력 매개 변수를 가질 수 없습니다. 자세한 내용은 sp_procoption(Transact-SQL)을 참조하세요.

시작 시 자동 실행으로 표시된 프로시저는 SQL Server가 시작될 때마다 실행되며, 이 시작 프로세스 중에 master 데이터베이스가 복구됩니다. 프로시저를 시작 시 자동 실행으로 설정하면 데이터베이스 유지 관리 작업을 수행하거나 프로시저를 백그라운드 프로세스로 지속적으로 실행하는 데 유용할 수 있습니다.

또는 프로시저가 전역 임시 테이블을 만드는 작업처럼 tempdb에서 시스템 또는 유지 관리 작업을 수행하도록 하는 것이 자동 실행을 사용하는 또 다른 방법입니다. 자동 실행은 SQL Server 시작 중에 tempdb가 다시 만들어질 때 이러한 임시 테이블이 항상 있도록 합니다.

자동으로 실행되는 프로시저는 sysadmin 고정 서버 역할의 멤버와 동일한 권한으로 작동합니다. 프로시저에서 생성되는 오류 메시지는 SQL Server 오류 로그에 기록됩니다.

시작 프로시저의 수는 제한되지 않지만 각 시작 프로시저는 실행하는 동안 하나의 작업자 스레드를 사용합니다. 시작 시 여러 프로시저를 실행해야 하지만 병렬로 실행할 필요가 없는 경우 한 프로시저를 시작 프로시저로 지정하고 해당 프로시저에서 다른 프로시저를 호출하도록 합니다. 이 방법은 하나의 작업자 스레드만 사용합니다.

자동으로 실행되는 프로시저에서 결과 집합을 반환하지 마세요. 프로시저가 애플리케이션 또는 사용자 대신 SQL Server에서 실행되므로 결과 집합이 이동할 곳이 없습니다.

참고

Azure SQL Database는 master 데이터베이스에 대한 종속성에서 기능을 격리하도록 설계되었습니다. 따라서 서버 수준 옵션을 구성하는 Transact-SQL 문은 Azure SQL에서 사용할 수 없습니다. 탄력적 작업(미리 보기) 또는 Azure Automation과 같은 다른 Azure 서비스에서 적절한 대안을 찾을 수 있는 경우가 많습니다.

시작 시 자동으로 실행되도록 프로시저 설정

시스템 관리자(sa)만 프로시저가 자동으로 실행되도록 표시할 수 있습니다.

  1. SSMS에서 데이터베이스 엔진에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 sp_procoption 명령을 입력하여 SQL Server 시작 시 자동으로 실행되도록 저장 프로시저를 설정합니다.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. 도구 모음에서 실행을 선택합니다.

시작 시 프로시저가 자동으로 실행되지 않도록 중지

sysadmin은 sp_procoption을 사용하여 SQL Server 시작 시 프로시저가 자동으로 실행되지 않도록 중지할 수 있습니다.

  1. SSMS에서 데이터베이스 엔진에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 명령을 쿼리 창에 입력합니다.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. 도구 모음에서 실행을 선택합니다.