Выполнение хранимой процедурыExecute a Stored Procedure

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

В этом разделе описывается, как выполнить хранимую процедуру SQL ServerSQL Server при помощи среды SQL Server Management StudioSQL Server Management Studio или Transact-SQLTransact-SQL.This topic describes how to execute a stored procedure in SQL ServerSQL Server 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_objects и sys.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 qualify 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 EngineDatabase Engine не нужно выполнять поиск в нескольких схемах.This practice gives a small performance boost because the Компонент Database EngineDatabase 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 EngineDatabase Engine производит поиск процедуры в следующем порядке.If a nonqualified user-defined procedure is specified, the Компонент Database EngineDatabase 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 Clause (Transact-SQL).For more information, see EXECUTE AS (Transact-SQL) and EXECUTE AS Clause (Transact-SQL).

PermissionsPermissions

Дополнительные сведения см. в разделе "Разрешения" статьи EXECUTE (Transact-SQL).For more information, see the "Permissions" section in EXECUTE (Transact-SQL).

Использование среды SQL Server Management StudioUsing SQL Server Management Studio

Выполнение хранимой процедурыTo execute a stored procedure

  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент SQL Server Database EngineSQL Server Database Engine, разверните его, а затем разверните узел Базы данных.In Object Explorer, connect to an instance of the Компонент SQL Server Database EngineSQL 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.

    Передать значение NULLPass 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-SQLUsing Transact-SQL

Выполнение хранимой процедурыTo execute a stored procedure

  1. Установите соединение с компонентом Компонент Database EngineDatabase Engine.Connect to the Компонент Database EngineDatabase 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 EngineDatabase Engine.Connect to the Компонент Database EngineDatabase 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 EngineDatabase Engine.Connect to the Компонент Database EngineDatabase 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)
Хранимые процедуры (компонент Database Engine)Stored Procedures (Database Engine)