Está en la página 1de 15

TRANSACT SQL

SQL SERVER

ING HENRY VILLARREAL

Ing Henry Villarreal Torres

PROYECTO: FARMACIA CHIMBOTE S.A.C. Comercial Chimbote S.A.C. es una empresa que se dedica a la comercializacin de diversos productos, donde la atencin al cliente se describe a continuacin: El cliente anota su pedido y es anotado en una hoja de pedido. Se verifica en el almacn si existe stock del pedido del cliente. Si no existe problema de stock, se procede a elaborar la boleta o factura, y el documento pasa a caja. Si hay problema de stock, se realiza las correcciones respectivas en la hoja de pedido, y pasamos al segundo paso. El cliente pasa a caja a cancelar. Con el documento cancelado el cliente pasa a despacho a recoger sus productos.

En estos momentos todo el procedimiento de atencin al cliente es manual por lo que se tiene los siguientes problemas: Atencin lenta. No se tiene un control de stock adecuado, por lo tanto nunca se sabe cuanto es el stock real de cada artculo. Control de ingresos manual, por lo que el cierre de caja lleva muchas horas. La elaboracin de informes para el gerente es lenta ya que todo tipo de resumen del da es manual. No existe ningn tipo de estadsticas para la toma de decisiones futuras.

La empresa atiende a un promedio de 30 personas por hora con tendencia a incrementar, por lo que es necesario implementar un sistema informtico. REGLAS DEL NEGOCIO Las reglas del negocio son un conjunto de condiciones que la organizacin pone para realizar sus transacciones con sus clientes. Para este proyecto las condiciones son mnimas: Solo compra con factura a sus proveedores. Vende con factura o boleta. Solo vende al contado y en efectivo. Cuando el cliente compra ms de seis unidades se aplica un descuento que se define para cada artculo.

Ing Henry Villarreal Torres

MODELO LOGICO DE LA BASE DE DATOS Para llegar a un modelo lgico de la base de datos es necesario antes realizar algunos pasos a tener en consideracin para el respectivo modelado. 1. 2. 3. 4. 5. 6. Recopilar informacin de las persona que trabajan en la empresa. Recolectar una copia de los diferentes tipos de documentos que utiliza la empresa, involucrados en el proceso. Informarse de las proyecciones que tiene la empresa para el futuro. Identificar las entidades y sus relaciones. Identificar los atributos de cada entidad. Normalizar el modelo de datos.

En este caso son pocos pasos y aparentemente sencillos, pero es importante comentar que en muchas empresas se requiere de personal altamente calificado y con experiencia para realizar el anlisis, cuyos factores pueden ser: Tamao de la empresa. Volumen de informacin. Reglas de negocio bastante complejas.

A continuacin se muestra el modelo de datos que se ha diseado para nuestro caso.

Empresa IdEmpresa NomEmpresa RUC DirEmpresa TelEmpresa Contacto Cliente Proveedor char(6) <pk> varchar(40) char(8) varchar(40) varchar(8) varchar(35) int int FK_Documento_Empresa

Documento IdDocumento Numero IdVendedor IdEmpresa IdTipoDoc Fecha SubTotal Impuesto Total int varchar(20) char(6) char(6) int datetime money money money <pk> <fk3> <fk1> <fk2>

Vendedor IdVendedor ApeVendedor NomVendedor DirVendedor TelVendedor char(6) <pk> varchar(20) varchar(20) varchar(40) char(8) FK_Documento_Vendedor

FK_Detalle_Documento TipoDoc IdTipoDoc DesTipoDoc Accion Serie Contador int <pk> varchar(20) varchar(10) int int

FK_Documento_TipoDoc

Detalle IdDocumento IdArticulo Cantidad PreVenta SubTotal Dscto int <pk,fk2> char(8) <pk,fk1> int money money money

FK_Detalle_Articulo

Articulo IdArticulo IdUnidad IdLinea DesArticulo Stock PreCosto PreVenta Dscto Comentarios char(8) <pk> varchar(5) <fk2> int <fk1> varchar(35) int money money money text

FK_Articulo_Linea

FK_Articulo_Unidad

Linea IdLinea DesLinea Prefijo Contador int <pk> varchar(35) char(3) int

