Ejecutar un procedimiento almacenado
En este tema se describe cómo ejecutar un procedimiento almacenado en SQL Server 2012 mediante SQL Server Management Studio o Transact-SQL.
Hay dos formas diferentes de ejecutar un procedimiento almacenado. El primer método y más común es que una aplicación o un usuario llame al procedimiento. El segundo método consiste en establecer el procedimiento para que se ejecute automáticamente cuando se inicie una instancia de SQL Server. Cuando una aplicación o un usuario llama a un procedimiento, la palabra clave EXECUTE o EXEC de Transact-SQL se indica explícitamente en la llamada. Como alternativa, se puede llamar al procedimiento y ejecutarlo sin la palabra clave si el procedimiento es la primera instrucción del lote de Transact-SQL.
En este tema
Antes de empezar:
Limitaciones y restricciones
Recomendaciones
Seguridad
Para ejecutar un procedimiento almacenado, usando:
SQL Server Management Studio
Transact-SQL
Antes de empezar
Limitaciones y restricciones
La intercalación de base de datos de llamada se usa al comparar los nombres de los procedimientos del sistema. Por tanto, en las llamadas a procedimientos use siempre el modelo exacto de mayúsculas y minúsculas de los nombres de procedimientos del sistema. Por ejemplo, este código generará un error si se ejecuta en el contexto de una base de datos que tenga una intercalación que distinga mayúsculas de minúsculas:
EXEC SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help
Para mostrar los nombres exactos de los procedimientos del sistema, consulte las vistas de catálogo sys.system_objects y sys.system_parameters.
Si un procedimiento definido por el usuario tiene el mismo nombre que un procedimiento del sistema, puede que el procedimiento definido por el usuario no se ejecute nunca.
Recomendaciones
Ejecutar procedimientos almacenados del sistema
Los procedimientos del sistema comienzan con el prefijo sp_. Puesto que aparecen lógicamente en todas las bases de datos definidas por el usuario y por el sistema, se pueden ejecutar desde cualquier base de datos sin necesidad de que calificar totalmente el nombre del procedimiento. Sin embargo, se recomienda calificar como de esquema todos los nombres de procedimientos del sistema con el nombre de esquema sys para evitar conflictos de nombres. En el ejemplo siguiente se muestra el método recomendado para llamar a un procedimiento del sistema.
```Transact-SQL EXEC sys.sp_who; ```
Ejecutar procedimientos almacenados definidos por el usuario
Al ejecutar un procedimiento definido por el usuario, se recomienda calificar el nombre del procedimiento con el nombre de esquema. Esta práctica proporciona un pequeño aumento del rendimiento porque el Motor de base de datos no tiene que buscar en varios esquemas. También evita la ejecución del procedimiento incorrecto si una base de datos tiene procedimientos con el mismo nombre en varios esquemas.
En el ejemplo siguiente se muestra el método recomendado para ejecutar un procedimiento definido por el usuario. Observe que el procedimiento acepta un parámetro de entrada. Para obtener información sobre cómo especificar parámetros de entrada y salida, vea Especificar parámetros.
```Transact-SQL USE AdventureWorks2012; GO EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50; ```
- O bien -
```Transact-SQL EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50; GO ```
Si se especifica un procedimiento definido por el usuario no calificado, el Motor de base de datos busca el procedimiento siguiendo este orden:
El esquema sys de la base de datos actual.
El esquema predeterminado del autor de la llamada si se ejecuta en un lote o en SQL dinámico. O bien, si el nombre del procedimiento no calificado aparece dentro del cuerpo de otra definición de procedimiento, a continuación se busca en el esquema que contiene este otro procedimiento.
El esquema dbo de la base de datos actual.
Ejecutar procedimientos almacenados automáticamente
Los procedimientos marcados para su ejecución automática se ejecutan cada vez que se inicia SQL Server y la base de datos maestra se recupera durante ese proceso de inicio. Puede ser útil configurar procedimientos para que se ejecuten automáticamente a la hora de realizar operaciones de mantenimiento de bases de datos o para tener procedimientos que se ejecutan continuamente como procesos en segundo plano. Otra forma de usar la ejecución automática consiste en que el procedimiento realice tareas del sistema o de mantenimiento en tempdb, como crear una tabla temporal global. De este modo, se garantiza que esa tabla temporal existirá siempre cuando se vuelva a crear tempdb durante el inicio de SQL Server.
Un procedimiento que se ejecuta automáticamente funciona con los mismos permisos que los miembros del rol fijo de servidor sysadmin. Todos los mensajes de error generados por el procedimiento se escriben en el registro de errores de SQL Server.
No existe límite en cuanto al número de procedimientos de inicio que se pueden crear, aunque debe tener en cuenta que cada uno consume un subproceso de trabajo mientras se ejecuta. Si es necesario ejecutar múltiples procedimientos en el inicio, pero no es necesario que se ejecuten en paralelo, haga que un procedimiento sea el procedimiento de inicio y que éste llame a los restantes. De este modo, solo se utiliza un subproceso de trabajo.
Sugerencia No se devuelve ningún conjunto de resultados de un procedimiento que se ejecuta automáticamente. Puesto que el responsable de ejecutar el procedimiento es SQL Server y no una aplicación o un usuario, no existe ningún destino para el conjunto de resultados.
Establecer, borrar y controlar la ejecución automática
Solo el administrador del sistema (sa) puede marcar un procedimiento para que se ejecute automáticamente. Además, el procedimiento debe encontrarse en la base de datos maestra, pertenecer a sa y no incluir parámetros de entrada ni de salida.
Utilice sp_procoption para:
Designar un procedimiento existente como procedimiento de inicio.
Detener la ejecución de un procedimiento al iniciar SQL Server.
Seguridad
Para obtener más información, vea EXECUTE AS (Transact-SQL) y EXECUTE AS (cláusula de Transact-SQL).
Permisos
Para obtener más información, vea la sección "Permisos" de EXECUTE (Transact-SQL).
[Arriba]
Usar SQL Server Management Studio
Para ejecutar un procedimiento almacenado
En el Explorador de objetos, conéctese a una instancia de Motor de base de datos de SQL Server, expándala y, a continuación, expanda Bases de datos.
Expanda la base de datos que desee, expanda Programación y, a continuación, expanda Procedimientos almacenados.
Haga clic con el botón secundario en el procedimiento almacenado definido por el usuario que desee y, a continuación, haga clic en Ejecutar procedimiento almacenado.
En el cuadro de diálogo Ejecutar procedimiento, especifique un valor para cada parámetro y si debe pasar o no un valor NULL.
Parámetro
Indica el nombre del parámetro.Tipo de datos
Indica el tipo de datos del parámetro.Parámetro de salida
Indica si se trata de un parámetro de salida.Pasar valor NULL
Pase un valor NULL como valor del parámetro.Valor
Escriba el valor del parámetro cuando llame al procedimiento.
Para ejecutar el procedimiento almacenado, haga clic en Aceptar.
[Arriba]
Usar Transact-SQL
Para ejecutar un procedimiento almacenado
Conéctese al Motor de base de datos.
En la barra Estándar, haga clic en Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y haga clic en Ejecutar. En este ejemplo se muestra cómo ejecutar un procedimiento almacenado que espera un parámetro. En el ejemplo se ejecuta el procedimiento almacenado uspGetEmployeeManagers con el valor 6 como parámetro @EmployeeID.
```Transact-SQL
USE AdventureWorks2012;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
```
Para establecer o borrar un procedimiento para que se ejecute automáticamente
Conéctese con el Motor de base de datos.
En la barra Estándar, haga clic en Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y haga clic en Ejecutar. En este ejemplo se muestra cómo usar sp_procoption para establecer un procedimiento de manera que se ejecute automáticamente.
```Transact-SQL
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionName = ] 'startup'
, @OptionValue = 'on';
```
Para que un procedimiento deje de ejecutarse automáticamente
Conéctese con el Motor de base de datos.
En la barra Estándar, haga clic en Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y haga clic en Ejecutar. En este ejemplo se muestra cómo usar sp_procoption para que un procedimiento deje de ejecutarse automáticamente.
```Transact-SQL
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionValue = 'off';
```
Ejemplo (Transact-SQL)
[Arriba]
Vea también
Referencia
CREATE PROCEDURE (Transact-SQL)
Conceptos
Establecer la opción de configuración del servidor Buscar procedimientos de inicio