MANUALITO MS-SQL SERVER



Documentos relacionados
Triggers. Introducción

Tema: Disparadores Parte I.

SQL (Structured Query Language)

10 - Desencadenadores.

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

9- Procedimientos almacenados.

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

CONSULTAS BASICAS EN SQL SERVER

Base de datos Procedimientos Almacenados y Funciones

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

6. PROGRAMACIÓN CON TRANSACT-SQL

Trabajos de Ampliación. Bases de datos NoSQL.

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

T12 Vistas y tablas temporales

Administradores de Bases de Datos Studio.NET 2005 Y SQL Server Barrios

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 )

Oracle 12c DISEÑO Y PROGRAMACIÓN

ADMINISTRACIÓN DE BASE DE DATOS

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Vistas en postgresql

Formato para prácticas de laboratorio

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

Diseño de bases de datos

Formato para prácticas de laboratorio

Tema 4. Manipulación de datos con SQL

Un ejemplo teórico de trigger podría ser éste:

1. DML. Las subconsultas

1

MANUAL BÁSICO DEL LENGUAJE SQL

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

Formato para prácticas de laboratorio

A.1. Definiciones de datos en SQL

Tutorial: Primeros Pasos con Subversion

Microsoft SQL Server 2005

Base de datos relacional

Consultas con combinaciones

Conectar Flash con Access usando MDM Zinc

INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Tema: PROCEDIMIENTOS ALMACENADOS.

Acceso a bases de datos MySQL con PHP

CURSORES EN SQL SERVER

BASES DE DATOS EN VISUAL BASIC ACCESS + SQL

BASES DE DATOS SQL MÁS S DE SQL (DML) OPERADOR UNION (L30) <SELECT1> UNION <SELECT2> UNION <SELECTN> Copyright 2006, 2007 Instituto Gala

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos.

PRÁCTICA III. DISPARADORES EN SQL (II)

Enlaces relacionados:

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Bases de Datos Relacionales

Bases de datos relacionales y el modelo entidad-relación

TUTORIAL OPERADOR CUBE

ST31_Querying Microsoft SQL Server

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

Capítulo 9. Archivos de sintaxis

Programación SQL. Lucio Salgado Diciembre 2008

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

ENVIO SMS A TRAVÉS DE WEB

Bases de Datos Relacionales

8 SQL SERVER 2008 RA-MA

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

ÍNDICE PRIMERA PARTE... 17

TUTORIAL SQL. Aprendiendo SQL

GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

Recuperador datos externos

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

Sub consultas avanzadas

5- Uso de sentencias avanzadas

ANSI SQL El lenguaje SQL...2 Componentes del lenguaje SQL...3 Tablas...7 Índices...11 Vistas...13 Consultar datos. SELECT...15

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Curso Oficial Microsoft: LENGUAJE DE CONSULTA DE SQL SERVER. Duración : 35 Hrs.

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

Uso de las herramientas de consulta de Transact-SQL

Ejercicios - Persistencia en Android: ficheros y SQLite

Procedimientos Almacenados con InterBase

Modelos y Bases de Datos

Procedimientos almacenados con parametros de salida

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Tutorial Oracle SQL Developer 1.2.1

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

PRACTICA DE ADMINISTRACION DE BASES DE DATOS

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

Curso Online de Microsoft

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

Base de datos Lenguaje SQL

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h

U.E JUAN DE VELASCO CREAR DATOS EN SQL

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

Transcripción:

MANUALITO MS-SQL SERVER Contenido 1. Crear Store Procedures en MS SQL Server... 1 2. Crear Triggers en MS SQL Server... 5 3. Crear Vistas en MS SQL Server... 9 1. Crear Store Procedures en MS SQL Server Si lo hacemos por el Enterprise Manager, encima de la base de datos, desplegaremos la carpeta de storeds, botón derecho y "New Stored Procedure" El Enterprise Manager por defecto pone: CREATE PROCEDURE [OWNER].[PROCEDURE NAME] Un store procedure o procedimiento almacenado es un programa dentro de la base de datos que ejecuta una acción o conjunto de acciones específicas. Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código. Los procedimientos almacenados pueden devolver valores (numérico entero) o conjuntos de resultados. Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE. CREATE PROCEDURE <nombre_procedure> [@param1 <tipo>,...] -- Sentencias del procedure Para modificar un procedimiento almacenado debemos emplear la sentencia ALTER PROCEDURE. ALTER PROCEDURE <nombre_procedure> [@param1 <tipo>,...]

