Vous êtes sur la page 1sur 8

SQL SERVER

Introduccin a los procedimientos almacenados Cuando crea una aplicacin con Microsoft SQL Server 2008, el lenguaje de programacin Transact-SQL es la principal interfaz de programacin entre las aplicaciones y la base de datos de Microsoft SQL Server. Cuando utiliza programas Transact-SQL, dispone de dos mtodos para almacenar y ejecutar los programas. Puede almacenar los programas localmente y crear aplicaciones que envan los comandos a SQL Server y procesan los resultados. Puede almacenar los programas como procedimientos almacenados en SQL Server y crear aplicaciones que ejecutan los procedimientos almacenados y procesan los resultados.

Los procedimientos almacenados de Microsoft SQL Server son similares a los procedimientos de otros lenguajes de programacin en el sentido de que pueden:

Aceptar parmetros de entrada y devolver varios valores en forma de parmetros de salida al lote o al procedimiento que realiza la llamada. Contener instrucciones de programacin que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos. Devolver un valor de estado a un lote o a un procedimiento que realiza una llamada para indicar si la operacin se ha realizado correctamente o se han producido errores (y el motivo de stos).

Puede utilizar la instruccin EXECUTE de Transact-SQL para ejecutar un procedimiento almacenado. Los procedimientos almacenados difieren de las funciones en que no devuelven valores en lugar de sus nombres ni pueden utilizarse directamente en una expresin.

Procedimientos almacenados Teoria

Utilizar procedimientos almacenados en SQL Server en vez de programas Transact-SQL almacenados localmente en equipos cliente presenta las siguientes ventajas: Se registran en el servidor. Pueden incluir atributos de seguridad (como permisos) y cadenas de propiedad; adems se les pueden asociar certificados. Los usuarios pueden disponer de permiso para ejecutar un procedimiento almacenado sin necesidad de contar con permisos directos en los objetos a los que se hace referencia en el procedimiento. Mejoran la seguridad de la aplicacin. Los procedimientos almacenados con parmetros pueden ayudar a proteger la aplicacin ante ataques por inyeccin de cdigo SQL. Permiten una programacin modular. Puede crear el procedimiento una vez y llamarlo desde el programa tantas veces como desee. As, puede mejorar el mantenimiento de la aplicacin y permitir que las aplicaciones tengan acceso a la base de datos de manera uniforme. Pueden reducir el trfico de red. Una operacin que necesite centenares de lneas de cdigo Transact-SQL puede realizarse mediante una sola instruccin que ejecute el cdigo en un procedimiento, en vez de enviar cientos de lneas de cdigo por la red.

Crear procedimientos almacenados Puede crear procedimientos almacenados instruccin CREATE PROCEDURE de Transact-SQL. Antes de crearlos, tenga en cuenta lo siguiente: Las instrucciones CREATE PROCEDURE no se pueden combinar con otras instrucciones SQL en el mismo lote. Para crear procedimientos, debe disponer del permiso CREATE PROCEDURE en la base de datos y del permiso ALTER en el esquema donde se crea el procedimiento. Los procedimientos almacenados son objetos de mbito de esquema y sus nombres deben ajustarse a las reglas para los identificadores.
2

mediante

la

Procedimientos almacenados Teoria

Slo puede crear un procedimiento almacenado en la base de datos actual. Cuando cree un procedimiento almacenado, deber especificar lo siguiente: Todos los parmetros de entrada y de salida del lote o del procedimiento que realiza la llamada. Las instrucciones de programacin que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos. El valor de estado devuelto al lote o al procedimiento que realiza la llamada, a fin de indicar que la operacin se ha realizado correctamente o que se ha producido un error (y el motivo del mismo). Las instrucciones de control de errores necesarias para detectar y administrar posibles errores. Microsoft SQL Server 2005 presenta nuevas funciones de control de errores como ERROR_LINE y ERROR_PROCEDURE que se pueden especificar en el procedimiento almacenado.

Elementos esenciales del lenguaje Transact-Sql DECLARE @local_variable Las variables se declaran en el cuerpo de un proceso por lotes o procedimiento con la instruccin DECLARE, y se les asignan valores con una instruccin SET o SELECT. SET @local_variable= Establece el valor indicado en la variable local especificada, creada previamente con la instruccin DECLARE @local_variable. SELECT @local_variablel= Establece el valor indicado en la variable local especificada, creada previamente con la instruccin DECLARE @local_variable. GO Indica a las herramientas de Microsoft SQL Server el final de un lote de instrucciones Transact-SQL. No es una instruccin sino un comando que entienden las herramientas. BEGIN .... END Siempre que se necesite que se ejecuten varias instrucciones en conjunto deben ir encerradas entre las palabras claves BEGIN y END. Procedimientos almacenados Teoria
3