Unidad IdUnidad varchar(5) <pk> DesUnidad varchar(20)

Control Parametro varchar(20) Valor varchar(35)

Ing Henry Villarreal Torres

ESTANDARIZACIN DE LA BASE DE DATOS Debemos tener en cuenta que cuando realizamos el modelo de una base de datos cumpla con un mnimo de objetivos bsicos, que se muestran a continuacin: 1. 2. 3. 4. Debe almacenar toda la informacin de la actividad de la empresa para la cual esta diseada. No debe de guardar informacin redundante. Hay casos en los que es necesario para facilitar las otras operaciones, pero debe ser bien analizado. Debe de ser de fcil mantenimiento. Las inserciones, actualizaciones y modificaciones no deben ser complejas desde el punto de vista de la programacin. Debe de ser de fcil consulta. Se deseamos obtener cierta informacin debe ser en base a una consulta sencilla, o en todo caso las operaciones a realizar no deben ser complejas, en algunos casos las operaciones a realizar no se puede evitar la complejidad, pero hay que tratar de minimizarla. Generalmente el desarrollo de un sistema recae sobre el equipo, cuando hablamos sobre estandarizacin de la base de datos, nos referimos al conjunto de criterios que asume el equipo de trabajo como normas para el desarrollo del sistema. Esto quiere decir que no todos los equipos de trabajo tienen los mismos estndares, puede que coincida en alguno de ellos, pero no es una norma. Estandarizar una base de datos trae muchas ventajas, y alguna de ellas son: Todas las personas de equipo desarrollan el sistema asumiendo los mismos criterios. Si alguien del equipo tiene que retirarse por alguna razn, cualquier otra persona del equipo puede reemplazarlo. Es fcil que una persona nueva se integre al grupo.

Ing Henry Villarreal Torres

CREACION DE LA BASE DE DATOS SINTAXIS: CREATE DATABASE Nombre Base Datos ON PRIMARY (NAME = Nombre Lgico Data, FILENAME = Ubicacin y Nombre del Archivo, SIZE = Tamao en MB, MAXSIZE = Tamao Mximo en MB, FILEGROWTH = Incremento/Crecimiento) LOG ON (NAME = Nombre Lgico Log, FILENAME = Ubicacin y Nombre del Archivo, SIZE = Tamao en MB, MAXSIZE = Tamao Mximo en MB, FILEGROWTH = Incremento/Crecimiento) Donde: Nombre Base Datos: Es el nombre de la nueva base de datos. Los nombres de base de datos deben ser nicos en un servidor y deben seguir las reglas de los identificadores. Nombre Lgico Data, Nombre Lgico Log: Es el nombre utilizado para hacer referencia al archivo en las instrucciones Transact-SQL que se ejecuten despus de que se haya creado la base de datos. Ejemplo: CREATE DATABASE Data ON (NAME = Data, FILENAME = 'C:\ProyPB80\Data\Data_dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON (NAME = 'Data_log', FILENAME = ' C:\ProyPB80\Data\Data_log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB) Ubicacin y Nombre del Archivo: Es la ruta de acceso y nombre de archivo. La ruta debe de especificar una carpeta existente en el servidor en el que est instalado SQL Server. Tamao en MB: Especifica el tamao del archivo. Tamao Mximo en MB: Es el mximo tamao que puede alcanzar el archivo si se requiere de espacio adicional. Incremento/Crecimiento: Es la cantidad de espacio que se aade al archivo cada vez que se necesita espacio adicional. Se puede especificar en MB o en Porcentaje.

Ing Henry Villarreal Torres