-- Sentencias del procedure El siguiente ejemplo muestra un procedimiento almacenado, denominado spu_addcliente que inserta un registro en la tabla "CLIENTES". CREATE PROCEDURE spu_addcliente @nombre varchar(100),@apellido1 varchar(100),@apellido2 varchar(100),@codclivarchar(20),@fxnaciento datetime INSERT INTO CLIENTES(nombre, apellido1, apellido2, codcli, fxnacimiento) VALUES (@nombre, @apellido1, @apellido2, @codcli, @fxnaciento) Para ejecutar un procedimiento almacenado debemos utilizar la sentencia EXEC. Cuando la ejecución del procedimiento almacenado es la primera instrucción del lote, podemos omitir el uso de EXEC. El siguiente ejemplo muestra la ejecución del procedimiento almacenado anterior. DECLARE @fecha_nacimiento datetime set @fecha_nacimiento = convert(datetime, '29/12/1976', 103) EXEC spu_addcliente 'David', 'Sarmiento', 'Cervantes', '00000002323', @fecha_nacimiento Siempre es deseable que las instrucciones del procedure estén dentro de un bloque TRY CATCH y controlados por una transacción. ALTER PROCEDURE spu_addcliente @nombre varchar(100),@apellido1 varchar(100),@apellido2 varchar(100),@codclivarchar(20),@fxnaciento datetime TRY TRAN INSERT INTO CLIENTES(nombre, apellido1, apellido2, codcli, fxnacimiento) VALUES(@nombre, @apellido1, @apellido2, @codcli, @fxnaciento) COMMIT TRY

CATCH ROLLBACK PRINT ERROR_MESSAGE() CATCH Si queremos que los parámetros de un procedimiento almacenado sean de entrada-salida debemos especificarlo a través de la palabra clave OUTPUT, tanto en la definición del procedure como en la ejecución. El siguiente ejemplo muestra la definición de un procedure con parámetros de salida. CREATE PROCEDURE spu_obtenersaldocuenta @numcuenta varchar(20), @saldo decimal(10,2) output SELECT @saldo = SALDO FROM CUENT WHERE NUMCUENTA = @numcuenta Y para ejecutar este procedure: DECLARE @saldo decimal(10,2) EXEC spu_obtenersaldocuenta '200700000001', @saldo output PRINT @saldo Un procedimiento almacenado puede devolver valores numéricos enteros a través de la instrucción RETURN. Normalmente debemos utilizar los valores de retorno para determinar si la ejecución del procedimiento ha sido correcta o no. Si queremos obtener valores se recomienda utilizar parámetros de salida o funciones escalares. El siguiente ejemplo muestra un procedimiento almacenado que devuelve valores. CREATE PROCEDURE spu_estaennumerosrojos @numcuenta varchar(20)

IF (SELECT SALDO FROM CUENT WHERE NUMCUENTA = @numcuenta) < 0 RETURN 1 ELSE RETURN 0 El siguiente ejemplo muestra como ejecutar el procedure y obtener el valor devuelto. DECLARE @rv int EXEC @rv = spu_estaennumerosrojos '200700000001' PRINT @rv Otra característica interesante de los procedimientos almacenados es que pueden devolver uno o varios conjuntos de resultados. El siguiente ejemplo muestra un procedimiento almacenado que devuelve un conjunto de resultados. CREATE PROCEDURE spu_movimientoscuenta @numcuenta varchar(20) SELECT @numcuenta, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO FROM MOVIMIENTOS INNER JOIN CUENT ON MOVIMIENTOS.IDCUENTA = CUENT.IDCUENTA WHERE NUMCUENTA = @numcuenta ORDER BY FXMOVIMIENTO DESC La ejecución del procedimiento se realiza normalmente. EXEC spu_movimientoscuenta '200700000001'

