저장 프로시저 실행

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

두 가지 방법으로 저장 프로시저를 실행할 수 있습니다. 가장 일반적인 첫 번째 방법은 응용 프로그램 또는 사용자가 프로시저를 호출하는 것입니다. 두 번째 방법은 SQL Server 인스턴스가 시작될 때 자동 실행되도록 프로시저를 설정하는 것입니다. 응용 프로그램이나 사용자가 프로시저를 호출할 때 Transact-SQL EXECUTE 또는 EXEC 키워드가 호출에서 명시적으로 지정됩니다. 또는 프로시저가 Transact-SQL 일괄 처리의 첫 번째 문이면 키워드를 사용하지 않고 프로시저를 호출하고 실행할 수 있습니다.

항목 내용

  • 시작하기 전에:

    제한 사항

    권장 사항

    보안

  • 저장 프로시저를 실행하려면:

    SQL Server Management Studio

    Transact-SQL

시작하기 전에

제한 사항

  • 시스템 프로시저 이름을 일치시킬 때 호출 데이터베이스 데이터 정렬이 사용됩니다. 따라서 프로시저 호출에서 대/소문자를 구분하여 시스템 프로시저 이름을 항상 정확하게 지정해야 합니다. 예를 들어 다음 코드는 대/소문자를 구분하는 데이터 정렬을 사용하는 데이터베이스 컨텍스트에서 실행할 경우 실패합니다.

    EXEC SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help
    

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

  • 사용자 정의 프로시저의 이름이 시스템 프로시저의 이름과 같으면 사용자 정의 프로시저가 실행되지 않을 수도 있습니다.

권장 사항

  • 시스템 저장 프로시저 실행

    시스템 프로시저는 접두사 **sp_**로 시작합니다. 시스템 프로시저는 모든 사용자 정의 데이터베이스와 시스템 정의 데이터베이스에 논리적으로 나타나기 때문에 프로시저 이름을 완전히 한정하지 않고도 모든 데이터베이스에서 시스템 프로시저를 실행할 수 있습니다. 그러나 이름 충돌이 발생하지 않도록 sys 스키마 이름으로 모든 시스템 프로시저 이름을 스키마로 한정하는 것이 좋습니다. 다음 예에서는 권장되는 시스템 프로시저 호출 방법을 보여 줍니다.

    EXEC sys.sp_who;
    
  • 사용자 정의 저장 프로시저 실행

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

    다음 예에서는 권장되는 사용자 정의 프로시저 실행 방법을 보여 줍니다. 프로시저는 하나의 입력 매개 변수를 받아들입니다. 입력 및 출력 매개 변수를 지정하는 방법은 매개 변수 지정을 참조하십시오.

    USE AdventureWorks2012;
    GO
    EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;
    

    또는

    EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50;
    GO
    

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

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

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

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

  • 저장 프로시저 자동 실행

    자동 실행되도록 표시된 프로시저는 SQL Server가 시작될 때마다 실행되며 master 데이터베이스는 이 시작 프로세스 중에 복구됩니다. 자동 실행되도록 프로시저를 설정하면 데이터베이스 유지 관리 작업을 수행하거나 프로시저가 백그라운드 프로세스로 계속 실행되도록 하는 데 유용할 수 있습니다. 또는 프로시저가 전역 임시 테이블을 만드는 작업처럼 tempdb에서 시스템 또는 유지 관리 태스크를 수행하도록 하는 것이 자동 실행을 사용하는 또 다른 방법입니다. 이렇게 하면 SQL Server 시작 중에 tempdb가 다시 만들어질 때 이러한 임시 테이블이 항상 존재합니다.

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

    시작 프로시저의 개수에는 제한이 없지만 각 시작 프로시저는 실행하는 동안 하나의 작업자 스레드를 소비합니다. 따라서 시작할 때 여러 프로시저를 실행해야 하지만 동시에 실행할 필요가 없다면 한 프로시저만 시작 프로시저로 지정하고 그 프로시저에서 다른 프로시저를 호출하도록 만듭니다. 이렇게 하면 하나의 작업자 스레드만 사용됩니다.

    팁

    자동 실행되는 프로시저의 결과 집합은 반환하지 마십시오. 프로시저는 응용 프로그램이나 사용자가 아닌 SQL Server에 의해 실행되므로 결과 집합을 반환할 대상이 없습니다.

  • 자동 실행 설정, 해제 및 제어

    시스템 관리자(SA)만 프로시저가 자동 실행되도록 표시할 수 있습니다. 또한 프로시저는 master 데이터베이스에 있고 sa에 의해 소유되어야 하며 입력 또는 출력 매개 변수를 가질 수 없습니다.

    sp_procoption을 사용하여 다음을 수행할 수 있습니다.

    1. 기존 프로시저를 시작 프로시저로 지정합니다.

    2. SQL Server를 시작할 때 프로시저가 실행되지 않도록 합니다.

보안

자세한 내용은 EXECUTE AS(Transact-SQL)EXECUTE AS 절(Transact-SQL)을 참조하십시오.

사용 권한

자세한 내용은 EXECUTE(Transact-SQL)의 "사용 권한" 섹션을 참조하십시오.

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[맨 위]

SQL Server Management Studio 사용

저장 프로시저를 실행하려면

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진의 인스턴스에 연결하고 해당 인스턴스를 확장한 다음 데이터베이스를 확장합니다.

  2. 원하는 데이터베이스를 확장하고 프로그래밍 기능을 확장한 다음 저장 프로시저를 확장합니다.

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

  4. 프로시저 실행 대화 상자에서 각 매개 변수의 값과 null 값을 전달해야 하는지 여부를 지정합니다.

    • 매개 변수
      매개 변수의 이름을 나타냅니다.

    • 데이터 형식
      매개 변수의 데이터 형식을 나타냅니다.

    • 출력 매개 변수
      매개 변수가 출력 매개 변수인지 여부를 나타냅니다.

    • Null 값 전달
      매개 변수의 값으로 NULL 값을 전달합니다.


    • 프로시저를 호출할 때 매개 변수의 값을 입력합니다.

  5. 저장 프로시저를 실행하려면 확인을 클릭합니다.

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[맨 위]

Transact-SQL 사용

저장 프로시저를 실행하려면

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

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

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다. 이 예에서는 하나의 매개 변수를 예상하는 저장 프로시저를 실행하는 방법을 보여 줍니다. 또한 @EmployeeID 매개 변수로 지정된 값인 6을 사용하여 uspGetEmployeeManagers 저장 프로시저를 실행합니다.

USE AdventureWorks2012;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO

자동 실행되도록 프로시저를 설정하거나 해제하려면

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

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

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다. 이 예에서는 sp_procoption을 사용하여 자동 실행되도록 프로시저를 설정하는 방법을 보여 줍니다.

USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>' 
    , @OptionName = ] 'startup' 
    , @OptionValue = 'on';

프로시저가 자동 실행되는 것을 중지하려면

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

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

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다. 이 예에서는 sp_procoption을 사용하여 프로시저가 자동 실행되는 것을 중지하는 방법을 보여 줍니다.

USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>' 
    , @OptionValue = 'off';

예(Transact-SQL)

맨 위로 이동 링크와 함께 사용되는 화살표 아이콘[맨 위]

참고 항목

참조

EXECUTE(Transact-SQL)

CREATE PROCEDURE(Transact-SQL)

개념

매개 변수 지정

scan for startup procs 서버 구성 옵션 구성

저장 프로시저(데이터베이스 엔진)