CREACION DE TABLAS SINTAXIS: CREATE TABLE NOMBRE TABLA( Nombre Columna 1 Nombre Columna 2 Nombre Columna 2 Nombre Columna 2 Donde: Ejemplo: CREATE TABLE TipoDoc ( IdTipoDoc DesTipoDoc Accion Serie Contador ) CREATE TABLE Unidad ( IdUnidad DesUnidad ) CREACION DE CLAVES PRIMARIAS SINTAXIS: ALTER TABLE NOMBRE TABLA DD PRIMARY KEY (LISTA DE COLUMNAS) Donde: Ejemplo: ALTER TABLE TipoDoc ADD PRIMARY KEY (IdTipoDoc) ALTER TABLE Unidad ADD PRIMARY KEY (IdUnidad) Nombre Tabla: Nombre de la tabla a adicionar la clave primaria. Lista de Columnas: Es la columna o lista de columnas separadas por coma, que conforman la clave primaria. varchar(5) NOT NULL, varchar(20) NOT NULL int IDENTITY, varchar(20) NOT NULL, varchar(10) NOT NULL, int NOT NULL, int NOT NULL Nombre Tabla: Especifica el nombre de la tabla. Nombre Columna: Especifica el nombre del atributo de la entidad. Propiedades: Especifica el tipo de dato, si se permite valores nulos, o si es una nueva columna IDENTITY. Propiedades, Propiedades, Propiedades, Propiedades,

PRIMARY KEY (NOMBRE COLUMNA) )

Ing Henry Villarreal Torres

CREACION DE CLAVES FORANEAS SINTAXIS: ALTER TABLE NOMBRE TABLA ADD FOREIGN KEY (LISTA DE COLUMNAS) REFERENCE NOMBRE TABLA REFERENCIADA Donde: Ejemplo: ALTER TABLE Articulo ADD FOREIGN KEY (IdUnidad) REFERENCES Unidad ALTER TABLE Articulo ADD FOREIGN KEY (IdLinea) REFERENCES Linea INGRESO DE DATOS SINTAXIS: INSERT INTO NOMBRE TABLA (LISTA COLUMNAS) VALUES (LISTA DATOS) Donde: Ejemplo: Insert Into Linea( DesLinea, Prefijo, Contador ) Values( 'Granos', 'GRA', 5 ) Insert Into Linea( DesLinea, Prefijo, Contador ) Values( 'Licores', 'LIC', 5 ) Insert Into Linea( DesLinea, Prefijo, Contador ) Values( 'Bebidas Gaseosas', 'GAS', 1 ) Insert Into Linea( DesLinea, Prefijo, Contador ) Values( 'Artefactos Electrodomsticos', 'ART', 1 ) ACTUALIZACION DE DATOS SINTAXIS: UPDATE NOMBRE TABLA SET COLUMNA1 = EXPRESION1, COLUMNA2 = EXPRESION2, WHERE CONDICION Nombre Tabla: Nombre de la tabla donde se insertan los datos. Lista de Columnas: Especifica las columnas donde se insertaran los datos. Lista de Datos: Especifica los datos que se insertarn las columnas. Nombre Tabla: Nombre de la tabla donde se define la restriccin FOREIGN KEY. Lista de Columnas: Es la columna o lista de columnas separadas por coma, que conforman la FOREIGN KEY. Nombre Tabla Referenciada: Es el nombre de la tabla a la que se hace referencia la restriccin FOREIGN KEY.

Ing Henry Villarreal Torres

Donde: Ejemplo: UPDATE Articulo SET PreCosto = PreCosto + 1.5, PreVenta = PreVenta + 1.5, WHERE IdArticulo = LIC00003 ELIMINAR DATOS SINTAXIS: DELETE FROM NOMBRE TABLA WHERE CONDICION Donde: Ejemplo: DELETE FROM Articulo WHERE IdArticulo = LIC00003 CONSULTAR DATOS SINTAXIS: SELECT LISTA COLUMNAS FROM NOMBRE TABLA WHERE CONDICION Donde: Ejemplo: SELECT * FROM Articulo WHERE PreCosto > 100 Lista Columnas: Especifica la columnas que deseamos consultar, estas deben estar separadas por comas. Nombre Tabla: Nombre de la tabla que queremos consultar los datos. Condicin: Especifica la condicin que debe cumplir las filas que se van a consultar. Nombre Tabla: Nombre de la tabla que queremos eliminar los datos. Condicin: Especifica la condicin que debe cumplir las filas que se van a eliminar. Nombre Tabla: Nombre de la tabla que queremos actualizar. Columna: Especifica las columnas que queremos actualizar su valor. Expresin: Representa el nuevo valor que tomar la columna. Condicin: Especifica la condicin que debe cumplir las filas que se van a actualizar.

Ing Henry Villarreal Torres

