Ejecución de un procedimiento almacenado

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

En este artículo se describe cómo ejecutar un procedimiento almacenado en SQL Server mediante SQL Server Management Studio o Transact-SQL.

Hay diferentes formas 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. Otro método consiste en establecer el procedimiento almacenado 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. Se puede llamar al procedimiento y ejecutarlo sin la palabra clave EXEC si el procedimiento es la primera instrucción de un lote de Transact-SQL.

Limitaciones y restricciones

La intercalación de base de datos de llamada se usa al comparar los nombres de los procedimientos del sistema. Por esta razón, en las llamadas a procedimientos use siempre el mismo esquema de mayúsculas y minúsculas de los nombres de procedimientos del sistema. Por ejemplo, este código genera 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; -- Fails to resolve because SP_heLP doesn't 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

Siga las recomendaciones a continuación para ejecutar procedimientos almacenados.

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, los procedimientos del sistema se pueden ejecutar desde cualquier base de datos sin necesidad de calificar totalmente el nombre del procedimiento. Sin embargo, es mejor 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 a continuación se muestra el método recomendado para llamar a un procedimiento del sistema.

EXEC sys.sp_who;  

Procedimientos almacenados definidos por el usuario

Al ejecutar un procedimiento definido por el usuario, es mejor 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. El uso del nombre del esquema también evita la ejecución del procedimiento incorrecto si una base de datos tiene procedimientos con el mismo nombre en varios esquemas.

En los ejemplos a continuación se muestra el método recomendado para ejecutar un procedimiento definido por el usuario. Este procedimiento acepta dos parámetros de entrada. Para obtener más información sobre cómo especificar parámetros de entrada y salida, vea Especificación de parámetros en un procedimiento almacenado.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

O:

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
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 el procedimiento se ejecuta en un lote o en SQL dinámico. 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 en la base de datos actual.

Seguridad

Para obtener información sobre seguridad, vea EXECUTE AS (Transact-SQL) y Cláusula EXECUTE AS (Transact-SQL).

Permisos

Para obtener información sobre permisos, vea la sección Permisos del tema EXECUTE (Transact-SQL).

Ejecución de un procedimiento almacenado

Puede utilizar la interfaz de usuario de SQL Server Management Studio (SSMS) o Transact-SQL en un período de consulta de SSMS para ejecutar un procedimiento almacenado. Utilice siempre la última versión de SSMS.

Uso de SQL Server Management Studio

  1. En el Explorador de objetos, conéctese a una instancia de SQL Server o Azure SQL Database, expándala y, después, expanda Bases de datos.

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

  3. Haga clic con el botón derecho en el procedimiento almacenado que desee ejecutar y, luego, seleccione Ejecutar procedimiento almacenado.

  4. En el cuadro de diálogo Ejecutar procedimiento, Parámetro indica el nombre de cada parámetro, Tipo de datos indica su tipo de datos y Parámetro de salida indica si es un parámetro de salida.

    Para este parámetro:

    • En Valor, escriba el valor que se va a usar para el parámetro.
    • En Pasar valor null, seleccione si se pasa un valor NULL como valor del parámetro.
  5. Seleccione Aceptar para ejecutar el procedimiento almacenado. Si el procedimiento almacenado no tiene ningún parámetro, seleccione Aceptar.

    El procedimiento almacenado se ejecuta y los resultados aparecen en el panel Resultados.

    Por ejemplo, para ejecutar el procedimiento almacenado SalesLT.uspGetCustomerCompany del artículo Crear un procedimiento almacenado, escriba Cannon en el parámetro @LastName y Chris en el parámetro @FirstName y seleccione Aceptar. El procedimiento devuelve FirstName Chris, LastName Cannon y CompanyName Outdoor Sporting Goods.

Utilización de Transact-SQL en un período de consulta

  1. En SSMS, conéctese a una instancia de SQL Server o Azure SQL Database.

  2. En la barra de herramientas, seleccione Nueva consulta.

  3. Escriba una instrucción EXECUTE con la siguiente sintaxis en la ventana Consulta y proporcione valores para todos los parámetros esperados:

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    Por ejemplo, la siguiente instrucción de Transact-SQL ejecuta el procedimiento almacenado uspGetCustomerCompany y con Cannon como valor del parámetro @LastName y Chris como valor del parámetro @FirstName:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. En la barra de herramientas, seleccione Ejecutar. Se ejecutará el procedimiento almacenado.

Opciones de los valores de parámetro

Hay varias maneras de proporcionar parámetros y valores en las instrucciones EXECUTE de los procedimientos almacenados. En los ejemplos siguientes se muestran varias opciones diferentes para la instrucción EXECUTE.

  • Si proporciona los valores de parámetro en el mismo orden que se definen en el procedimiento almacenado, no es necesario indicar los nombres de parámetro. Por ejemplo:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • Si proporciona nombres de parámetro en el patrón de @parameter_name=value, no es necesario especificar los nombres de parámetro y los valores en el mismo orden que se definen. Por ejemplo, las dos instrucciones siguientes son válidas:

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    O bien

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • Si usa el formulario @parameter_name=value para cualquier parámetro, debe usarlo para todos los parámetros posteriores de esa instrucción. Por ejemplo, no puede usar EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';.

Ejecución automática en el inicio

Se aplica a: SQL Server

En SQL Server, un miembro del rol del servidor sysadmin puede utilizar sp_procoption para establecer o borrar un procedimiento para la ejecución automática en el inicio. Los procedimientos de inicio deben estar en la base de datos master, deben ser propiedad de sa y no pueden tener parámetros de entrada ni salida. Para más información, vea sp_procoption (Transact-SQL).

Los procedimientos marcados para su ejecución automática en el inicio se ejecutan cada vez que se inicia SQL Server y la base de datos master 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. La ejecución automática garantiza que esta tabla temporal siempre exista cuando se vuelve 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, pero cada procedimiento de inicio consume un subproceso de trabajo mientras se ejecuta. Si necesita ejecutar varios procedimientos en el inicio, pero no necesita que se ejecuten en paralelo, haga que un procedimiento sea el procedimiento de inicio y que este llame a los restantes. Este método solo 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 los conjuntos de resultados.

Nota:

La base de datos de Azure SQL es una utilidad diseñada para aislar características de las dependencias de la base de datos master. Por lo tanto, las instrucciones de Transact-SQL que establecen opciones de nivel de servidor no están disponibles en Azure SQL. A menudo puede encontrar alternativas adecuadas de otros servicios de Azure, como trabajos elásticos o Azure Automation.

Establecimiento de un procedimiento para que se ejecute automáticamente en el inicio

Solo el administrador del sistema (sa) puede marcar un procedimiento para que se ejecute automáticamente.

  1. En SSMS, conéctese al Motor de base de datos.

  2. En la barra de herramientas Estándar, seleccione Nueva consulta.

  3. Introduzca los comandos sp_procoption a continuación para establecer un procedimiento almacenado que se ejecute automáticamente en el inicio de SQL Server.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. En la barra de herramientas, seleccione Ejecutar.

Detención de la ejecución automática de un procedimiento en el inicio

Un sysadmin puede utilizar sp_procoption para para detener la ejecución automática de un procedimiento al iniciar SQL Server.

  1. En SSMS, conéctese al Motor de base de datos.

  2. En la barra de herramientas Estándar, seleccione Nueva consulta.

  3. Introduzca los comandos a continuación en el período de consulta.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. En la barra de herramientas, seleccione Ejecutar.