Compartir a través de


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:

    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.

    SugerenciaSugerencia

    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:

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

Icono de flecha usado con el vínculo Volver al principio[Arriba]

Usar 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 secundario en el procedimiento almacenado definido por el usuario que desee y, a continuación, 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.

Icono de flecha usado con el vínculo Volver al principio[Arriba]

Usar 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 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

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

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

Icono de flecha usado con el vínculo Volver al principio[Arriba]

Vea también

Referencia

EXECUTE (Transact-SQL)

CREATE PROCEDURE (Transact-SQL)

Conceptos

Especificar parámetros

Establecer la opción de configuración del servidor Buscar procedimientos de inicio

Procedimientos almacenados (motor de base de datos)