PROCEDIMIENTOS ALMACENADOS Cuando se crea una aplicacin con SQL Server, el lenguaje de programacin Transac SQL es la principal interfaz de programacin entre sus aplicaciones y la base de datos de SQL Server. Cuando utilice programas Transac SQL, dispone de dos mtodos para almacenar y ejecutar los programas. Puede almacenar localmente los programas y crear aplicaciones que enven los comandos a SQL Server y procesen los resultados, o bien almacenar los programas como procedimientos almacenados en SQL Server y crear aplicaciones que ejecuten los procedimientos almacenados y procesen resultados. Un procedimiento almacenado es una coleccin precompilada de instrucciones de Transac SQL almacenados bajo un nombre y procesados como una unidad. Los procedimientos almacenados de SQL Server son similares a los procedimientos de otros lenguajes de programacin. Las ventajas que pueden utilizar los procedimientos almacenados en SQL Server en vez de programas Transac SQL almacenados localmente en equipos clientes consiste en: Permite una programacin modular: puede crear el procedimiento una vez, almacenarlo en la base de datos, y llamarlo desde el programa el nmero de veces que desee. Permite una ejecucin mas rpida: en situaciones en las que se necesita una gran cantidad de cdigo Transac SQL, o si las operaciones se realizan varias veces, los procedimientos almacenados pueden ser mas rapidos que los lotes de codigo Transac SQL los procedimientos son analizados y optimizados en el momento de su creacin. Pueden reducir el trafico de la red: una operacin que necesite centenares de linea de codigo Transac SQL puede realizarse mediante una sola instruccin que ejecute el codigo en solo procedimiento, ne veces de enviar cientos de lineas de codigo por la red. Puede utilizarse como mecanismo de seguridad: es posible conceder permisos a los usuarios para ejecutar un procedimiento almacenado, incluso si no cuenta con permiso para ejecutar directamente las instrucciones del procedimiento. CREAR UN PROCEDIMIENTO ALMACENADO Puede crear procedimientos almacenados mediante la instruccin CREATE PROCEDURE de Transac SQL. Antes de crear un procedimiento almacenado tenga en cuenta lo siguiente: Las instrucciones CREATE PROCEDURE no se pueden combinar con otras instrucciones SQL en el mismo lote. De forma predeterminada el permiso para crear procedimientos almacenados corresponde al propietario de la base de datos, que puede transferirlos a otros usuarios. Los procedimientos almacenados son objetos de base de datos y sus nombres deben ajustarse a las reglas para los identificadores. Solo puede crear procedimientos almacenados en la base de datos actual.

Ing Henry Villarreal Torres

Cuando cree un procedimiento almacenado deber especificar lo siguiente: Todos los parmetros de entrada y 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, al procedimiento o la aplicacin que se realiza la llamada para indicar que la operacin sea realizado correctamente o sea producido un error (y el motivo del mismo). PROCEDIMIENTOS ALMACENADOS DEL SISTEMA Muchas de las actividades administrativas se realizan mediante un tipo especial de procedimiento denominado procedimiento almacenado del sistema. Los procedimientos almacenados del sistema se crean y se almacenan en la base de datos master con el prefijo sp_. Estos procedimientos se pueden ejecutar desde cualquier base de datos sin necesidad de calificar totalmente el nombre del procedimiento almacenado mediante el nombre de la base de datos master. PROGRAMAR PROCEDIMIENTOS ALMACENADOS Casi cualquier instruccin Transac SQL se pueda escribirse como un lote puede utilizarse para crearse un procedimiento almacenado. Sin embargo, entre las reglas para la programacin de procedimientos almacenados, cabe citar las siguientes: La instruccin CREATE PROCEDURE puede incluir cualquier numero y tipo de instrucciones SQL excepto la instruccin CREATE. Se puede crear otros objetos de base de datos dentro de un procedimiento almacenado. Se puede hacer referencia a un objeto creado en el mismo procedimiento almacenado, siempre que se cree antes de que se haga referencia al objeto. Puede hacer referencia a tablas temporales dentro de un procedimiento almacenado. Si crea una tabla temporal privada dentro de un procedimiento almacenado, la tabla existir para los fines de procedimiento. Desaparecer cuando este finalice. Se ejecuta un procedimiento almacenado que llama a otro procedimiento almacenado, el procedimiento al que se llama puede tener acceso a todos los objetos creados por el primer procedimiento, incluidas las tablas temporales. El numero mximo de parmetros en un procedimiento almacenado es de 1024. El numero mximo de variable locales en un procedimiento almacenado esta limitado nicamente por la memoria disponible. En funcion de la memoria disponible el tamao mximo de un procedimiento almacenado es de 128MB.