PRINT Permite imprimir informacin. PRINT {cualquier texto ASCII | @variable_local @@variable_global} IF...ELSE IF expresin_booleana {instruccin_sql | bloque_instrucciones} ELSE [expresin_booleana] {instruccin_sql | bloque_instrucciones} Ejemplo:

IF (datename(dw,getdate()) = Viernes) BEGIN PRINT Informe semanal EXEC spInformeSemanal END Se llama al procedimiento spInformeSemanal en caso de que hoy sea viernes. IF [NOT] EXISTS (SELECT instruccin) {instruccin_sql | bloque_instrucciones} [ELSE {instruccin_sql | bloque_instrucciones}] Ejecuta las instrucciones si la instruccin SELECT devuelve alguna fila. CASE Permite que la instruccin devuelva dependiendo del valor de una expresin. valores distintos,

CASE expresion WHEN expresion1 THEN expresion1nueva [[WHEN expresion2 THEN expresion2nueva] [...]] [ELSE expresionN] Ejemplo: SELECT title_id, type = CASE type WHEN business THEN Libro de negocio WHEN psychology THEN Libro de psicologia WHEN mod_cook THEN Libro de cocina moderna ELSE no conocido END

Procedimientos almacenados Teoria

FROM titles WHILE El lenguaje T-SQL tiene una instruccin WHILE que permite la ejecucin repetitiva hasta que se cumpla una condicin. El uso de esta instruccin est limitado en muchos casos ya que por naturaleza, SQL trabaja con conjuntos de filas. Por ejemplo, no necesita una instruccin WHILE para avanzar a travs de cada fila en una tabla; la instruccin SELECT avanza por todas las filas, comprobando sus criterios WHERE en cada fila. WHILE expresion_booleana {instruccin_sql | bloque_instrucciones} Ejemplo: WHILE (SELECT AVG(price) FROM titles) < 20) BEGIN UPDATE titles SET price=price*1.1 END Este ejemplo comprueba repetidamente el precio promedio de todos los libros. Mientras el promedio sea menor que 20, se actualiza el precio de cada libro. La repeticin se detendr cuando el precio promedio sea mayor o igual a 20.

RETURN Sale incondicionalmente de una consulta o procedimiento. RETURN es inmediata y completa, y se puede utilizar en cualquier punto para salir de un procedimiento, lote o bloque de instrucciones. Las instrucciones que siguen a RETURN no se ejecutan. RETURN [ integer_expression ] Programar procedimientos almacenados Parmetros y variables Los parmetros y las variables son una parte fundamental de hacer dinmico a un procedimiento almacenado. Los parmetros de entrada habilitan al usuario que est ejecutando el procedimiento a pasar valores al procedimiento almacenado. Los parmetros de salida amplan la salida de los procedimientos almacenados mas all del conjunto de resultados retornado por una consulta. Los datos desde Procedimientos almacenados Teoria
5

un parmetro de salida son capturados en memoria cuando el procedimiento se ejecuta. Para retornar un valor desde el parmetro de salida se debe crear una variable para que lo mantenga. Se puede mostrar el valor con los comando SELECT o PRINT, o usar el valor para completar otro comando en el procedimiento. En resumen, un parmetro de entrada se define en el procedimiento almacenado y un valor es provisto cuando el procedimiento se ejecuta. Un parmetro de salida se define usando la palabra clave OUTPUT. Cuando se ejecuta el procedimiento, se guarda en memoria un valor para el parmetro de salida. Para utilizarlo, se declara una variable para mantener al valor. El siguiente procedimiento parmetros, de salida y de entrada: muestra el uso de ambos

USE Pubs GO CREATE PROCEDURE dbo.VentasPorTitulo @Titulo varchar(80), --Parmetro de entrada @Ventas int OUTPUT, --Primer parmetro de salida @TextoTitulo varchar(80) OUTPUT Segundo parmetro salida AS -- Asigna la columna de datos a los parmetros de salida y -- controla por un ttulo que coincida con el parmetro de entrada SELECT @Ventas = ytd_sales, @TextoTitulo = title FROM titles WHERE title LIKE @Titulo GO

