Ejecutar un procedimiento almacenado

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database SíInstancia administrada de Azure SQL síAzure Synapse Analytics síAlmacenamiento de datos paralelos

En este tema se describe cómo ejecutar un procedimiento almacenado en SQL Server 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 comenzar

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 por 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 calificar totalmente el nombre del procedimiento. Pero 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.

    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 más información sobre cómo especificar parámetros de entrada y salida, vea Especificar parámetros.

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

    -O bien-

    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:

    1. El esquema sys de la base de datos actual.

    2. 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.

    3. 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.

    Use sp_procoption para:

    1. Designar un procedimiento existente como procedimiento de inicio.

    2. 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).

Uso de SQL Server Management Studio

Para ejecutar un procedimiento almacenado

  1. 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.

  2. Expanda la base de datos que desee, expanda Programación y, a continuación, expanda Procedimientos almacenados.

  3. Haga clic con el botón derecho en el procedimiento almacenado definido por el usuario que quiera y, luego, haga clic en Ejecutar procedimiento almacenado.

  4. 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.

  5. Para ejecutar el procedimiento almacenado, haga clic en Aceptar.

Usar Transact-SQL

Para ejecutar un procedimiento almacenado

  1. Conéctese con el Motor de base de datos.

  2. En la barra Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo 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 .

USE AdventureWorks2012;  
GO  
EXEC dbo.uspGetEmployeeManagers 6;  
GO  

Para establecer o borrar un procedimiento para que se ejecute automáticamente

  1. Conéctese con el Motor de base de datos.

  2. En la barra Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo 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.

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

Para que un procedimiento deje de ejecutarse automáticamente

  1. Conéctese con el Motor de base de datos.

  2. En la barra Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo 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.

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

Ejemplo (Transact-SQL)

Consulte también

Especificar parámetros
Establecer la opción de configuración del servidor Buscar procedimientos de inicio
EXECUTE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
Procedimientos almacenados (motor de base de datos)