저장 프로시저 실행Execute a Stored Procedure

이전 버전의 SQL Server와 관련 된 콘텐츠를 참조 하십시오. 저장 프로시저를 실행할합니다.For content related to previous versions of SQL Server, see Execute a Stored Procedure.

이 항목에서는 SQL Server 2017SQL Server 2017 에서 SQL Server Management StudioSQL Server Management Studio 또는 Transact-SQLTransact-SQL을 사용하여 저장 프로시저를 실행하는 방법에 대해 설명합니다.This topic describes how to execute a stored procedure in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

두 가지 방법으로 저장 프로시저를 실행할 수 있습니다.There are two different ways to execute a stored procedure. 가장 일반적인 첫 번째 방법은 응용 프로그램 또는 사용자가 프로시저를 호출하는 것입니다.The first and most common approach is for an application or user to call the procedure. 두 번째 방법은 SQL ServerSQL Server 인스턴스가 시작될 때 자동 실행되도록 프로시저를 설정하는 것입니다.The second approach is to set the procedure to run automatically when an instance of SQL ServerSQL Server starts. 응용 프로그램이나 사용자가 프로시저를 호출할 때 Transact-SQLTransact-SQL EXECUTE 또는 EXEC 키워드가 호출에서 명시적으로 지정됩니다.When a procedure is called by an application or user, the Transact-SQLTransact-SQL EXECUTE or EXEC keyword is explicitly stated in the call. 또는 프로시저가 Transact-SQLTransact-SQL 일괄 처리의 첫 번째 문이면 키워드를 사용하지 않고 프로시저를 호출하고 실행할 수 있습니다.Alternatively, the procedure can be called and executed without the keyword if the procedure is the first statement in the Transact-SQLTransact-SQL batch.

항목 내용In This Topic

시작하기 전 주의 사항 Before You Begin

제한 사항 Limitations and Restrictions

  • 시스템 프로시저 이름을 일치시킬 때 호출 데이터베이스 데이터 정렬이 사용됩니다.The calling database collation is used when matching system procedure names. 따라서 프로시저 호출에서 대/소문자를 구분하여 시스템 프로시저 이름을 항상 정확하게 지정해야 합니다.Therefore, always use the exact case of system procedure names in procedure calls. 예를 들어 다음 코드는 대/소문자를 구분하는 데이터 정렬을 사용하는 데이터베이스 컨텍스트에서 실행할 경우 실패합니다.For example, this code will fail if it is executed in the context of a database that has a case-sensitive collation:

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

    정확한 시스템 프로시저 이름을 표시하려면 sys.system_objectssys.system_parameters 카탈로그 뷰를 쿼리합니다.To display the exact system procedure names, query the sys.system_objects and sys.system_parameters catalog views.

  • 사용자 정의 프로시저의 이름이 시스템 프로시저의 이름과 같으면 사용자 정의 프로시저가 실행되지 않을 수도 있습니다.If a user-defined procedure has the same name as a system procedure, the user-defined procedure might not ever execute.