de

El parmetro de entrada es @Titulo, y los de salida son @Ventas y @TextoTitulo. Fjese que los tres parmetros tienen definidos sus tipos de datos. Los parmetros de salida incluye la palabra clave OUTPUT. Despus que se definen los parmetros, el comando SELECT utiliza a los tres parmetros. Primero, a los parmetros de salida se les asigna a las columnas de la consulta. Cuando se ejecuta la consulta, los parmetros de salida contendrn los valores de esas dos columnas. La clusula WHERE del comando SELECT contiene el parmetro de entrada, @Titulo. Cuando se ejecuta el procedimiento, se debe proveer un valor para el parmetro de entrada o fallar la consulta. El siguiente comando ejecuta el procedimiento almacenado que vimos: -- Declara variables para recibir las salidas del procedimiento DECLARE @y_YtdSales int, @t_TitleText varchar(80) Procedimientos almacenados Teoria
6

EXECUTE SalesForTitle -- configura los valores de variables con los parmetros de salida @Ventas = @y_YtdSales OUTPUT, @TextoTitulo = @t_TitleText OUTPUT, @Titulo =%Garlic%especifica un valor para el parmetro de entrada -- Muestra las variables retornadas por el procedimiento SELECT Title = @t_TitleText, Nmero de Ventas = @y_YtdSales GO Se declaran dos variables: @y_YtdSales y @t_TitleText. Estas dos variables recibirn los valores almacenados en los parmetros de salida. Advierta que el tipo de datos de la variables que reciben son los mismos que los tipos de los correspondientes parmetros de salida. Estas dos variables pueden tener el mismo nombre que los parmetros de salida correspondientes dado que las variables en un procedimiento almacenado son locales al batch que las contiene. Por claridad, los nombres de las variables son diferentes a los de los parmetros de salida. Cuando se declara una variable, esta no se asigna con un parmetro de salida. Las variables son asignadas con parmetros de salida despus del comando EXECUTE. Fjese que la palabra OUTPUT se indica cuando el parmetro se asigna a la variable. Si no se especifica OUTPUT, la variable no puede mostrar los valores en el comando SELECT al final del cdigo. Por ultimo, el parmetro de entrada @Titulo es igualado a %Garlic%. Este valor se enva a la clusula WHERE del comando SELECT del procedimiento almacenado. En la clusula WHERE se pueden usar caracteres comodines (tal como %) para que que la consulta busque aquellos ttulos que contienen la palabra Garlic. A continuacin se muestra un modo mas sucinto de ejecutar el procedimiento. Fjese que no es necesario asignar especficamente las variables desde el procedimiento almacenado al valor del parmetro de salida o a las variables de salida declaradas aqu: DECLARE @y_YtdSales int, @t_TitleText varchar(80) EXECUTE SalesForTitle %Garlic%, -- configura el valor del parmetro de entrada @y_YtdSales OUTPUT -- recibe el primer parmetro de salida @t_TitleText OUTPUT -- recibe el segundo parmetro de salida -- muestra las procedimiento variables retornadas por la ejecucin del

SELECT Title = @t_TitleText, Nmero de ventas = @y_YtdSales Procedimientos almacenados Teoria


7

GO Cuando se ejecuta el procedimiento, este retorna lo siguiente: Title NULL Number Return of Sales NULL

Un interesante resultado de este procedimiento es que se retorna slo una fila. An cuando el comando SELECT en el procedimiento devuelve mltiples filas, cada variable mantiene slo un valor (la ltima fila de datos retornada). FUNCIONES DE SISTEMA Hay funciones de sistema que no tienen parmetros y comienzan con @@. Estas funciones no son variables globales porque no puedes declararlas y asignarles un valor a ellas. Estas funciones son controladas por SQL SERVER. Return Value Number of connections to SQL Server since the service was started. @@ERROR Error code of the last statement executed (if it succeeded, it returns 0). @@IDENTITY Last identity value inserted in the current session. @@MAX_CONNECTIONS Maximum number of connections allowed. @@OPTIONS Information about set options in the current session. @@ROWCOUNT Number of rows affected by the last statement executed. @@SERVERNAME Name of the server where SQL Server is installed. @@SPID ID Of the current process. @@VERSION Current version of SQL Server. System Function @@CONNECTIONS

Procedimientos almacenados Teoria

Vous aimerez peut-être aussi