Ing Henry Villarreal Torres

10

SINTAXIS: CREATE PROCEDURE NOMBRE PROCEDIMIENTO AS SENTENCIAS SQL CREATE PROCEDURE NOMBRE PROCEDIMIENTO @PARAMETRO1 TIPO DATO [=VALOR], @PARAMETRO2 TIPO DATO [=VALOR], AS SENTENCIA SQL CREATE PROCEDURE NOMBRE PROCEDIMIENTO @PARAMETRO1 TIPO DATO [=VALOR], @PARAMETRO2 TIPO DATO [=VALOR] OUTPUT, AS SENTENCIA SQL Ejemplos: CREATE PROCEDURE sp_ListaArticulos AS SELECT L.DesLinea, A.DesArticulo, A.PreCosto, A.PreVenta FROM Linea L INNER JOIN Articulo A ON L.IdLinea = A.IdLinea EXECUTE sp_ListaArticulos CREATE PROCEDURE sp_Ventas @IdEmp Char(6) AS SELECT D.Numero,E.NomEmpresa,D.Fecha, D.SubTotal,D.Impuesto,D.Total FROM ON ON Empresa E E.IdEmpresa = D.IdEmpresa D.IdTipoDoc = TD.IdTipoDoc D.IdVendedor = @IdEmp sp_ventas @idemp='V00002' sp_ventas 'V00002' INNER JOIN Documento D INNER JOIN TipoDoc TD WHERE TD.Accion = 'Salida' AND

Ing Henry Villarreal Torres

11

CREATE PROCEDURE sp_ListaArticulos2 @Nombre VarChar(35) = 'C%' AS SELECT L.DesLinea, A.IdArticulo, A.DesArticulo, A.PreCosto, A.PreVenta FROM Linea L INNER JOIN Articulo A ON L.IdLinea = A.IdLinea WHERE A.DesArticulo Like @Nombre EXEC sp_ListaArticulos2 EXEC sp_ListaArticulos2 'A%' CREATE PROCEDURE sp_CuentaVentas @Vendedor @NumVentas AS SELECT @NumVentas = Count(*) FROM ON Documento D D.IdTipoDoc = TD.IdTipoDoc D.IdVendedor = @Vendedor Declare @Ventas Int EXECUTE sp_CuentaVentas 'V00001', @Ventas OUTPUT Select @Ventas TRIGGERS Un triggers o desencadenante es un procedimiento almacenado de tipo especial que se invoca automticamente cada vez que se modifican los datos de la tabla. Los triggers se invocan en respuesta a las instrucciones INSERT, UPDATE o DELETE. Un triggers puede realizar una consulta en otras tablas e incluir instrucciones de Transac SQL complejas. Un trigger y la instruccin que la active se trata de una sola transaccin que puede deshacerse desde el trigger. Si se detecta un error grave se deshace automticamente toda la transaccin. Los triggers tienen varias utilidades: Pueden realizar cambios en cascadas a travs de tablas relacionadas de la base de datos. Los triggers pueden no permitir o deshacer los cambios que infrinjan la actividad referencial y cancelar cualquier intento de modificacin de los datos. INNER JOIN TipoDoc TD WHERE TD.Accion = 'Salida' AND Char(6), Int OUTPUT

Ing Henry Villarreal Torres

12

Los triggers pueden exigir restricciones mas complejas que las restricciones CHECK. Los triggers tambien pueden diferenciar el estado de una tabla antes y despus de una modificacin de datos para actuar en funcin de esa diferencia. Varios triggers del mismo tipo (INSERT, UPDATE o DELETE) en una tabla permiten que se realicen distintas acciones en respuesta a una misma instruccin de modificacin.