권장 사항 Recommendations

  • 시스템 저장 프로시저 실행Executing System Stored Procedures

    시스템 프로시저는 접두사 sp_로 시작합니다.System procedures begin with the prefix sp_. 시스템 프로시저는 모든 사용자 정의 데이터베이스와 시스템 정의 데이터베이스에 논리적으로 나타나기 때문에 프로시저 이름을 완전히 한정하지 않고도 모든 데이터베이스에서 시스템 프로시저를 실행할 수 있습니다.Because they logically appear in all user- and system- defined databases, they can be executed from any database without having to fully quality the procedure name. 그러나 이름 충돌이 발생하지 않도록 sys 스키마 이름으로 모든 시스템 프로시저 이름을 스키마로 한정하는 것이 좋습니다.However, we recommend schema-qualifying all system procedure names with the sys schema name to prevent name conflicts. 다음 예에서는 권장되는 시스템 프로시저 호출 방법을 보여 줍니다.The following example demonstrates the recommended method of calling a system procedure.

    EXEC sys.sp_who;  
    
  • 사용자 정의 저장 프로시저 실행Executing User-defined Stored Procedures

    사용자 정의 프로시저를 실행할 때 프로시저 이름을 스키마 이름으로 한정하는 것이 좋습니다.When executing a user-defined procedure, we recommend qualifying the procedure name with the schema name. 이렇게 하면 데이터베이스 엔진Database Engine 에서 여러 스키마를 검색할 필요가 없기 때문에 성능이 약간 향상됩니다.This practice gives a small performance boost because the 데이터베이스 엔진Database Engine does not have to search multiple schemas. 또한 데이터베이스에 여러 스키마에서 이름이 동일한 프로시저가 있는 경우 잘못된 프로시저를 실행하는 문제가 방지됩니다.It also prevents executing the wrong procedure if a database has procedures with the same name in multiple schemas.

    다음 예에서는 권장되는 사용자 정의 프로시저 실행 방법을 보여 줍니다.The following example demonstrates the recommended method to execute a user-defined procedure. 프로시저는 하나의 입력 매개 변수를 받아들입니다.Notice that the procedure accepts one input parameter. 입력 및 출력 매개 변수를 지정하는 방법은 매개 변수 지정을 참조하세요.For information about specifying input and output parameters, see Specify Parameters.

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

    -또는--Or-

    EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50;  
    GO  
    

    정규화되지 않은 사용자 정의 프로시저를 지정하면 데이터베이스 엔진Database Engine 은 다음 순서로 프로시저를 검색합니다.If a nonqualified user-defined procedure is specified, the 데이터베이스 엔진Database Engine searches for the procedure in the following order:

    1. 현재 데이터베이스의 sys 스키마The sys schema of the current database.

    2. 일괄 처리나 동적 SQL에서 실행된 경우 호출자의 기본 스키마.The caller's default schema if it is executed in a batch or in dynamic SQL. 또는 다른 프로시저 정의 본문에 한정되지 않은 프로시저 이름이 있는 경우 이 다른 프로시저를 포함하는 스키마가 다음으로 검색됩니다.Or, if the nonqualified procedure name appears inside the body of another procedure definition, the schema that contains this other procedure is searched next.

    3. 현재 데이터베이스의 dbo 스키마The dbo schema in the current database.

  • 저장 프로시저 자동 실행Executing Stored Procedures Automatically

    자동 실행되도록 표시된 프로시저는 SQL ServerSQL Server 가 시작될 때마다 실행되며 master 데이터베이스는 이 시작 프로세스 중에 복구됩니다.Procedures marked for automatic execution are executed every time SQL ServerSQL Server starts and the master database is recovered during that startup process. 자동 실행되도록 프로시저를 설정하면 데이터베이스 유지 관리 작업을 수행하거나 프로시저가 백그라운드 프로세스로 계속 실행되도록 하는 데 유용할 수 있습니다.Setting up procedures to execute automatically can be useful for performing database maintenance operations or for having procedures run continuously as background processes. 또는 프로시저가 전역 임시 테이블을 만드는 작업처럼 tempdb에서 시스템 또는 유지 관리 태스크를 수행하도록 하는 것이 자동 실행을 사용하는 또 다른 방법입니다.Another use for automatic execution is to have the procedure perform system or maintenance tasks in tempdb, such as creating a global temporary table. 이렇게 하면 시작 중에 tempdb SQL ServerSQL Server 가 다시 만들어질 때 이러한 임시 테이블이 항상 존재합니다.This makes sure that such a temporary table will always exist when tempdb is re-created during SQL ServerSQL Server startup.

    자동 실행되는 프로시저는 sysadmin 고정 서버 역할의 멤버와 같은 권한을 사용하여 작동합니다.A procedure that is automatically executed operates with the same permissions as members of the sysadmin fixed server role. 프로시저에서 생성되는 오류 메시지는 SQL ServerSQL Server 오류 로그에 기록됩니다.Any error messages generated by the procedure are written to the SQL ServerSQL Server error log.

    시작 프로시저의 개수에는 제한이 없지만 각 시작 프로시저는 실행하는 동안 하나의 작업자 스레드를 소비합니다.There is no limit to the number of startup procedures you can have, but be aware that each consumes one worker thread while executing. 따라서 시작할 때 여러 프로시저를 실행해야 하지만 동시에 실행할 필요가 없다면 한 프로시저만 시작 프로시저로 지정하고 그 프로시저에서 다른 프로시저를 호출하도록 만듭니다.If you must execute multiple procedures at startup but do not need to execute them in parallel, make one procedure the startup procedure and have that procedure call the other procedures. 이렇게 하면 하나의 작업자 스레드만 사용됩니다.This uses only one worker thread.

    자동 실행되는 프로시저의 결과 집합은 반환하지 마세요.Do not return any result sets from a procedure that is executed automatically. 프로시저는 응용 프로그램이나 사용자가 아닌 SQL ServerSQL Server 에 의해 실행되므로 결과 집합을 반환할 대상이 없습니다.Because the procedure is being executed by SQL ServerSQL Server instead of an application or user, there is nowhere for the result sets to go.

  • 자동 실행 설정, 해제 및 제어Setting, Clearing, and Controlling Automatic Execution

    시스템 관리자(sa)만 프로시저가 자동 실행되도록 표시할 수 있습니다.Only the system administrator (sa) can mark a procedure to execute automatically. 또한 프로시저는 master 데이터베이스에 있고 sa에 의해 소유되어야 하며 입력 또는 출력 매개 변수를 가질 수 없습니다.In addition, the procedure must be in the master database, owned by sa, and cannot have input or output parameters.

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

    1. 기존 프로시저를 시작 프로시저로 지정합니다.Designate an existing procedure as a startup procedure.

    2. SQL ServerSQL Server 를 시작할 때 프로시저가 실행되지 않도록 합니다.Stop a procedure from executing at SQL ServerSQL Server startup.

