Los ejemplos de esta sección demuestran la funcionalidad básica de la declaración CREATE PROCEDURE usando la sintaxis mínima requerida.
A. Creación de un procedimiento Transact-SQL simple
El siguiente ejemplo crea un procedimiento almacenado que devuelve todos los empleados (nombre y apellido proporcionados), sus títulos de trabajo y los nombres de sus departamentos desde una vista en la base de datos AdventureWorks2012. Este procedimiento no utiliza ningún parámetro. A continuación, el ejemplo demuestra tres métodos para ejecutar el procedimiento.
B. Devolver más de un conjunto de resultados
El siguiente procedimiento devuelve dos conjuntos de resultados.
C. Creación de un procedimiento almacenado CLR
El siguiente ejemplo crea el GetPhotoFromDBprocedimiento que hace referencia al GetPhotoFromDBmétodo de la LargeObjectBinaryclase en el HandlingLOBUsingCLRensamblado. Antes de crear el procedimiento, el HandlingLOBUsingCLRensamblado se registra en la base de datos local.
Se aplica a : SQL Server 2008 y versiones posteriores, Base de datos SQL (si se usa un ensamblado creado a partir de assembly_bits.
Los ejemplos de esta sección demuestran cómo usar parámetros de entrada y salida para pasar valores hacia y desde un procedimiento almacenado.
D. Creación de un procedimiento con parámetros de entrada
El siguiente ejemplo crea un procedimiento almacenado que devuelve información para un empleado específico pasando valores para el nombre y apellido del empleado. Este procedimiento acepta solo coincidencias exactas para los parámetros pasados.
E. Uso de un procedimiento con parámetros comodín
El siguiente ejemplo crea un procedimiento almacenado que devuelve información para los empleados pasando valores completos o parciales para el nombre y apellido del empleado. Este patrón de procedimiento coincide con los parámetros pasados o, si no se proporciona, utiliza el valor predeterminado predeterminado (apellidos que comienzan con la letra D).
F. Uso de parámetros de OUTPUT
El siguiente ejemplo crea el uspGetListprocedimiento. Este procedimiento devuelve una lista de productos que tienen precios que no superan una cantidad especificada. El ejemplo muestra el uso de múltiples SELECTinstrucciones y múltiples OUTPUTparámetros. Los parámetros OUTPUT permiten que un procedimiento externo, un lote o más de una instrucción Transact-SQL accedan a un valor establecido durante la ejecución del procedimiento.
Ejecute uspGetListpara obtener una lista de productos de Adventure Works (bicicletas) que cuestan menos de $700. Los OUTPUTparámetros @Costy @ComparePricesse utilizan con lenguaje de control de flujo para devolver un mensaje en la ventana Mensajes .
G. Uso de un parámetro con valores de tabla
El siguiente ejemplo usa un tipo de parámetro con valores de tabla para insertar varias filas en una tabla. El ejemplo crea el tipo de parámetro, declara una variable de tabla para hacer referencia a ella, llena la lista de parámetros y luego pasa los valores a un procedimiento almacenado. El procedimiento almacenado utiliza los valores para insertar varias filas en una tabla.
H. Uso de un parámetro de cursor de SALIDA
El siguiente ejemplo utiliza el parámetro de cursor OUTPUT para pasar un cursor que es local a un procedimiento de regreso al lote, procedimiento o desencadenador que llama.
Primero, cree el procedimiento que declara y luego abre un cursor en la Currencytabla:
Los ejemplos de esta sección muestran cómo insertar o modificar datos en tablas o vistas mediante la inclusión de una declaración de Lenguaje de manipulación de datos (DML) en la definición del procedimiento.
I. Usar ACTUALIZAR en un procedimiento almacenado
El siguiente ejemplo usa una instrucción UPDATE en un procedimiento almacenado. El procedimiento toma un parámetro de entrada @NewHoursy un parámetro de salida @RowCount. El @NewHoursvalor del parámetro se utiliza en la sentencia UPDATE para actualizar la columna VacationHoursde la tabla HumanResources.Employee. El @RowCountparámetro de salida se usa para devolver el número de filas afectadas a una variable local. Se utiliza una expresión CASE en la cláusula SET para determinar condicionalmente el valor que se establece para VacationHours. Cuando al empleado se le paga por hora ( SalariedFlag= 0), VacationHoursse establece en el número de horas actual más el valor especificado en @NewHours; de lo contrario, VacationHoursse establece en el valor especificado en @NewHours.
Los ejemplos de esta sección muestran métodos para manejar los errores que pueden ocurrir cuando se ejecuta el procedimiento almacenado.
J. Usando TRY...CATCH
El siguiente ejemplo usa la construcción TRY...CATCH para devolver información de error capturada durante la ejecución de un procedimiento almacenado.
Los ejemplos de esta sección muestran cómo ofuscar la definición del procedimiento almacenado.
K. Uso de la opción WITH ENCRYPTION
El siguiente ejemplo crea el HumanResources.uspEncryptThisprocedimiento.
Se aplica a : SQL Server 2008 y posterior, Base de datos SQL.
La WITH ENCRYPTIONopción ofusca la definición del procedimiento al consultar el catálogo del sistema o usar funciones de metadatos, como se muestra en los siguientes ejemplos.
ejecutar sp_helptext:
Aquí está el conjunto de resultados.
The text for object 'HumanResources.uspEncryptThis' is encrypted.
Consulta directamente la sys.sql_modulesvista de catálogo:
Los ejemplos de esta sección utilizan la cláusula WITH RECOMPILE para obligar al procedimiento a volver a compilar cada vez que se ejecuta.
L. Uso de la opción WITH RECOMPILE
La WITH RECOMPILEcláusula es útil cuando los parámetros proporcionados al procedimiento no son típicos y cuando un nuevo plan de ejecución no debe almacenarse en memoria caché o memoria.
Los ejemplos de esta sección utilizan la cláusula EXECUTE AS para establecer el contexto de seguridad en el que se ejecuta el procedimiento almacenado.
M. Uso de la cláusula EXECUTE AS
El siguiente ejemplo muestra el uso de la cláusula EXECUTE AS para especificar el contexto de seguridad en el que se puede ejecutar un procedimiento. En el ejemplo, la opción CALLERespecifica que el procedimiento se puede ejecutar en el contexto del usuario que lo llama.
Este ejemplo muestra la sintaxis básica para crear y ejecutar un procedimiento. Al ejecutar un lote, CREATE PROCEDURE debe ser la primera declaración. Por ejemplo, para crear el siguiente procedimiento almacenado en AdventureWorksPDW2012 , configure primero el contexto de la base de datos y luego ejecute la instrucción CREATE PROCEDURE.