SINTAXIS: CREATE TRIGGER NOMBRE TRIGGER ON NOMBRE TABLA [WITH ENCRYPTION] FOR DELETE / INSERT / UPDATE [NOT FOR REPLICATION] AS INSTRUCCION SQL Donde: Nombre Trigger: es el nombre. Un nombre de trigger debe cumplir las reglas de integridad de los identificadores y debe ser nico en la base de datos. Tabla: Es la tabla donde se ejecuta el trigger; algunas veces se llama la tabla de trigger. DELETE/INSERT/UPDATE: Son palabras claves que especifican que instruccin de modificacin de datos activa el trigger, cuando se ejecutan contra la tabla se debe especificar al menos una opcin. En la definicin de trigger se permite cualquier combinacin de estas. Si especifica mas de una opcion seprelas con coma. NOT FOR REPLICATION: indica que el trigger no debe ejecutarse cuando un proceso de modificacin modifica la tabla involucrada en el mismo. AS: establece las instrucciones que va ha llevar a cabo el trigger. Instruccin SQL: son las condiciones e instrucciones del trigger. Las condiciones del trigger especifican los criterios adicionales que determinan si los intentos de las instrucciones DELETE, INSERT o UPDATE hacen que se lleven a cabo las acciones del trigger. CREACION DE UN TRIGGER Antes de crear un trigger considere lo siguiente: De forma predeterminada, permiso para crear un trigger corresponde al propietario de la tabla, que puede transferirlo a otros usuarios. Los triggers son objetos de base de datos y sus nombres deben de ajustarse a las reglas para los identificadores. Solo se pueden crear trigger en la base de datos actual aunque pueda hacer referencia a objetos que se encuentren fuera de esta base de datos. No es posible crear un trigger en una vista o en una tabla temporal o del sistema, aunque los trigger pueden hacer referencia a vistas o tablas temporales. No se puede hacer referencia a tablas del sistema; en su lugar utilice las vistas de esquemas de informacin.

Ing Henry Villarreal Torres

13

DESENCADENANTES MULTIPLES Una tabla puede tener varios trigger de un tipo determinado siempre que tengan nombres distintos; cada trigger puede llevar a cabo numerosas funciones. No obstante, un trigger puede aplicarse a una sola tabla, aunque un solo trigger puede aplicarse a las tres accione de usuario (UPDATE, INSERT o DELETE). Ejemplos: CREATE TRIGGER tr_Insert_Vendedor ON Vendedor FOR INSERT AS IF UPDATE(ApeVendedor) PRINT 'Columna ApeVendedor Modificada' Insert Into Vendedor(IdVendedor, ApeVendedor, NomVendedor, DirVendedor, TelVendedor) values('999999', 'Ruiz Apaza', 'Juan Jos', 'Los Olivos', '485-1593') CREATE TRIGGER tr_Insert_Vendedor2 ON Vendedor FOR INSERT AS IF ( COLUMNS_UPDATED() & 3 = 3 ) PRINT 'Columna NomVendedor Modificada' Insert Into Vendedor(IdVendedor, ApeVendedor, NomVendedor, DirVendedor, TelVendedor) values('888888', 'Romero Castillo', 'Carlos Alberto','Los Olivos','485-4587') CREATE TRIGGER tr_Insert_Articulo ON Articulo FOR INSERT AS IF (Select PreCosto From Inserted) < 0 BEGIN PRINT 'Precio Costo Negativo' ROLLBACK END ELSE IF (Select PreVenta From Inserted) < 0 BEGIN PRINT 'Precio Venta Negativo' ROLLBACK END

Ing Henry Villarreal Torres

14

INSERT INTO Articulo(IdArticulo,IdUnidad,IdLinea,DesArticulo,Stock,PreCosto,PreVenta,Dscto) Values('ABC00001','UNI',1,'ABC',100,-20,40,2) INSERT INTO Articulo(IdArticulo,IdUnidad,IdLinea,DesArticulo,Stock,PreCosto,PreVenta,Dscto) Values('ABC00001','UNI',1,'ABC',100,20,-40,2) CREATE TRIGGER tr_Update_Linea ON Linea FOR UPDATE AS IF Update(Prefijo) BEGIN PRINT 'No se puede cambiar el prefijo' ROLLBACK TRANSACTION END UPDATE Linea SET Prefijo = 'XXX' WHERE IdLinea = 1

Ing Henry Villarreal Torres

15

También podría gustarte