보안 Security

자세한 내용은 EXECUTE AS(Transact-SQL)EXECUTE AS 절(Transact-SQL)을 참조하세요.For more information, see EXECUTE AS (Transact-SQL) and EXECUTE AS Clause (Transact-SQL).

사용 권한 Permissions

자세한 내용은 EXECUTE(Transact-SQL)을 사용하여 저장 프로시저를 실행하는 방법에 대해 설명합니다.For more information, see the "Permissions" section in EXECUTE (Transact-SQL).

SQL Server Management Studio 사용 Using SQL Server Management Studio

저장 프로시저를 실행하려면To execute a stored procedure

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진SQL Server Database Engine의 인스턴스에 연결하고 해당 인스턴스를 확장한 다음 데이터베이스를 확장합니다.In Object Explorer, connect to an instance of the SQL Server 데이터베이스 엔진SQL Server Database Engine, expand that instance, and then expand Databases.

  2. 원하는 데이터베이스를 확장하고 프로그래밍 기능을 확장한 다음 저장 프로시저를 확장합니다.Expand the database that you want, expand Programmability, and then expand Stored Procedures.

  3. 원하는 사용자 정의 저장 프로시저를 마우스 오른쪽 단추로 클릭하고 저장 프로시저 실행을 클릭합니다.Right-click the user-defined stored procedure that you want and click Execute Stored Procedure.

  4. 프로시저 실행 대화 상자에서 각 매개 변수의 값과 null 값을 전달해야 하는지 여부를 지정합니다.In the Execute Procedure dialog box, specify a value for each parameter and whether it should pass a null value.

    매개 변수Parameter
    매개 변수의 이름을 나타냅니다.Indicates the name of the parameter.

    데이터 형식Data Type
    매개 변수의 데이터 형식을 나타냅니다.Indicates the data type of the parameter.

    출력 매개 변수Output Parameter
    매개 변수가 출력 매개 변수인지 여부를 나타냅니다.Indicates if this is an output parameter.

    Null 값 전달Pass Null Value
    매개 변수의 값으로 NULL 값을 전달합니다.Pass a NULL as the value of the parameter.

    Value
    프로시저를 호출할 때 매개 변수의 값을 입력합니다.Type the value for the parameter when calling the procedure.

  5. 저장 프로시저를 실행하려면 확인을 클릭합니다.To execute the stored procedure, click OK.

Transact-SQL 사용 Using Transact-SQL

저장 프로시저를 실행하려면To execute a stored procedure

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute. 이 예에서는 하나의 매개 변수를 예상하는 저장 프로시저를 실행하는 방법을 보여 줍니다.This example shows how to execute a stored procedure that expects one parameter. 또한 uspGetEmployeeManagers 매개 변수로 지정된 값인 6 을 사용하여 @EmployeeID 저장 프로시저를 실행합니다.The example executes the uspGetEmployeeManagers stored procedure with the value 6 specified as the @EmployeeID parameter.

USE AdventureWorks2012;  
GO  
EXEC dbo.uspGetEmployeeManagers 6;  
GO  

자동 실행되도록 프로시저를 설정하거나 해제하려면To set or clear a procedure for executing automatically

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute. 이 예에서는 sp_procoption 을 사용하여 자동 실행되도록 프로시저를 설정하는 방법을 보여 줍니다.This example shows how to use sp_procoption to set a procedure for automatic execution.

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

프로시저가 자동 실행되는 것을 중지하려면To stop a procedure from executing automatically

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute. 이 예에서는 sp_procoption 을 사용하여 프로시저가 자동 실행되는 것을 중지하는 방법을 보여 줍니다.This example shows how to use sp_procoption to stop a procedure from executing automatically.

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

예(Transact-SQL) Example (Transact-SQL)

참고 항목See Also

매개 변수 지정 Specify Parameters
scan for startup procs 서버 구성 옵션 구성 Configure the scan for startup procs Server Configuration Option
EXECUTE(Transact-SQL) EXECUTE (Transact-SQL)
CREATE PROCEDURE(Transact-SQL) CREATE PROCEDURE (Transact-SQL)
저장 프로시저(데이터베이스 엔진) Stored Procedures (Database Engine)