El resultado de la ejecución: NUMCUENTA SALDO_ANTERIOR SALDO_POSTERIOR IMPORTE FXMOVIMIENTO ------------ -------------- ---------------- ------- ----------------------- 200700000001 50.99 100.99 50.00 2007-08-25 16:18:36.490 200700000001 0.99 50.99 50.00 2007-08-23 16:20:41.183 200700000001 50.99 0.99 50.00 2007-08-23 16:16:29.840 200700000001 0.99 50.99 50.00 2007-08-23 16:14:05.900 2. Crear Triggers en MS SQL Server Un trigger (o desencadenador) es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos. SQL Server proporciona los siguientes tipos de triggers: o Trigger DML, se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. o Trigger DDL, se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. Trigger DML. Los trigger DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. La sintaxis general de un trigger es la siguiente: CREATE TRIGGER <Trigger_Name, sysname, Trigger_Name> ON <Table_Name, sysname, Table_Name> AFTER <Data_Modification_Statements,, INSERT,DELETE,UPDATE> -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for trigger here

Antes de ver un ejemplo es necesario conocer las tablas inserted y deleted. Las instrucciones de triggers DML utilizan dos tablas especiales denominadas inserted y deleted. SQL Server 2005 crea y administra automáticamente ambas tablas. La estructura de las tablas inserted y deleted es la misma que tiene la tabla que ha desencadenado la ejecución del trigger. La primera tabla (inserted) solo está disponible en las operaciones INSERT y UPDATE y en ella están los valores resultantes después de la inserción o actualización. Es decir, los datos insertados. Inserted estará vacía en una operación DELETE. En la segunda (deleted), disponible en las operaciones UPDATE y DELETE, están los valores anteriores a la ejecución de la actualización o borrado. Es decir, los datos que serán borrados. Deleted estará vacía en una operación INSERT. No existe una tabla UPDATED? No, hacer una actualización es lo mismo que borrar (deleted) e insertar los nuevos (inserted). La sentencia UPDATE es la única en la que inserted y deleted tienen datos simultáneamente. No se puede modificar directamente los datos de estas tablas. El siguiente ejemplo, graba un histórico de saldos cada vez que se modifica un saldo de la tabla cuentas: CREATE TRIGGER TR_CUENT ON CUENT AFTER UPDATE -- SET NOCOUNT ON impide que se generen mensajes de texto -- con cada instrucción SET NOCOUNT ON; INSERT INTO HCO_SALDOS(IDCUENTA, SALDO, FXSALDO) SELECT IDCUENTA, SALDO, getdate()from INSERTED La siguiente instrucción provocará que el trigger se ejecute: UPDATE CUENT SET SALDO = SALDO + 10 WHERE IDCUENTA = 1

Una consideración a tener en cuenta es que el trigger se ejecutará aunque la instrucción DML (UPDATE, INSERT o DELETE) no haya afectado a ninguna fila. En este caso inserted y deleted devolverán un conjunto de datos vacío. Podemos especificar a qué columnas de la tabla debe afectar el trigger. ALTER TRIGGER TR_CUENT ON CUENT AFTER UPDATE -- SET NOCOUNT ON impide que se generen mensajes de texto -- con cada instrucción SET NOCOUNT ON; IF UPDATE(SALDO) -- Solo si se actualiza SALDO INSERT INTO HCO_SALDOS(IDCUENTA, SALDO, FXSALDO) SELECT IDCUENTA, SALDO, getdate() FROM INSERTED Los trigger están dentro de la transacción original (Insert, Delete o Update) por lo cual si dentro de nuestro trigger hacemos un RollBack Tran, no solo estaremos echando atrás nuestro trigger sino también toda la transacción; en otras palabras si en un trigger ponemos un RollBack Tran, la transacción de Insert, Delete o Update volverá toda hacia atrás. ALTER TRIGGER TR_CUENT ON CUENT AFTER UPDATE

