Compartir a través de


Ejecutar un procedimiento almacenado

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

Hay dos maneras diferentes de ejecutar un procedimiento almacenado. El primer y el enfoque más común es que una aplicación o un usuario llamen al procedimiento. El segundo enfoque consiste en establecer el procedimiento que se ejecutará automáticamente cuando se inicie una instancia de SQL Server. Cuando una aplicación o usuario llama a un procedimiento, la palabra clave EXECUTE o EXEC Transact-SQL se indica explícitamente en la llamada. Alternativamente, se puede llamar y ejecutar el procedimiento sin la palabra clave si es la primera instrucción del lote Transact-SQL.

En este tema

Antes de empezar

Limitaciones y restricciones

  • La intercalación de base de datos que realiza la llamada se usa al buscar coincidencias con los nombres de procedimiento del sistema. Por lo tanto, use siempre el caso exacto de los nombres de procedimiento del sistema en las llamadas a procedimiento. Por ejemplo, este código producirá un error si se ejecuta en el contexto de una base de datos que tiene una intercalación que distingue 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 del procedimiento 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, es posible que el procedimiento definido por el usuario no se ejecute nunca.

Recomendaciones

  • Ejecución de procedimientos almacenados del sistema

    Los procedimientos del sistema comienzan con el prefijo sp_. Dado que aparecen lógicamente en todas las bases de datos definidas por el usuario y el sistema, se pueden ejecutar desde cualquier base de datos sin tener que calidadar completamente el nombre del procedimiento. Sin embargo, se recomienda calificar el esquema de todos los nombres de procedimiento del sistema con el nombre del 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;  
    
  • Ejecución de procedimientos almacenados definidos por el usuario

    Al ejecutar un procedimiento definido por el usuario, se recomienda calificar el nombre del procedimiento con el nombre del esquema. Esta práctica proporciona un pequeño aumento del rendimiento porque el motor de base de datos no tiene que buscar varios esquemas. También impide ejecutar el 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.

    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 en el orden siguiente:

    1. Esquema sys de la base de datos actual.

    2. El esquema predeterminado del llamador 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, el esquema que contiene este otro procedimiento se busca a continuación.

    3. Esquema dbo de la base de datos actual.

  • Ejecutar procedimientos almacenados automáticamente

    Los procedimientos marcados para la 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. La configuración de procedimientos para ejecutarse automáticamente puede ser útil para realizar operaciones de mantenimiento de bases de datos o para que los procedimientos se ejecuten continuamente como procesos en segundo plano. Otro uso para la ejecución automática es hacer que el procedimiento realice tareas de mantenimiento o del sistema en tempdb, como la creación de una tabla temporal global. Esto garantiza que esta tabla temporal siempre existirá cuando tempdb se vuelva a crear 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 . Los mensajes de error generados por el procedimiento se escriben en el registro de errores de SQL Server.

    No hay límite para el número de procedimientos de inicio que puede tener, pero tenga en cuenta que cada uno consume un subproceso de trabajo mientras se ejecuta. Si debe ejecutar varios procedimientos en el inicio, pero no es necesario ejecutarlos en paralelo, realice un procedimiento en el procedimiento de inicio y haga que ese procedimiento llame a los demás procedimientos. Esto usa solo un hilo de trabajo.

    Sugerencia

    No devuelva ningún conjunto de resultados de un procedimiento que se ejecute automáticamente. Dado que SQL Server ejecuta el procedimiento en lugar de una aplicación o usuario, no hay ninguna parte para que los conjuntos de resultados vayan.

  • Configuración, desactivación y control de la ejecución automática

    Solo el administrador del sistema (sa) puede marcar un procedimiento para ejecutarse automáticamente. Además, el procedimiento debe estar en la base de datos maestra , propiedad de sa, y no puede tener parámetros de entrada o salida.

    Use sp_procoption para:

    1. Designe un procedimiento existente como un procedimiento de inicio.

    2. Detenga la ejecución de un procedimiento en el inicio de SQL Server.

Seguridad

Para obtener más información, vea EXECUTE AS (Transact-SQL) y EXECUTE AS (cláusula) (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 del motor de base de datos de SQL Server, expanda esa instancia 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 desee y 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 un valor NULL.

    Parámetro
    Indica el nombre del parámetro.

    Tipo de dato
    Indica el tipo de datos del parámetro .

    Parámetro de salida
    Indica si se trata de un parámetro de salida.

    Pasa un valor NULL
    Pase un valor NULL como valor del parámetro .

    Valor
    Escriba el valor del parámetro al llamar al procedimiento.

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

Uso de Transact-SQL

Para ejecutar un procedimiento almacenado

  1. Conéctese al 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 uspGetEmployeeManagers procedimiento almacenado con el valor 6 especificado como parámetro @EmployeeID .

USE AdventureWorks2012;  
GO  
EXEC dbo.uspGetEmployeeManagers 6;  
GO  

Para establecer o borrar un procedimiento para ejecutar automáticamente

  1. Conéctese al 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 para la ejecución automática.

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

Para impedir que un procedimiento se ejecute automáticamente

  1. Conéctese al 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 impedir que un procedimiento se ejecute automáticamente.

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

Ejemplo (Transact-SQL)

Véase 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)