-- SET NOCOUNT ON impide que se generen mensajes de texto -- con cada instrucción SET NOCOUNT ON; INSERT INTO HCO_SALDOS (IDCUENTA, SALDO, FXSALDO) SELECT IDCUENTA, SALDO, getdate() FROM INSERTED ROLLBACK En este caso obtendremos el siguiente mensaje de error: La transacción terminó en el desencadenador. Se anuló el lote. Podemos activar y desactivar Triggers a través de las siguientes instrucciones. -- Desactiva el trigger TR_CUENT DISABLE TRIGGER TR_CUENT ON CUENT GO -- activa el trigger TR_CUENT ENABLE TRIGGER TR_CUENT ON CUENT GO -- Desactiva todos los trigger de la tabla CUENT ALTER TABLE CUENT DISABLE TRIGGER ALL GO -- Activa todos los trigger de la tabla CUENT ALTER TABLE CUENT ENABLE TRIGGER ALL

Trigger DDL Los trigger DDL se ejecutan en respuesta a una variedad de eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. La sintaxis general de un trigger es la siguiente: CREATE TRIGGER <trigger_name, sysname, table_alter_drop_safety> ON DATABE FOR <data_definition_statements,, DROP_TABLE, ALTER_TABLE>... La siguiente instrucción impide que se ejecuten sentencias DROP TABLE y ALTER TABLE en la base de datos. CREATE TRIGGER TR_SEGURIDAD ON DATABE FOR DROP_TABLE, ALTER_TABLE RAISERROR ('No está permitido borrar ni modificar tablas!', 16, 1) ROLLBACK TRANSACTION 3. Crear Vistas en MS SQL Server En el modelo de datos relacional la forma de guardar la información no es la mejor para ver los datos. Una vista es una consulta, que refleja el contenido de una o más tablas, desde la que se puede acceder a los datos como si fuera una tabla. Dos son las principales razones por las que podemos crear vistas. o Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la información que hay en una tabla, pero no a toda la tabla. o Comodidad, como hemos dicho el modelo relacional no es el más cómodo para visualizar los datos, lo que nos puede llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea. Las vistas no tienen una copia física de los datos, son consultas a los datos que hay en las tablas, por lo que si actualizamos los datos de una vista, estamos actualizando realmente la tabla, y si actualizamos la tabla estos cambios serán visibles desde la vista.

Nota: No siempre podremos actualizar los datos de una vista, dependerá de la complejidad de la misma (dependerá de si el conjunto de resultados tiene acceso a la clave principal de la tabla o no), y del gestor de base de datos. No todos los gestores de bases de datos permiten actualizar vistas, ORACLE, por ejemplo, no lo permite, mientras que SQL Server sí. Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT válida. CREATE VIEW <nombre_vista> (<sentencia_select>); Ejemplo: Crear una vista sobre nuestra tabla alquileres, en la que se nos muestre el nombre y apellidos del cliente en lugar de su código. CREATE VIEW valquileres ( SELECT nombre, apellidos, matricula FROM talquileres, tclientes WHERE ( talquileres.codigo_cliente = tclientes.codigo ) ) Si queremos, modificar la definición de nuestra vista podemos utilizar la sentencia ALTER VIEW, de forma muy parecida a como lo hacíamos con las tablas. En este caso queremos añadir los campos fx_alquiler y fx_devolucion a la vista. ALTER VIEW valquileres ( SELECT nombre, apellidos, matricula, fx_alquiler, fx_devolucion FROM talquileres, tclientes WHERE ( talquileres.codigo_cliente = tclientes.codigo ) ) Por último podemos eliminar la vista a través de la sentencia DROP VIEW. Para eliminar la vista que hemos creado anteriormente se utilizaría: DROP VIEW valquileres; Una vista se consulta como si fuese una tabla. Para mayores referencias sobre MS SQL Server consultar: http://technet.microsoft.com/es-es/library/default.aspx