SQL Server 2012 Implementación General

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 68

MS SQL Server 2012 Implementando una Base de Datos

MANUAL DEL PARTICIPANTE

Ing. Jose luis Herrera Salazar

Page 1

MS SQL Server 2012 Implementando una Base de Datos

Ing. Jose luis Herrera Salazar

Page 2

MS SQL Server 2012 Implementando una Base de Datos

TABLA DE CONTENIDO

Sesin

Tema

Implementando un Modelo de Datos

El Transact- SQL

10

Recuperando Datos

11

Uniendo Mltiples Tablas

12

Sumarizando Datos

13

Implementando Integridad de Datos

14

Modificando Datos

15

Implementando Vistas

16

Implementado Triggers

17

Implementando Stored Procedures y


Funciones
Implementando Cdigo Administrado

18

Ing. Jose luis Herrera Salazar

Page 3

MS SQL Server 2012 Implementando una Base de Datos

SESION

08

IMPLEMENTANDO UN MODELO DE DATOS

Ing. Jose luis Herrera Salazar

Page 4

MS SQL Server 2012 Implementando una Base de Datos

SESION 08: IMPLEMENTANDO UN MODELO DE


DATOS

Dentro de las actividades que debe de realizar el Implementador de la BD o desarrollador de


aplicaciones, es la creacin de los objetos de la BD, llmese: Tablas, Rules, Defaults, Triggers,
Stored Procedures, etc.
La primera tarea consiste en Implementar el Modelo Lgico de Datos:

PLANIFICACIN DE LA CLASE
Veremos los tpicos siguientes:

Identificar los componentes principales de un Modelo de Datos


Migrar los objetos de desde el CASE al SQL Server.
Generar Scripts
Aplicar Ingeniera Reversa hacia Rational Rose

Introduccin al Diseo de Base de Datos


Antes de comenzar a crear los objetos de la Base de Datos es necesario definir el
Modelo Lgico de Datos.

Componentes de un Modelo Lgico de Datos

Tablas (entidades)
Columnas (atributos)
Caractersticas de las columnas (tipos de datos)
Clave primaria por cada tabla.
Relaciones entre Tablas

Tipos de Relaciones

Uno a muchos
Muchos a Uno
Muchos a muchos

Normalizacin
Es un proceso de refinamiento del modelo lgico de datos con el fin de evitar
inconsistencia y redundancia en los datos. Normalmente se recomienda normalizar
por lo menos hasta la 3ra forma normal.

Ing. Jose luis Herrera Salazar

Page 5

MS SQL Server 2012 Implementando una Base de Datos

Desnormalizacin
Un alto proceso de normalizacin involucra un alto uso de JOINS que podran
tender a niveles de respuesta no adecuados. En estos casos es recomendable
desnormalizar con el objetivo de sacrificar espacio por tiempo de respuesta.

Caso de Estudio
BREVE DESCRIPCIN DE LA EMPRESA
La Tenebrosa SAC es una empresa dedicada a la comercializacin de
productos de primera necesidad.
Fue fundada en Agosto del ao 1985 con capitales locales y como pequea
distribuidora de lnea de detergentes. Hacia inicios del ao 1997 alcanz la
representacin exclusiva en el departamento de La Libertad de los productos de
Alicorp y ese mismo ao de los productos Pacocha, que le permiti ampliar su
cartera de clientes de 3,000 hasta 8,000 cantidad con la que actualmente cuenta. Su
administracin est basada en la entrega oportuna de sus productos en la
puerta del cliente en ptimas condiciones y a precios competitivos del mercado,
creando programas promocionales y ofertas peridicas.
Cuenta con un local ubicada en la Avenida Grandiosa 666 y centraliza toda
sus operaciones en un nico Almacn de un rea de 1600 m 2 alrededor de los
cuales se encuentran sus oficinas administrativas.
Posee una flota de 8 unidades para el transporte de la mercadera que los clientes
le realizan.
Actualmente se encuentra abocada a la consecucin de nuevas lneas de
distribucin con otros grandes distribuidores del pas.
Cuenta con una serie de sucursales en la regin norte, en las cuales se ha optado
por un esquema de Base de Datos distribuda, las mismas que deben reportar las
operaciones a la Sede.

Ing. Jose luis Herrera Salazar

Page 6

MS SQL Server 2012 Implementando una Base de Datos

Algunas Reglas de Negocio:


V ENT AS

Contado

Credito
Solo a clientes Sujeto de Crdito
Para los cliente sujetos de crdito existe un Tope de Crdito
Los Clientes con dos documentos pendientes de pago no est sujeto a nuevos crditos
Por cada venta al crdito de actualizarse el saldo del cliente.

Generar un documento de venta a partir del pedido. Si el cliente posee RUC emitir una factura
Todos los seguimientos se hacen a partir del documento de venta emitido.

A L M AC EN ES

Stock no negativos

Generar un aviso por cada cada producto cuando llegue por debajo del Stock mnimo.

Actualizar el stock al momento de realizar la compra o la venta.

C O B R ANZ AS

Actualizar el saldo del cliente cada vez que se produzca una amortizacin del documento.

Mantener actualizado el saldo del documento

C O B R ANZ AS

Son porcentajes que percibe el vendedor y estn en funcin a la lnea de venta a la que pertenece el producto.

Los vendedores perciben comisin siempre que se haya cancelado totalmente el documento.

Ing. Jose luis Herrera Salazar

Page 7

MS SQL Server 2012 Implementando una Base de Datos

Conociendo la Base de Datos Tenebrosa


Clientes y Zonas:
La empresa ha segmentado su mercado geogrficamente en funcin a
zonas en las que se encuentran ubicados los clientes En cliente existen
ciertos atributos claves:
Tabla
Cliente

Campo
Credito

Descripcin
Indica si un cliente tiene posibilidad de comprar
al crdito (1:s, 2: No)
TopeCredito Es el tope mxima de crdito a consumir por un cliente
Saldo
Es el monto de crdito ya consumido por el cliente

Pedidos
Los pedidos son generados por los clientes y atendidos por el personal de
empresa. As mismo debe definirse la forma de pago en que se genera el pedido.
Tabla
FormaPago
Personal

Campo
Nrodias
Activo

Pedido

Estado

la

Descripcin
Se indica los das que dura el crdito
Indica los trabajadores que pueden realizar
transacciones de ventas (1:s, 0:no)
(A)nulado, (C)ancelado, (P)pendiente de Pago

Ing. Jose luis Herrera Salazar

Page 8

MS SQL Server 2012 Implementando una Base de Datos

Lab 08. Implementando el Modelo


de Datos.
Desarrollo de la Prctica
Ejercicio 01. Creando la Base de Datos Tenebrosa

Cargar el Enterprise Manager del SQL Server


Expandir y ubicarse en la ficha: Base de Datos, hacer click botn derecho. Elegir nueva
Base de Datos. Con lo que aparecer la sgte. Interfaz. Ingrese el nombre Tenebrosa.

Ing. Jose luis Herrera Salazar

Page 9

MS SQL Server 2012 Implementando una Base de Datos

Ejercicio 02. Ingresando al Diagramador

Expanda la BD Tenebrosa
Seleccione Diagrams, y siga los pasos del asistente

Ejercicio 03. Creando la Tabla Proveedor

Estando en el Diagramador haga click botn derecho: New Table, con lo que aparecer la
sgte. Interfaz, digite Proveedor:

Luego digite los campos (ver Modelo de Datos) con su respectivo tipo de datos

Incluyendo la PK: para ello ubicarse en el campo Proveedor, hacer click botn derecho: Set
Primary Key. Observe el Efecto de una llave al costado del campo.

Luego haga click botn derecho: Column Names

Ejercicio 04. Realice la creacin de la Tabla Marca

Ejercicio 05. Estableciendo la Relacin entre Proveedor y Marca

Asegurarse que los tipos de datos y Longitud sean equivalentes para el campo proveedor
en mbas tablas.
Deber de identificar la Tabla Padre (Parent, contiene la PK ) y la tabla Hijo (Child, contiene
la FK).
Para nuestro caso:
Proveedor
: Padre
Marca
: Hijo
Desde la tabla Proveedor (Padre): haga click en la llave (campo que es PK) y arrastre hacia
la Tabla Marca (Hijo), con lo que aparecer la Interfa de la pgina sgte.:

Ing. Jose luis Herrera Salazar

Page 10

MS SQL Server 2012 Implementando una Base de Datos

Asegurese de que tanto en proveedor como en marca, el campo sea Proveedor

* Luego al poner OK se crea la relacin.


Si no ha podido establecer la relacin es posible que:
La longitud de los campos sea diferente para el campo proveedor, asegurarse de que sea
Char(4)
No haya creado la PK de la tabla PROVEEDOR.
Revise y vuelva a ejecutar la relacin. Finalmente debe quedar as:

Implementar el Modelo de Datos completo de la pgina siguiente:

Ing. Jose luis Herrera Salazar

Page 11

MS SQL Server 2012 Implementando una Base de Datos

Ing. Jose luis Herrera Salazar

Page 12

MS SQL Server 2012 Implementando una Base de Datos

Sesin 09

EL TRANSACT-SQL

Ing. Jose luis Herrera Salazar

Page 13

MS SQL Server 2012 Implementando una Base de Datos

Sesin 09. El Transact-SQL


Este captulo proporciona un conocimiento integral de las Ordenes SQL
y alguna de las herramientas que se pueden usar para programar en SQL Server.
Para ello el SQL Server proporciona el Transact SQL que est basado en el
estndar del Lenguaje SQL incorporando una potente funcionalidad propia del
producto.

Objetivos

Describir y utilizar el SQL Server Query Analyzer


Describir los elementos bsicos del Transact-SQL
Escribir ordenes SELECT bsicas y algunas funciones de sistema
Describir los modos de ejecutar ordenes Transact-SQL

Herramientas de Programacin en SQL Server


Dentro de las principales herramientas se incluyen: el SQL Server Query Analyzer
(herramienta Windows) y el utilitario osql (herramienta command prompt) las
mismas que permiten ejecutar iterativa o en batch rdenes Transact-SQL

Management Studio
Herramienta grfica para el diseo y testeo de rdenes Transact-SQL, batches o
scripts iterativamente.
Ventajas:
Editor de Textos free-form. Permite digitar, grabar, reusar y ejecutar rdenes
Transact-SQL
Resultados presentados en un Grid o Texto
Diagrama grfico del Plan de Ejecucin de una orden SQL. Esta herramienta le
permite a los programadores analizar y optimizar sus rdenes indicando los
puntos de lenta ejecucin.
Anlisis de ndices, que al veces implica crear nuevos ndices para incrementar
la velocidad de la ejecucin de las consultas.

Ejemplos. Al digitar cada orden, pulsar F5 y estando Tenebrosa como base de datos
activa:
a.
b.
c.

SELECT @@version
SELECT * FROM cliente
EXEC sp_help

Seleccione como BD activa a master


a. SELECT * FROM sys.databases_files
b. SELECT * FROM sys.database_principals

Ing. Jose luis Herrera Salazar

Page 14

MS SQL Server 2012 Implementando una Base de Datos


El Lenguaje de Programacin Transact-SQL
Est basado en el estndar ANSI SQL-92 ISO y comprende todo las rdenes
permitidas por el estndar, pero aade algunas potentes funcionalidades ha alguna
de sus rdenes propias del SQL Server.

Elementos del Transact-SQL


Se encuentran clasificados en los sgts. grupos:
Data Control Language: permisos a los objetos de la BD
Data Definition Language:crear objetos en la BD
Data Manipulation Language: consultas y modificacin de datos
Elementos adicionales del lenguaje: variables, operadores, funciones, control del
flujo del lenguaje y comentarios.

Data Control Language


Usadas para cambiar permisos asociados con una BD de usuario o un Rol, tenemos
GRANT y DENY
Ejemplo:
USE tenebrosa
GRANT SELECT ON producto TO Ruben

ORDEN
GRANT
DENY
REVOKE

Descripcin

Permite a los usuarios trabajar con datos o ejecutar


ciertas ordenes del Transact-SQL
No permite a los usuarios trabajar con datos o
ejecutar ciertas ordenes del Transact-SQL
Remueve los permisos GRANT y DENY, normalmente
prevalecen los roles definidos a nivel de BD

Estas opciones fueron vistas en el Captulo de Manejo de la Seguridad.

Data Definition Language


Definen la estructura de la BD creando y manejando BD y objetos de la BD como
tablas y stored procedures. Las rdenes comnmente usadas son:
CREATE nombre_objeto
ALTER nombre_objeto
DROP nombre_objeto
Por defecto slo los miembros de los Roles SysAdmin, db_creator, db_owner o
db_ddladmin pueden ejecutar este tipo de rdenes.
Ejemplos: USE Tenebrosa
CREATE TABLE modelo (
modelo char(5),
descripcion varchar(40))

Nombrando Objetos:
Identificadores Estndar:
La primera letra debe ser un carcter alfabtico
La sgte puede ser un carcter, nmero o los smbolos: @, #, _
Identificadores delimitados:
Cuando el nombre incluye un espacion en blanco
Ing. Jose luis Herrera Salazar

Page 15

MS SQL Server 2012 Implementando una Base de Datos

Cuando se usan palabras reservadas para nombrar los objetos


Utilizar corchetes [] apstrofes "
Ejemplos:
- SELECT * FROM [unidad de medida]
- SELECT * FROM 'unidad de medida'

Recomendaciones para nombrar objetos:

Mantener nombres cortos


Usar nombres descriptivos
Usar un identificador que distinga el tipo de objeto.
Ejemplo
- Stored Procedure: Venta_CalcularMora

Nombrando a un Objeto en Forma Completa: Se


nombra as:

Servidor.BaseDatos.Owner.Objeto
Ejemplo:

SqlServer1.Tenebrosa.dbo.Cliente

Observe que owner ha sido reemplazado por dbo , para ello los objetos de la BD
deben ser creados por los que tengan rol de SystemAdministrator o con el usuario sa.
Si el objeto pertenece a un Schema, incluir el nombre del schema en lugar de dbo
(recuerde que dbo es el esquema por defecto)

Nombrando a un Objeto en Forma Particionada


Tenemos:
Servidor.basedatos.owner. objeto
Servidor. basedatos..objeto
Servidor..owner.objeto
Servidor...objeto
basedatos.owner.objeto
basedatos..objeto owner.objeto
objeto

Data Manipulation Language


Permite trabajar con los datos de la BD. Usando estas rdenes se puede cambiar
datos o recuperar informacin. Estas rdenes son aplicadas en el desarrollo de
sistemas de informacin operacional.
Estas rdenes son:

SELECT
INSERT
UPDATE
DELETE

: consultar datos, leer informacin


: aadir registro(s) de informacin
: modificar datos que existen en las tablas
: eliminar registro(s) de informacin.

Ing. Jose luis Herrera Salazar

Page 16

MS SQL Server 2012 Implementando una Base de Datos


Por defecto, slo los miembros del Rol: SysAdministrator, db_owner, db_datawriter o
db_datareader pueden ejecutar alguno de estos comandos.
Ejemplos:
a.
SELECT tipodoc, documento, fecha, observacion
FROM documento
b.

SELECT d.documento, d.producto, p.descripcion


FROM detadoc d INNER JOIN producto p ON dproducto =p.producto

Elementos Adicionales del Lenguaje


Variables
Son de dos tipos:

Variables Locales
Definidas por el
usuario Son definidas
usando :
DECLARE @variable_local

<tipo_dato> [<long>]

Se les asigna un valor mediante la orden SET


SET @variable_local = <expression>
Su nombre debe iniciar con el smbolo: @
Ejemplos:
USE TENEBROSA
DECLARE @tasaigv numeric(9,2)
SET @tasaigv = 18.0

-- Declarando la variable local


-- Asignando Valor directamente

Otra forma de asignar directamente desde una orden SELECT


SELECT @tasaigv = tasaigv FROM parmetro WHERE activo = 1

Variables globales
Propias del SQL Server
No se les puede asignar ningn valor, slo pueden ser ledas.
Inician con el smbolo: @@
Ejemplos:
/* Variable @@rowcount: devuelve el Nro de registros afectados con
la ltima instruccin SQL */
DECLARE @ Nro Registros int
-- Se declara variable local
SELECT descripcin FROM producto WHERE producto = 'PR01'
SET @NroRegistros = @@rowcount -- @@rowcount variable global
PRINT @NroRegistros

Operadores
Son smbolos que permiten ejecutar operaciones matemticas. Concatenacin de
cadenas, combinacin entre columnas, constantes y variables. Pueden ser combindas y
usadas como condiciones. Tipo de Operadores
Asignacin (=)

Ing. Jose luis Herrera Salazar

Page 17

MS SQL Server 2012 Implementando una Base de Datos


Aritmticos : permite ejecutar clculos con columnas numricas o
constantes. Estos son multiplicacin (*), divisin ( /), adicin (+),
substraccin (-) y modulo (%), el resido entero resultado de una divisin
Comparacin : permite comparar dos expresiones. Las comparaciones
pueden efectuarse entre variables, columnas y expresiones de igual tipo.
Entre ellas tenemos: igual que (=), diferente (<>), mayor que (>),
mayor igual que (>=), menor o igual que (<=) y menor que (<).
Concatenacin de cadenas: permite concatenar dos valores tipo cadena. Se
usa el operador (+).
Lgicos: permite unir condiciones de la clausula WHERE, estos son: AND,
OR, y NOT.

Nivel de prioridad de los operadores (de la ms alta a la ms baja)


Tipo
Agrupa miento
Aritmtico
Aritmtico
Otro
Lgico
Lgico
Lgico

Operador
Smbolo
Agrupamiento primario
0
Multiplicacin
*,/,%
Adicin
-,+
Concatenar cadenas
+
NOT
NOT
AND
AND
OR
OR

Funciones de Sistema:
Son funciones proporcionadas por el Transact-SQL, normalmente utilizan parmetros
para devolver valores.
Son de 3 tipos:

Funciones de Agregamiento
Evalan una serie de valores y retornan un valor simple sumarizado. Las revisaremos
con ms detalle en el captulo de sumarizacin de datos.
Ejemplo:
a. Imaginemos que queremos conocer el importe al que asciende la factura
nmero 100000017
SELECT SUM(precunit * cantidad) AS total FROM detadoc WHERE
documento = '100000017' AND tipodoc = 'F'
total
215.0000

b. Suponga que desea conocer a cunto ascender el IGV de la factura


100000017
DECLARE @monto numeric(9,2), @igv numeric(9,2)
SET @igv = 18
SELECT @monto = SUM(precunit * cantidad)
FROM detadoc WHERE documento = '100000017' AND tipodoc = 'F'
PRINT 'El Igv es: ' + CONVERT(char(12), @monto* @igv /100.0 )
Ing. Jose luis Herrera Salazar

Page 18

MS SQL Server 2012 Implementando una Base de Datos


El Igv es: 38.700000000

Funciones escalares
Operan un simple valor y retornan un simple valor. Pueden ser agrupadas dentro de las
siguientes categoras
Tipo de Funcin
Configuracin
Cursor
Fecha y Hora
Matemticas
Metadata
Seguridad
Cadena
Sistema
Estadsticas Sistema
Texto e imagen

Descripcin
Retornan informacin acerca de la configuracin actual
Informacin acerca de cursores
Ejecuta una operacin de la fecha y hora
Ejecuta una operacin basado en valores de entrada
Informacin acerca de los objetos de la base de datos
Informacin acerca de usuarios y roles
Ejecuta una operacin en una cadena
Informacin acerca de valores, objetos y configuracin
Informacin estadstica acerca del sistema
Informacin acerca de campos textos e imgenes

Algunas funciones escalares ms usadas


DATEPART: retorna un valor entero de acuerdo a la frecuencia especificada
Sintaxis:

DATEPART(<frecuencia>, <dato_tipo_fecha>) Donde

frecuencia puede tomar la abreviatura de acuerdo al siguiente cuadro:


Frecuencia

Abreviatura

Ao
Trimestre
Mes
Da del ao
Da
Semanda
Da de semana
Hora
Minuto
Segundo
Milisegundo

yy
qq
mm
dy
dd, d
ww
dw
hh
mi
ss
ms

Ejemplo: imagine que desea conocer los pedidos ocurridos en Julio del ao 2000
SELECT pedido, fecha, cliente
FROM pedido WHERE DATEPART(yy,
DATEPART(mm, fecha) = 7
pedido fecha
900005 2000-07-02 00:00:00.000
900006 2000-07-02 00:00:00.000

fecha) = 2000 AND

cliente
CLI3
CLI3

(2 row(s) affected)

Ing. Jose luis Herrera Salazar

Page 19

MS SQL Server 2012 Implementando una Base de Datos


DATEDIFF : retorna un entero del tiempo transcurrido - <frecuencia> - entre la
<fecha_referencia> y la <fecha_comparativa>.
Sintaxis:
DATEDIFF(<frecuencia>, <fecha_referencia>, <fecha_comparativa>)
Donde:
<frecuencia>
: equivale a los valores de la tabla anterior
<fecha_referencia> : es la fecha desde la cual se quiere medir el tiempo transcurrido.
<fecha_comparativa>: es la fecha final sobre la cual se desea conocer cuantos das
han transcurrido desde la <fecha_referencia>
Ejemplo: imagine que desea conocer los das transcurridos desde la emisin del
documento con respecto a la fecha de hoy.
SELECT

documento, tipodoc, fecha ,

DATEDIFF(dd, fecha, GETDATE()) AS


FROM documento

DiasTranscurridos

documento tipodoc fecha

DiasTranscurridos

100000018 F
100000019 F
100000023 F

2003-01-01 00:00:00.000
2002-01-01 00:00:00.000
2003-02-19 15:44:02.717

195
560
146

100000024 F

2003-02-19 15:44:33.733

146

CONVERT

: transforma una expresin a un tipo de dato requerido

Sintaxis:

CONVERT ( tipo_dato [ ( long ) ] , expresin [ , formato ] )

El formato slo es aplicado a las expresiones tipo Datetime y el valor de formato a


ingresar se resume en la sgte tabla:
Valor de Formato
0 or 100
Default

9 or 109 (*)

13 or 113 (

101
102
10
TR
104
YT
10
RY
5
10
TR
6
10
YT
7
10
RY
8
33

Estndar

USA
ANSI
British/French
German
Italian
Default + milliseconds

33
110 USA
111 JAPAN
112 I SO
Europe default + milliseconds

114 20 or 120 (
ODBC canonical
21 or 121 (*)
ODBC canonical (with milliseconds)
126(***)
ISO8601

Ing. Jose luis Herrera Salazar

Formato Devuelto
mon dd yyyy hh:miAM (or PM)
mm/dd/yy
yy.mm.dd
dd/mm/yy
dd.mm.yy
dd-mm-yy
dd mon yy
Mon dd, yy
hh:mm:ss
mon dd yyyy hh:mi:ss:mmmAM
(or PM)
mm-dd-yy
yy/mm/dd
yymmdd
dd mon yyyy
hh:mm:ss:mmm(24h)
hh:mi:ss:mmm(24h)
yyyy-mm-dd hh:mi:ss(24h)
yyyy-mm-dd hh:mi:ss.mmm(24h)
yyyy-mm-dd Thh:mm:ss:mmm(no
spaces)

Page 20

MS SQL Server 2012 Implementando una Base de Datos


Ejemplo:
a. Imagine que desea mostrar el codigo del producto, su descripcin y el precio de
vent a aco mpa ado del m en saje: " Precio es"

SELECT producto, descripcion, 'Precio es=' +


CONVERT(char(10), precVenta) As precio FROM
producto
producto descripcion

precio

PR06
PR07

Precio es=100.00
Precio es=15.00

GLORIA SIX PACK


PRIMOR 1LT

(2 row(s) affected)

Ntese qu e para po der concatenar las expresiones debe ser tipo cadena, en el caso de
PrecVenta es nu mrico, por lo que se ha inclu ido la funcin CONVERT()
b. Suponga que desea conocer los documentos emitidos el da , dos de Julio del ao
2000. El formato de la fecha depender del idioma de instalacin, vamos a
suponer que la instalaci n es en Espaol (dd/mm/yyyy).
SELECT Documento, TipoDoc, Proveedor, Pedido, Cliente, Fecha
FROM documento
WHERE fecha = '02/07/2000'
Documento TipoDoc Proveedor Pedido
20
21
8
9

B
B
F
F

NULL
NULL
NULL
NULL

900005 CLI3
900006 CLI3
900005 CLI3
900006 CLI3

Cliente Fecha

2000-07-02 00:00:00.000
2000-07-02 00:00:00.000
2000-07-02 00:00:00.000
2000-07-02 00:00:00.000

(4 row(s) affected)

c.

Como puede observar los datos obtenidos para la fecha ingresada


corresponden a las 00:00:00 de ese da.

Importante!
Cada vez que no se registra la hora el sistema internamente le pone a
la fecha las 00:00:00
Pero que pasara si la aplicacin deseara controlar la hora ? Definitivamente los
resultados no sern los esperados. Vamos a cambiar al documento : 21 B e incluirle
la hora con la siguiente instruccin:
----- Vamos cambiar el documento con la orden UPDATE
UPDATE documento SET fecha = '02/07/2000 10:20'
WHERE documento = '21' AND tipodoc = 'B'
-- Volvamos a consultar nuevamente el documento
SELECT Documento, TipoDoc, Proveedor, Pedido, Cliente, Fecha
FROM documento
WHERE fecha = '02/07/2000'
Documento TipoDoc Proveedor Pedido
20
8
9

B
F
F

NULL
NULL
NULL

Cliente Fecha

900005 CLI3 2000-07-02 00:00:00.000


900005 CLI3 2000-07-02 00:00:00.000
900006 CLI3 2000-07-02 00:00:00.000

(3 row(s) affected)
Ing. Jose luis Herrera Salazar

Page 21

MS SQL Server 2012 Implementando una Base de Datos


Observe que no aparece el documento, definitivamente 02/07/2000 00:00 es
diferente que 02/07/2000 10:20. Cuando se maneje la hora como parte de la
fecha hay que tener presente en cambiar nuestra condicin, una alternativa podra ser
aplicar :
fecha >=
'02/07/2000'
AND fecha < '03/07/2000', observe que
avanzamos al siguiente da.
SELECT Documento, TipoDoc, Proveedor, Pedido, Cliente, Fecha
FROM documento
WHERE fecha >= '02/07/2000' AND fecha < '03/07/2000'
Ahora analice los resultados.

Elementos del Control de flujo


Se agrupan en 2 tipos:
Nivel de Orden
BEGIN... END

Si alguno de los elementos de control, que veremos a continuacin, incluyen una serie
de rdenes Transact-SQL es necesario que estn delimitadas por BEGIN.. END
BEGIN
<rdenes SQL>
END
WHILE
Establece una condicin que mientras se es cumplida permitir la ejecucin del bloque de
instrucciones. Puede ser controlada mediante BREAK: lo cual finaliza la ejecucin del bloque y
CONTINUE que reinicia la ejecucin del bloque.

Syntax
WHILE Expresin Condicional

BEGIN
< ordenes SQL >
[ BREAK ] [
CONTINUE ]
END

IF...ELSE:

Permite evaluar una condicin si es verdadera se ejecuta el bloque de rdenes.


Opcionalmente se puede incluir ELSE para ejecutar rdenes en caso la condicin sea
Falsa
IF <condicin> BEGIN
<rdenes SQL> END[
ELSE BEGIN
<rdenes SQL>
END ]

Comentarios:

Sirven para documentar un Script


Existen 2 formas
/*

el comentario alcanza varias lneas,


todo lo que est encerrado es ignorado en la ejecucin del Script */

< orden SQL > Sirve para documentar en la misma lnea


Ing. Jose luis Herrera Salazar

Page 22

MS SQL Server 2012 Implementando una Base de Datos

Nivel de Registro
CASE
Permite evaluar una lista de condiciones y retorna el valor de la condicin verdadera.

CASE <valor_a_evaluar>
WHEN <expression_condicin> THEN <Resultados> [

...n ]
[
ELSE <resultado_tomado_sino_cumplen_condiciones_aanteriores>
]
END

Modos de Ejecutar una Orden Transact-SQL


Se puede ejecutar de varios modos:
Ejecutar individualmente o en batches
Almacenados en scripts y ejecutados desde un cualquier cliente
Pueden ser ejecutados desde un Stored Procedure, Trigger.
A continuacin veremos los mecanismos para ejecutar consultas y transacciones

Usando Batches
Definicin
Un batch es un conjunto de rdenes Transact -SQL que pueden ser includas en SQL
Server y ejecutadas como un grupo. Pueden formar parte de un Script. Un script
puede incluir uno o ms Batches.

Delimitador
El delimitador de finalizacin de un Batch es la orden GO

Cmo son procesados los Batches


SQL Server optimiza, compila y ejecuta las rdenes en un batch; sin embargo las
rdenes no se ejecutan como una unidad de trabajo (como si lo hace una
transaccin).
Si existe una error en el batch, ninguna de las rdenes son ejecutadas. La ejecucin
continua con el sgte. batch.

Reglas Para Batches


Ciertas reglas no pueden ser ejecutadas en conjunto, as

No puede combinar CREATE DEFAULTM CREATE PROCEDURE, CREATE RULE, CREATE


TRIGGER Y CREATE VIEW

Ing. Jose luis Herrera Salazar

Page 23

MS SQL Server 2012 Implementando una Base de Datos

Ejemplos de Batches
a.

CREATE DATABASE
CREATE TABLE
GO
CREATE VIEW1
GO
CREATE PROCEDURE...

b.

CREATE DATABASE
CREATE TABLE
CREATE TRIGGER
CREATE TRIGGER

c.

Habra un error!
CREATE DATABASE
CREATE TABLE
GO
CREATE TRIGGER
GO
CREATE TRIGGER

Usando Scripts
Definicin
Constituye una de las formas ms comunes para ejecutar rdenes Transact-SQL. Un
Script es una o ms rdenes Transact-SQL que son almacenadas como un archivo.
Se reconocen porque tienen la extensin .SQL y pueden ser ejecutados las veces que
sea necesario.

Cmo es procesado una Consulta


Cuando SQL Server recibe una consulta un nmero de pasos son requeridos para
procesar la consulta antes, ver figura sgte.
Paso
Parse
Resol ve
Optimiza
Compila
Execute

Descripcin
Cheque sintxis
Valida los nombres de los objetos y los permisos
Determina los ndices usados y la estrategia de los JOINs
Traslada la consulta dentro de una forma ejecutable
Procesa requerimiento

Ing. Jose luis Herrera Salazar

Page 24

MS SQL Server 2012 Implementando una Base de Datos

Construccin Dinmica de Ordenes


Definicin
Una orden dinmica es construda mientras otro script es ejecutado. Las cadenas
literales son concatenadas con los valores de una o ms variables, el resultado de la
cadena es una orden Transact-SQL.

Ejecucin
Se tienen las sgts. posibilidades

Usar el stored procedure: sp_executesql


SP_EXECUTESQL [@orden_sql=]

EXECUTE y la serie concatenada


EXECUTE (@orden_sql)

Ing. Jose luis Herrera Salazar

Page 25

MS SQL Server 2012 Implementando una Base de Datos

Sesin 10

RECUPERANDO DATOS

Ing. Jose luis Herrera Salazar

Page 26

MS SQL Server 2012 Implementando una Base de Datos

Lab 10: Recuperando Datos


Objetivos

Cumplir requerimientos utilizando la orden SELECT

Lista de Requerimientos
1. Se quiere conocer a todo los clientes cuyo nombre empieza con RODRIGUEZ.
2. La administracin se encuentra depurando la lista de clientes que tienen crdito,
para ello necesita conocer previamente quienes son los que actualmente tienen
crdito autorizado.
3. La empresa necesita reponer sus stocks, el Jefe de compras le solicita que
productos se van ha adquirir mostrando codigo, descripcin, stock actual y stock
mnimo.
4. Identificar todos los vendedores cuyo sueldo bsico sea superior a 400 y se
encuentren activos.
5. Se necesita conocer los pedidos efectuados por el cliente con ruc 21181838
emitidas en Enero, Junio y Diciembre.
6. Se desea tener una calificacin de los clientes en funcin a sus saldos, de acuerdo
a la sgte. tabla.
Saldo
Mensaje
> 5000
Muy moroso
2000- 5000.00
Medio moroso
0 - 1999.99
moroso regular
Si es NULL
No es moroso

Ing. Jose luis Herrera Salazar

Page 27

MS SQL Server 2012 Implementando una Base de Datos

Sesin 11

UNIENDO MULTIPLES TABLAS

Ing. Jose luis Herrera Salazar

Page 28

MS SQL Server 2012 Implementando una Base de Datos

Sesin 11. Uniendo Mltiples Tablas


Dentro de una empresa existen una serie de polticas cambiantes que algunas veces
no son contempladas como opciones de un sistema; sin embargo existen los datos
para satisfacer estos requerimientos de informacin, que muchas veces se encuentran
en ms de una tabla.
Dentro de SQL Server podemos utilizar los JOINS como forma de poder compartir
informacin entre las tablas, que son una extensin de la orden SELECT como
veremos a continuacin.
Objetivos

Combinar datos desde dos tablas usando JOIN


Describir y usar INNER JOIN, OUTER JOIN y CROSS JOIN
Combinando datos desde ms de dos tablas
Utilizando JOIN para generar una consulta a una sola tabla.
Creando tablas usando SELECT INTO

Introduccin a los JOINS


Los JOIN producen un simple resultado que incorpora registros y columnas desde dos o
ms tablas.

Sintxis:
SELECT {nombre campo} [, ...n] FROM

{tabla_o_vista}
[

[ INNER | {{LEFT | RIGHT | FULL} [OUTER] }]


JOIN
tabla o vista ON condiciones de bsqueda]
] [-n] ~
[ WHERE condiciones_de_bsqueda ] ORDER BY

{nombre campo} [, ...n] }

Performance
Cuando use JOIN en ms de dos tablas, y si estas son largas -con una cantidad
considerable de registros-, debera de analizar las consultas utilizando el Plan de
Ejecucin o las ordenes SET SHOWPLAN_TEXT, SET_SHOWPLAN_ALL estudiadas en el manejo
de ndices. Tener presente el manejo de ndices como una forma de mejorar la
performance de las consultas.

Resumen del Captulo:


En las pginas sgtes. se muestra la operatividad de las consultas de mltiples
tablas.

Ing. Jose luis Herrera Salazar

Page 29

MS SQL Server 2012 Implementando una Base de Datos

Lab 11: Consultando Mltiples


Tablas
Objetivos

Cumplir requerimientos utilizando la orden SELECT incluyendo JOINS

Lista de Requerimientos

1. Se desea conocer las ventas al crdito pendientes de pago mostrando el nro de


documento, razn social del cliente y la fecha en que se gener la venta.
2. Se desea conocer las venta de los productos superiores a 20 unidades,
mostrando el cdigo del producto, nombre del cliente, nro de documento y
cantidad vendida, total vendido.(cant*precunit)
3. Se necesita conocer las ventas superiores a 500 unidades de todos los
productos de la lnea L2. Especificando el nro de documento, nombre del
vendedor, monto vendido y la fecha de emisin del documento.
4. Se pretende realizar una depuracin de los productos que no han tenido ni una
sola venta en lo que va desde el inicio de las operaciones de la empresa.
Muestre estos productos.
5. Se desea conocer los pagos efectuados a partir del ao 2000 , mostrando el
nro de pago, el nro del documento, su tipo, el importe pagado, el nombre del
cliente y la fecha en que se produjo el pago.

Ing. Jose luis Herrera Salazar

Page 30

MS SQL Server 2012 Implementando una Base de Datos

Sesin 12

SUMARIZANDO DATOS

Ing. Jose luis Herrera Salazar

Page 31

MS SQL Server 2012 Implementando una Base de Datos

Sesin12. Sumarizando Datos


Existe otra forma en que los usuarios realicen sus requerimientos de informacin, y
esta es en forma resumida. As por ejemplo un requerimiento podra ser: obtener un
resumen de las ventas por cada producto en el mes de Mayo, o un consolidado de
ventas por cada cliente en 1999.
A continuacin conoceremos una extensin de la orden SELECT aplicando GROUP BY para
generar resultados agrupados y HAVING como herramienta de filtro de los grupos
generados.
Objetivos

Generar un simple sumario usando funciones de agregamiento


Organizar los datos resumidos de una columna usando GROUP BY y la
clausula HAVING
Usando TOP n para recuperar una lista de los n registros top de una tabla.
Aplicando ORDER BY

Usando Funciones de Agregamiento


A continuacin presentamos un resumen de las principales funciones de agregamiento

Agg regate

Descripcion

AVG
COUNT
COUNT (*)
MAX
MIN
SUM
STDEV
STDEVP
VAR
VARP

Promedio
Contar valores de una expresin
Nmero de registros
Mximo valor de la expresin
Mnimo valor de la expresin
Acumula valores de una
Desviacin estndar
Desviacin estdar de toda la
Varianza
Varianza estadstica de todos los

Ing. Jose luis Herrera Salazar

Page 32

MS SQL Server 2012 Implementando una Base de Datos

Sintxis:
SELECT {{AVG | COUNT | MAX | MIN | SUM
| STDEV | STDEVP | VAR | VARP} (expression | *) } [, . . . n] FROM tabla
[ WHERE condiciones_de_bsqueda ] [ GROUP
BY [ALL] lista_de_campos ] [ HAVING condioion
de grupo ]

Consideraciones al usar GROUP BY


1. SQL Server produce un resgistro con los valores de cada grupo definido en GROUP
BY
2. Usando GROUP BY tendremos informacin resumida.
3. Todas las columnas que se especifican en la lista SELECT deben ser includas en
GROUP BY.
4. Al incluir WHERE slo aparecern los registros que satisfacen la condicin en
WHERE
5. El tamao de registro mximo listado por GROUP BY no debe ser mayor a 8060
bytes.
6. Si se encuentran valores NULL estos son procesados como un grupo en el caso de
obviar NULL especificar en el WHERE la expresion IS NOT NULL

Ing. Jose luis Herrera Salazar

Page 33

MS SQL Server 2012 Implementando una Base de Datos

Lab 12: Sumarizando Datos


Objetivos

Cumplir requerimientos utilizando la orden SELECT incluyendo JOINS, GROUP BY


HAVING

Lista de Requerimientos
1. Se desea tener un resumen de las cantidades vendidas por cada producto
desde 2000.
2. Se desea conocer un resumen de ventas al contado y al crdito que han sido
canceladas.
3. Se necesita conocer los montos deudores acumuladas por cada cliente a la
fecha.
4. Se desea conocer el monto vendido por cada vendedor desde Enero del 2000 a
la fecha.
5. Necesitamos conocer el volumen de ventas, en unidades monetarias, por cada
lnea de producto.
6. Se requiere un resumen de deuda de cada cliente siempre que sean superiores
a 5000 unidades monetarias.
7. Se desea conocer los 3 mejores vendedores del ao 2000
8. Se pretende tener el total vendido -tanto en soles como en cantidades- por
cada producto, mostrando en el detalle: codigo, descripcin, fecha
del
documento, monto y cantidad
9. Se desea tener un resumen de ventas por linea de productos en
forma
trimestral.

Ing. Jose luis Herrera Salazar

Page 34

MS SQL Server 2012 Implementando una Base de Datos

Sesin 13

IMPLEMENTANDO
INTEGRIDAD DE DATOS

Ing. Jose luis Herrera Salazar

Page 35

MS SQL Server 2012 Implementando una Base de Datos


Sesin 13. Implementando Integridad de Datos
Al finalzar este captulo conocer la necesidad de aplicar la Integridad de Datos en su
Base de Datos y la forma como aplicar los distintos tipos de Integridad de Datos en
SQL Server.

Objetivos

Definir los Tipos de Integridad de Datos.


Definir DEFAULT, CHECK, PRIMARY KEY, UNIQUE y FOREIGN KEY
Describir DEFAULT y RULES

Tipos de Integridad de Datos


Existen 4 tipos de Integridad de Datos: Dominio, Entidad, Referencial y UserDefinided. Veamos la sgte. figura:

Integridad de Dominio
El Dominio es el conjunto de valores posibles que puede tomar una columna y determina
si puede aceptar valores NULL. La integridad de Dominio es forzada por los

Ing. Jose luis Herrera Salazar

Page 36

MS SQL Server 2012 Implementando una Base de Datos

Checks y restringiendo el tipo de datos, formato o rango de valores permitidos a una


columna.

Integridad de Entidad
La entidad o Tabla requiere que todos los registros tengan un nico identificador
conocido como valor de la clave primaria (Primary Key:PK). Si el valor de la PK
puede ser cambiado o eliminado depende de la reglas de Integridad de Datos
definidas.

Integridad Referencial
La integridad referencial asegura que las relaciones entre la PK (en una tabla
refrenciada) y la clave fornea (FK) -en cada una de las tablas refrenciadas- sea
siempre mantenida. El mantenimiento de esta relacin significa:
Un registro en una tabla referenciada no puede ser eliminada o la PK no
puede
ser cambiada si la FK refiere a un registro. Por ejemplo no puede
eliminar
clientes que tienen convenios de pago generados.
Un registro no puede ser agregado a una tabla referenciada (tabla
secundaria)
si la FK no existe como PK en la tabla referenciada.

Integridad definida por usuario


Le permite especificar las reglas del negocio propias y para ello podra utilizar
Transacciones, Triggers o Stored Procedures.

Forzando la Integridad de Datos


Puede ser forzada de dos maneras:
Integridad de Datos declarativa
Integridad de Datos procedural

Integridad de Datos Declarativa


Con la Integridad Declarativa se definen criterios en donde los datos son una parte
de la definicin de objetos y SQL Server 7.0 automticamente asegura los
datos conforme a los criterios establecidos. Un ejemplo concreto es la integridad
referencial (cuando no utiliza un CASE caso ERWin). Considere lo sgte.:
La integridad declarativa es parte de la definicin de la BD cuando se usan
CONSTRAINTS
Los CONSTRAINTS soportan ANSI-92

Integridad de Datos Procedural


Con la integridad de datos procedural Ud. puede escribir Scripts para reforzar los
criterios. Se recomienda limitar este tipo de integridad slo cuando aplicar reglas del
negocio. Por ejemplo use este tipo de Integridad cuando desea actualizar el cdigo de
un cliente en cascada para las tablas referenciadas. Considere lo sgte.
Ing. Jose luis Herrera Salazar

Page 37

MS SQL Server 2012 Implementando una Base de Datos

Se puede implementar la Integridad en el cliente mediante le herramienta


de
desarrollo visual
En SQL Server se puede usar DEFAULTS, RULES, TRIGGERS y STORE
PROCEDURES.

Usando CONSTRAINTS
Son los mtodos preferidos para forzar la Integridad de Datos. A continuacin
veremos como aplicar los tipos de CONSTRAINTS.

Determinar el Tipo de CONSTRAINT a usar


Tipo de Integridad

CONSTRAINT

DESCRIPCION

DOMINIO

DEFAULT

Especifica el valor que ser


proporcionado explicitamente al
aplicar una orden INSERT si no
se especifica ningn valor

CHECK

Especifica una regla de


validacin en los datos de la
columna

PRIMARY KEY (PK)

Identifica nicamente a un
registro y asegura que no
existan valores duplicados

UNIQUE

Previene duplcaciones en non


PK. Permite los valores NULL

REFERENTIAL

FOREIGN KEY

Define una o ms columnas


cuyos valores deben coincidir
con los de la tabla
referenciada.

USER-DEFINED

CHECK

Especifica reglas de validacin


en los valores de las columna.

ENTIDAD

Consideraciones para Usar CONSTRAINTS


Considerar los sgte. al implementar CONSTRAINTS
Puede crear, modificar y eliminarlos sin recrear la BD
Deber de programar en el cliente los CONSTRAINTS hechos en SQL Server a
fin de evitar errores al momento de actualizar informacin.
Por defecto SQL Server verifica la data existente cada vez que se crea un
CONSTRAINT.

Ing. Jose luis Herrera Salazar

Page 38

MS SQL Server 2012 Implementando una Base de Datos

Desactivando el Chequeo de Datos Existentes al Crear el CONSTRAINT


Cuando define un CONSTRAINT en una tabla que contiene datos SQL Server verifica la
data automticamente, sin embargo podemos obviar esta validacin, pero se
recomienda los casos sgtes.:
Slo se puede desactivar en CHECK y FK
Para ello incluir o marcar el WITH NO CHECK
Use esta opcin slo cuando se tenga la seguridad de que no se van a
modificar los datos existentes.

Usando DEFAULTS y RULES


Los DEFAULTS y RULES pueden ser includos en una o ms columnas de las tablas.

Creando DEFAULTS
Se activan en una orden INSERT cuando no se tiene valor para la columna que tiene el
DEFAULT. Por ejemplo al realizar una venta la fecha en que se genera siempre ser la
fecha del sistema por DEFAULT Consideraciones:
Slo puede incluir un DEFAULT a una columna
El valor por defecto debe respectar los CONSTRAINTS si se han definido.

Creando un DEFAULT

Ing. Jose luis Herrera Salazar

Page 39

MS SQL Server 2012 Implementando una Base de Datos


Binding un DEFAULT a una columna

Ing. Jose luis Herrera Salazar

Page 40

MS SQL Server 2012 Implementando una Base de Datos


Creando RULES
Las reglas especifican valores aceptados que pueden ser insertados en la BD. Por
ejemplo un rango de valores. As cuando queremos hablar de Saldo de un Productos
podemos definir un RULE que slo permita almacenar valores desde cero a ms.
Consideraciones:
Un RULE puede contener cualquier expresin vlida en un WHERE
Puede incluir un RULE por campo especificado.

Decidiendo qu mtodo a usar para forzar la Integridad de Datos:

Ing. Jose luis Herrera Salazar

Page 41

MS SQL Server 2012 Implementando una Base de Datos

Lab 13: Implementando


Integridad de Datos
Objetivos

Incluir reglas de integridad en SQL Server

Incluya las siguientes reglas de Integridad


1. Defina CONSTRAINTS tipo CHECK de acuerdo a la sgte. tabla
TABLA
FormaPago
Personal

Campo
formapago
Vendedor

Cliente
Marca
proveedor
producto

Cliente
marca

Linea

Linea

2.
3.
4.
5.
6.

Ruc

producto

CONSTRAINT
Carcter de A -Z
La primera letra de A-Z ,
la segunda letra 0-9
Campo de 4 dgitos
Caracteres alfanumricos
Campo de 11 dgitos
Dos primeros caracteres
A-Z , dos sgts, 0-9
El primero carcter, los 2
sgts. alfanumricos.

Defina Defaults para los campos que tomarn la fecha del sistema.
Defina en todos los campo BIT valores 0 por defecto.
Defina Rules para valores mayores que cero
Defina Rules campos que deban almacenar valores mayores o iguales que cero
Defina las reglas en
a. El campo Estado de la Tabla Documento slo puede almacenar valores 'P'
(pendiente), 'C' (cancelado), 'A'anulado
b. El campo tipo de cliente en Cliente slo puede almacenar valores 'A', 'B', 'C

Ing. Jose luis Herrera Salazar

Page 42

MS SQL Server 2012 Implementando una Base de Datos

Sesin 14

MODIFICANDO DATOS

Ing. Jose luis Herrera Salazar

Page 43

MS SQL Server 2012 Implementando una Base de Datos

Sesin 14 .Modificando Datos


En todo sistema de informacin se presentan los cambios continuos en las tablas ya
sea porque se tiene que registrar un nuevo pedido, actualizar el stock de un
producto o eliminar informacin aislada.
Esto lo haremos utilizando las ordenes INSERT, UPDATE y DELETE. Es en este
momento donde se activarn las reglas de integridad de datos permitiendo o
rechazando los cambios que se intenten dar
Objetivos

Conocer la orden INSERT


Conocer la orden UPDATE
Conocer la orden DELETE

Laboratorio:
1.
2.
3.
4.

Inserte un cliente
Inserte un producto
Elimine los clientes que no tienen ventas
Verifique la siguiente instruccin:

UPDATE producto
SET stockac = ( select sum(cantidad* signo) from detadoc d INNER JOIN tipodoc t ON
t.tipodoc = d.tipodoc
WHERE d.producto = producto.producto)

Ing. Jose luis Herrera Salazar

Page 44

MS SQL Server 2012 Implementando una Base de Datos

Sesin 15

MANEJO DE VISTAS

Ing. Jose luis Herrera Salazar

Page 45

MS SQL Server 2012 Implementando una Base de Datos

Sesin 15. Manejo de Vistas


Dentro de las actividades de un sistema de informacin existen un conjunto de
consultas que se repiten en forma constante. Es muy probable tambin que una tabla
con 10 campos por ejemplo sea utilizada por varias usuarios alguno de los cuales slo
le interesarn slo algunos campos. En estos casos dentro de SQL Server se puede
aplicar el concepto de vistas de tal manera que focalicemos la informacin en funcin
a las actividades operativas de los usuarios.
Objetivos

Definir que es una vistas


Cuales son sus ventajas
Cmo se crean las vistas

Definicin de una Vista


Es una tabla virtual que se genera a partir de tablas de una BD partiendo una orden
SELECT con algunas excepciones.
Ejemplo:

Ing. Jose luis Herrera Salazar

Page 46

MS SQL Server 2012 Implementando una Base de Datos


Para consultar la vista creada tendremos:
SELECT * FROM TitleVi

Ventajas de una Vista

Focaliza los datos para los usuarios


Simplifica el manejo de los permisos
Organiza datos para exportar a Otras aplicaciones

Creando Vistas
Se tiene la sgte. sintxis
CREATE VIEW [view owner.]view _name
[(column[, ...n])]
[WITH ENCRYPTION] AS

select_statement

[WITH CHECK OPTION]

1. Imagine que desea crear una vista en la que aparezca los documentos
acumulando el valor que representa cada uno
CREATE VIEW v_documento
SELECT d.nrodoc, d.fecha, d.ruccliente, SUM(l.valor) AS valor
FROM docum d INNER JOIN lineadocum l ON d.nrodoc =l.nrodoc
GROUP BY d.nrodoc, d.fecha, d.ruccliente
Si queremos visualizar la informacin de la vista tendremos:
SELECT * FROM v documento

2. Se desea tener la informacin del producto vendido, su nombre, el nombre del


vendedor la cantidad y el valor de cada producto vendido.
CREATE VIEW v_lineas
SELECT l.nrodoc, p.desscripcion, v.nomvendor, l.cantidad, l.valor
FROM lineadocum l INNER JOIN docum d ON d.nrodoc =l.nrodoc
INNER JOIN vendedor v ON d.vendedor=v.vendedor
INNER JOIN producto p ON p.producto =l.producto

Ing. Jose luis Herrera Salazar

Page 47

MS SQL Server 2012 Implementando una Base de Datos

Sesin 16

MANEJO DE TRIGGERS

Ing. Jose luis Herrera Salazar

Page 48

MS SQL Server 2012 Implementando una Base de Datos

Sesin 16. Implementando Triggers


Constituyen una forma avanzada de Integridad de Datos ya que permite asegurar que
las reglas de negocio se plasmen automticamente cuando se ejecuta un cambio en la
BD. Por ejemplo cada vez que se realiza un ingreso de productos al almacn
automticamente debe de actualizarse el stock del producto.
Objetivos

Describir el uso de un Trigger y cuando debe ser usado


Cmo se crea un Trigger.
Describir como trabaja un Trigger

Introduccin a los Triggers


Qu es un Trigger ?
Un Trigger es un tipo especial de Stored Procedure que se ejecuta automticamente
cundo se pretende realizar un cambio a una tabla de la BD, es decir cuando se aplica:
UPDATE, DELETE, INSERT.

Caractersticas

Van asociados a una Tabla


Son invocados automticamente
No pueden ser llamados directamente
Constituyen una transaccin

Usos de un Trigger

Modificaciones en cascada para tablas relacionadas (Padre-Hijo); por ejemplo:


Docum y LineaDocum
Forzar la complejidad de la Integridad de Datos
Personalizar mensajes de error
Comparar el estado de un registro antes o despus de un cambio

Las Tablas deleted e inserted


Cuando se activa la ejecucin de un Trigger automticamente aparecen 2 tablas:
inserted y deleted.
La tabla deleted almacena informacin de todos los registros afectados
a
consecuencia de una orden DELETE UPDATE
La tabla inserted almacena informacin de todos los registros afectados
a
consecuencia de una orden INSERT UPDATE
Estas dos tablas constituyen una gran utilidad en el manejo de los triggers ya que ser
usadas para determinar el estado actual y nuevo del dato a modificar como ser ver a
continuacin.

Ing. Jose luis Herrera Salazar

Page 49

MS SQL Server 2012 Implementando una Base de Datos

Creando Triggers
Se utilizar la orden CREATE TRIGGER. Para lo cual es necesario tener los permisos
respectivos
CREATE TRIGGER trigger_name ON

table

[WITH ENCRYPTION] {FOR


{[INSERT][,][UPDATE][,][DELETE]}
[WITH APPEND]

[NOT FOR REPLICATION] AS


sql statement [,...n]}

Por ejemplo, cuando se produce un ingreso de un producto al


almacn automticamente debera de actualizar el stock actual del producto
CREATE TRIGGER ti_producto
ON producto
FOR INSERT
AS
/* Capturando datos ha actualizar */
UPDATE producto
SET stockac = stockac + inserted.cantidad
FROM lineadocum l INNER JOIN inserted
ON l.nrodoc = inserted.nrodoc AND l.idproducto = inserted.producto

Cmo Trabaja un INSERT Trigger

Existe una orden INSERT asociada con un INSERT Trigger


La orden INSERT es ejecutada
El INSERT Trigger es disparado con todas las rdenes SQL definidas dentro del
Trigger

Cuando se dispara el Trigger la nueva informacin es almacenada en la Tabla en que se


produce el INSERT y la tabla inserted. La tabla inserted es una tabla lgica que
permanece en memoria y sobre la cual podemos hacer mencin en cualquiera de sus
campos a fin de disparar alguna accin en otras tablas si deseamos.

Cmo Trabaja un DELETE Trigger

Existe una orden DELETE asociada con un DELETE Trigger


La orden DELETE es ejecutada
El DELETE Trigger es disparado con todas las rdenes SQL definidas dentro del
Trigger

Cuando se dispara el Trigger la informacin eliminada es almacenada en la Tabla en la


tabla deleted. La tabla deleted es una tabla lgica que permanece en memoria y

Ing. Jose luis Herrera Salazar

Page 50

MS SQL Server 2012 Implementando una Base de Datos

sobre la cual podemos hacer mencin en cualquiera de sus campos a fin de disparar
alguna accin en otras tablas si deseamos.
Por ejemplo, cuando se produce la eliminacin de la lnea de una factura
automticamente debera de actualizar el stock actual del producto deduciendo la
cantidad eliminada
CREATE TRIGGER td_producto
ON producto
FOR DELETE
AS
/* Capturando datos ha actualizar */
UPDATE producto
SET stockac = stockac - deleted.cantidad
FROM lineadocum l INNER JOIN deleted
ON l.nrodoc = inserted.nrodoc AND l.idproducto = inserted.producto

Cmo Trabaja un UPDATE Trigger

Existe una orden UPDATE asociada con un UPDATE Trigger


La orden UPDATE es ejecutada
El INSERT Trigger es disparado con todas las rdenes SQL definidas dentro del
Trigger

Cuando se dispara el Trigger la nueva informacin es almacenada en la Tabla inserted y


la informacin que se cambia es almacenada en la tabla deleted. La tabla inserted, as
como la tabla deleted, son tablas lgica que permanece en memoria y sobre la cual
podemos hacer mencin en cualquiera de sus campos a fin de disparar alguna accin en
otras tablas si deseamos.
Por ejemplo, cuando se produce la modificacin de la lnea de un documento grabado
anteriormente, automticamente debera de actualizar el stock actual del producto
deduciendo la cantidad cambiada y agregando el nuevo valor.
CREATE TRIGGER tu_producto
ON producto
FOR UPDATE
AS
/* Capturando datos ha actualizar */
UPDATE producto
SET stockac = stockac - deleted.cantidad + inserted.cantidad
FROM lineadocum l INNER JOIN deleted
ON l.nrodoc = inserted.nrodoc AND l.idproducto = inserted.producto

Ejercicio

Crear los trigger respectivos para actualizar el saldo de un cliente cada vez que
ste realiza una compra al crdito o paga un documento.
Crear un trigger para actualizar las compras efectuadas.

Ing. Jose luis Herrera Salazar

Page 51

MS SQL Server 2012 Implementando una Base de Datos

Lab 16: Implementando Triggers


Objetivos

Preparar triggers para actualiza el Stock del producto y el Saldo de cliente para una
venta al crdito

a. Al realizar una venta el contado o crdito


CREATE TRIGGER ti_detadoc_stock ON dbo.DETADOC
FOR INSERT
AS
DECLARE

@valor numeric(9,2), @cliente CHAR(6), @fp CHAR(1)


-- Capturando variables

SELECT @fp = p.formapago, @cliente =d.cliente, @valor = SUM(i.cantidad*i.precunit) FROM inserted i


INNER JOIN documento d ON i.documento = d.documento AND i.tipodoc = d.tipodoc
INNER JOIN pedido p

ON d.pedido = p.pedido

GROUP BY p.formapago, d.cliente


-- Actualizando el stock
UPDATE producto
SET stockac =stockac + i.cantidad * t.signo FROM inserted i INNER JOIN
producto ON i.producto = producto.producto
INNER JOIN tipodoc t ON t.tipodoc = i.tipodoc
/* Actualizando saldo de cliente, si la venta no es al contado */

IF

@fp o 'C
UPDATE cliente SET saldo = saldo + @valor WHERE cliente = @cliente

Ing. Jose luis Herrera Salazar

Page 52

MS SQL Server 2012 Implementando una Base de Datos


b. Al eliminar una Venta
CREATE TRIGGER td_detadoc_stock ON dbo.DETADOC
FOR DELETE
AS
DECLARE @valor numeric(9,2), @cliente CHAR(6), @fp CHAR(1)
-- Capturando variables
SELECT @fp = p.formapago, @cliente =d.cliente, @valor = SUM(i.cantidad*i.precunit) FROM deleted i
INNER JOIN documento d ON i.documento = d.documento AND i.tipodoc = d.tipodoc
INNER JOIN pedido p

ON d.pedido = p.pedido

GROUP BY p.formapago, d.cliente


-- Actualizando el stock
UPDATE producto
SET stockac =stockac - i.cantidad * t.signo FROM deleted i INNER JOIN
producto ON i.producto = producto.producto
INNER JOIN tipodoc t ON t.tipodoc = i.tipodoc /*
Actualizando saldo de cliente, si la venta no es al contado */ IF
@fp o 'C
UPDATE cliente SET saldo = saldo - @valor WHERE cliente = @cliente

c. Prepare el Trigger respective en el caso de una modificacin

Ing. Jose luis Herrera Salazar

Page 53

MS SQL Server 2012 Implementando una Base de Datos

Sesin 17

IMPLEMENTANDO STORED PROCEDURES

Ing. Jose luis Herrera Salazar

Page 54

MS SQL Server 2012 Implementando una Base de Datos

Sesin 17. Implementando Stored Procedures


Los SP permiten incrementar la performance de la BD, realzan la seguridad de la BD e
incorporan tcnicas de programacin basadas en el Transact SQL. A continuacin
veremos los tipos de SP, como crearlos y ejecutarlos..
Objetivos

Describir el propsito y razones de usar SP.

Explicar como se procesa un SP en SQL Server.

Determinar cuando usar SP para completar tareas en SQL Server.

Definicin
Es una coleccin de ordenes Transact-SQL que van orientados a incrementar la
performance de las tareas repetitivas. Por ejemplo si desea realizar un clculo de
planillas o realizar un proceso de facturacin en Batch. Es recomendable usarlos
cuando desde el cliente se van a ejecutar ms de una instruccin SQL. Tienen la
capacidad de aceptar parmetros y de retornar valores . Por ejemplo imagine el
clculo de planillas teniendo una interfaz desde la aplicacin tal como se muestra en el
siguiente diagrama:

Tipos
Existen 5 tipos
System
Local
Temporary
Re mote
Extended

Ing. Jose luis Herrera Salazar

Page 55

MS SQL Server 2012 Implementando una Base de Datos


System SP
System SP son almacenados en la Base de Datos Master y llevan tpicamente el
prefijo sp_, pueden invocar el llamado de datos de las tablas del sistema, ejecutar
tareas administrativas y tareas de seguridad.
Por ejemplo, si desea conocer la informacin del catlogo de la tabla de cliente
puede ejecutar sp_help de la siguiente manera:

Sp_help cliente

Local SP
Son comnmente los ms usados y corresponden a los Stored Procedures que vamos
creando en nuestros servidores locales.

Ventajas de las SP
Compartir lgica de aplicaciones: Un Stored Procedure puede ser invocado
desde una plataforma Window o desde el Web.

Proporciona Mecanismos de Seguridad:


Representan cierta ventaja en la simplificacin de las tareas de seguridad,
dado que slo es necesario tener permiso de ejecucin no importando que
tenga acceso a las tablas involucradas dentro del Stored Procedure.
Es una de las formas ms recomendadas para el llamado desde aplicaciones Web.

Incrementan la Performance:
Dado que los procesos se realizan en el servidor los tiempos de ejecucin tienden a
ser mejores.

Ing. Jose luis Herrera Salazar

Page 56

MS SQL Server 2012 Implementando una Base de Datos

Reducen el trfico de red


Dado a que la lgico de proceso se encuentra en el servidor el llamado desde la
aplicacin (cliente) a la Base de Datos (servidor) se limita al mandado de
parmetros.

Creando Stored Procedures


Sixtxis:

CREATE PROCEDURE <Nombre Stored ProO [

@parmetro tipo_dato [ = default ] [ OUTPUT ]


]

AS

<ordenes_SQL>
Por ejemplo: vamos a suponer que queremos conocer los clientes que nos
adeudan 2 documentos pendientes de pago:

CREATE PROCEDURE spCom_VerificaCredito


@codigo CHAR(4)
es un parmetro de entrada desde la

aplicacin

AS

Imagine que para los clientes tipo 'A' no se produce


validacin SET NOCOUNT ON IF (SELECT tipocliente FROM cliente

WHERE cliente = @codigo) = 'A


SELECT 0 As DocPendientes -- Esto llegara como RecordSet al
cliente ELSE
-- Se produce verificacin para cliente en el estado del documento si es diferente de

tipo 'A'

SELECT DocPendientes = COUNT(*) -- Esto llegara como RecorsSet


al cliente
T7T-

V. .

rni

El llamado de la interfaz podra ser:

Ing. Jose luis Herrera Salazar

Page 57

MS SQL Server 2012 Implementando una Base de Datos


El cdigo muestra desde Visual Basic sera:

Private Sub TxtCliente_Validate(Cancel As Boolean)


Dim rs As adodb.Recordset
Dim sql As String
' Llamado del Stored Procedure
sql = " EXEC spCom_VerificaCredito @codigo='" & TxtCliente.Text & "'"
rs.Open sql, cn, adOpenForwardOnly, adLockOptimistic
' Ntese DocPendientes viene del Stored Procedure If
rs!DocPendientes > 1 Then
MsgBox
"Crdito
No
Procede!!!
Nro
Doc
Pendientes
="
&
Str(rs! DocPendientes) Else
MsgBox "Crdito Procede!!! Nro Doc Pendientes =" & Str(rs!DocPendientes) End
If Set rs = Nothing
Pi

Ing. Jose luis Herrera Salazar

Page 58

MS SQL Server 2012 Implementando una Base de Datos


Usando parmetros en Stored Procedures
Los SP tienen la capacidad de recibir parmetros y de entregar valores.

Parmetros de Entrada
Son aquellos que reciben los valores mandados desde la aplicacin, pueden incluirse
valores por defecto los mismos que entraran a trabajar en el caso no hayan definido
al momento de su llamado. En el caso de que hayan sido definidos como cadena,
tomarn la longitud del parmetro en el SP.

CREATE PROCEDURE spCom_VerificaCredito


@codigo CHAR(4)
-- es un parmetro de entrada desde la aplicacin
AS
-- deben ser definidos con su tipo de dato
respectivo
Formas de ejecutar un Stored Procedure desde el Analizador de Consultas:

EXEC spCom_VerificaCredito 'CLI1'

--Llamado por posicin

EXEC spCom_VerificaCredito @codigo= 'CLI1'


-- Llamado por nombre de
parmetro, recomendada

Retornando Valores usando parmetros de salida:


CREATE PROCEDURE Formula
@m1 smallint,
@m2 smallint,
@resultado smallint OUTPUT
-- parmetro de salida
AS
SET @resultado = @m1* @m2 -- el ltimo valor de @resultado ser

es el devuelto

DECLARE @Valor smaI int


EXECUTE Formula 7,5, @Valor OUTPUT
SELECT 'Resultado = ', @Valor

--observe OUTPUT
Resultado = 35

Manejando Cursores en un Stored Procedure


Existe necesidad de hacer recorridos secuenciales a un grupo de registros, ya sea por
ejemplo el realizar un clculo de planillas, en donde trabajador por trabajador vamos
calculando los importes de ingresos, descuentos y cuotas patronales; o de realizar un
clculo de intereses a un grupo de clientes 1 por uno. En este caso SQL Server nos
ofrece la posibilidad de realizar estos barridos secuenciales utilizando cursores.
Como se ver a continuacin el trabajo con cursores no es muy complicado, pero
podra restar tiempos de ejecucin del servidor, ya que los cculos se realizan con los
recursos directos de la memoria del servidor, por ello se recomienda trabajar con
Ing. Jose luis Herrera Salazar

Page 59

MS SQL Server 2012 Implementando una Base de Datos


ellos cuando es necesario.
El manejo de cursores se asemeja a procesar :

Un recordset en Visual Basic , preguntando por el EOF (fin de archivo), con su


bucle Do While para procesarlo y con MoveNext avanzar al sgte registro.
Una tabla en Visual Fox, verificando el fin de archivo, con un bucle While para
procesarlo y un Skip para avanzar al sgte registro.
Recorrer un Data Window, verificando con la funcin RowCount() y con el
bucle For procesarlo directamente.

Pasos

Declarar el cursor

DECLARE Nombre_Cursor CURSOR


FOR orden_select
se declara a partir de una orden

Abrir el cursor

OPEN Nombre Cursor

Leer el cursor. Para leer el cursor es necesaria almacenar su


informacin en variables de memoria. La cantidad de variables est
en funcin al nmero de campos definidos en el SELECT. FETCH
tambin cumple la funcin de preparar el avance para el siguiente
registro del cursor. Por defecto avanza al siguiente registro (NEXT)

FETCH [NEXT|PRIOR|FIRST |LAST] Nombre_Cursor INTO <lista_variab_memoria>


Verificar que exista informacin en el cursor
@@fetch_status = 0 -- cuando es cero significa que existe
informacin por procesar en el

Procesar el cursor
WHILE
@@fetch_s
tatus = 0
BEGIN
<procesar el cursor>
FETCH Nombre_Cursor INTO <lista_variab_memoria> -leer, avanzar END
Cerrar el cursor

CLOSE Nombre Cursor

Desactivarlo de memoria

DEALLOCATE Nombre Cursor


Por Ejemplo:
Suponga que desea mostrar el detalle de movimientos de un producto sus
ingresos y sus salidas, lo que sera el tener un Kardex del producto

Ing. Jose luis Herrera Salazar

Page 60

MS SQL Server 2012 Implementando una Base de Datos

Lab
17:
Implementando
Stored Procedures
Objetivos

Combinar la potencialidad de programacin del lado del servidor que ofrece SQL
Server.

a. Generador de Nros a partir de un formato establecido


CREATE PROCEDURE sp_siguenumero_doc @doc
CHAR(1),
@tipo tinyint,
-- Ver valores para tipo
@number CHAR(9) OUTPUT -- Valores para
tipo
/* devuelve el correlativo segun el tipo de documento y el centro de servicio */
/* 1 -> Incrementa un valor al tipo documento
*/ /* 2 ->
Disminuye
el valor al tipo documento
*/ /* 3 -> Consulta Valor del
tipo de documento actual */ /* 0 -> Consulta Valor siguiente al
documento actual */ AS
DECLARE @cuenta tinyint, @suma smallint, @factor tinyint SET
NOCOUNT ON
SELECT @number =serie +REPLICATE('0', 6 - LEN(LTRIM(RTRIM(numero+1)))) +
LTRIM(RTRIM(numero+1)) FROM tipodoc WHERE tipodoc = @doc IF @@rowcount
= 0 BEGIN
RAISERROR(' No Se han Programado numeracion para esta Actividad ', 16, 1)

RETURN END
ELSE
BEGIN
IF @tipo = 1
BEGIN

UPDATE tipodoc
SET numero = numero + 1
WHERE tipodoc = @doc SELECT @number
=serie +REPLICATE('0', 6 - LEN(LTRIM(rtrim(numero))))+LTRIM(rtrim(numero))
FROM tipodoc
WHERE tipodoc = @doc END

IF

@tipo = 2
BEGIN

UPDATE tipodoc SET numero = numero - 1


WHERE tipodoc= @doc
SELECT @number = serie +REPLICATE('0', 6 - LEN(LTRIM(rtrim(numero)))) + LTRIM(rtrim(numero))
FROM tipodoc cn
WHERE tipodoc = @doc END
IF
@tipo = 3
SELECT @number =serie +REPLICATE('0', 6 - LEN(LTRIM(rtrim(numero))))+LTRIM(rtrim(numero))
FROM tipodoc
WHERE tipodoc = @doc END

SELECT @number AS numero GO

Ing. Jose luis Herrera Salazar

Page 61

MS SQL Server 2012 Implementando una Base de Datos


b. Generando Cronograma de Pagos:
El presente ejemplo supone una venta realizada al Crdito, en donde se necesitan como
parmetros el Nro de Documento, Tipodoc y Nro de Cuotas a financiar el crdito

Creando Tabla Cronograma


CREATE TABLE cronograma (idCronograma INT NOT NULL IDENTITY(1,1) PRIMARY
KEY,
Documento CHAR(9), TipoDoc CHAR(1), Importe numeric(9,2),
Interes numeric(9,2), IgvInteres numeric(9,2), feVence datetime, Fepago datetime,
estado CHAR(1) NOT NULL DEFAULT 'P')

Preparando el Stored Procedure


CREATE PROCEDURE sp_Genera_Cronograma @Doc
CHAR(9), @td CHAR(1), @NroCuotas int AS
DECLARE @igv numeric(9,2),
@Cuenta smallint

@Interes numeric(9,2), @Deuda numeric(10,2),

SET NOCOUNT ON
-- Capturando IGV
SELECT @igv = Igv/100, @Interes = TasaInt /100 FROM parametro WHERE activo =

Calculando Deuda para documento ingreado


SELECT @Deuda = SUM(cantidad * precUnit) FROM detadoc
WHERE documento = @doc AND tipodoc = @td
SET @Cuenta = 0 -- Empieza
Generacin de Cuotas WHILE
@Cuenta < @NroCuotas BEGIN
SET @Cuenta = @Cuenta + 1
INSERT cronograma ( Documento , TipoDoc , Importe ,Interes, IgvInteres, feVence )
VALUES (@doc, @td, @Deuda / @NroCuotas, @Deuda * @Interes , @Deuda* @Interes
*@Igv,
DATEADD( mm, @Cuenta, GETDATE()) )
Observese el uso de DATEADD incrementa: @Cuenta a la fecha de referencia
getdate() ,
Un tiempo : mm-meses
END
-- mostrado datos al cliente
SELECT * FROM cronograma WHERE documento = @doc AND tipodoc = @td
GO

Ejemplo de ejecucin desde el Query Analyzer exec sp_Genera_Cronograma


@doc = '100000017', @td = 'F', @NroCuotas = 10

c. Reportando un Kardex de Producto:


Uno de los reportes tradicionales en un Sistema de Comercializacin lo constituye el
conocer los movimientos de un producto determinado. Es decir mostrar las compras y
Ing. Jose luis Herrera Salazar

Page 62

MS SQL Server 2012 Implementando una Base de Datos


ventas. En este sentido nuestro modelo propuesto incluye tanto compras como ventas
en las tabla documento y detadoc. Veamos la interfaz propuesta desde el cual se hara
el llamado respectivo:

a. Interfaz posible que invoque al Store Procedure

Ing. Jose luis Herrera Salazar

Page 63

MS SQL Server 2012 Implementando una Base de Datos


Es fundamental la presentacin de los movimientos ordenados en forma cronolgica y la
idea es ir calculando el Stock por cada movimiento procesado secuencialmente. Para ello
prepararemos una tabla temporal la cual la recorreremos con Cursores y lnea a lnea
iremos calculando el Stock respectivo

Preparando el Store Procedure para reportar el Kardex de un Producto

CREATE PROCEDURE spt_Kardex

@producto CHAR(4) AS

SET NOCOUNT ON
Preparando Tabla Temporal
DECLARE @stockac numeric(9,2)
SET @stockac = 0 Asignando Valor
Preparando Tabla Temporal con Movimientos para producto requerido
SELECT d.documento , d.tipodoc, d.fecha, dd.cantidad, t.signo, @stockac AS Stock-stock se
genera con valor 0
INTO #Kardex Permite crear una nueva tabla , en este caso #Kardex - que es temporal
FROM documento d INNER JOIN detadoc dd ON d.documento = dd.documento AND
d.tipodoc = dd.tipodoc
INNER JOIN tipodoc t ON t.tipodoc = d.tipodoc
WHERE dd.producto = @producto -- Paso 1 Declarando Cursor
DECLARE c_Kardex CURSOR
FOR SELECT documento, tipodoc, cantidad , signo FROM #Kardex ORDER BY fecha, signo
DESC
-- Aparece desde el ms antiguo al mas nuevo, venta mismo da 1ro ingresos
-- Paso 2. Abriendo Cursor
OPEN c_Kardex
DECLARE @doc char(9), @td char(1), @can numeric(9,2), @signo smallint
Paso 3. Leyendo Cursor y preparando para sgte registro
FETCH c_Kardex INTO @doc, @td, @can, @signo
Paso 4. Procesando Cursor mientras existan datos
WHILE @@fetch_status = 0
BEGIN
SET @Stockac = @stockac + @can * @signo
UPDATE #Kardex SET stock = @stockac WHERE
documento = @doc AND tipodoc = @td
FETCH c_Kardex INTO @doc, @td, @can, @signo

END
-- Paso 5. Cerrando Cursor
CLOSE c_Kardex
-- Paso 6 . Desactivando de memoria
DEALLOCATE c_Kardex
Preprando Datos para devolver a la aplicacin
SELECT tipodoc +'-' + documento AS documento,
tipomov = CASE WHEN signo = 1 THEN 'Ingreso' ELSE 'Salida' END,
fecha, cantidad, stock
FROM #kardex
ORDER BY fecha, signo DESC
GO

Ejemplo de ejecucin desde el Query Analyzer


EXEC spt_Kardex @producto= 'PR02'

Ing. Jose luis Herrera Salazar

Page 64

MS SQL Server 2012 Implementando una Base de Datos

Sesin 18

IMPLEMENTANDO FUNCIONES

DEFINIDAS POR USUARIO

Ing. Jose luis Herrera Salazar

Page 65

MS SQL Server 2012 Implementando una Base de Datos

Sesin 18. Implementando Funciones Definidas


por
Usuario
A partir de la versin 2000 Sql Server proporciona la capacidad de que uno mismo
pueda crear sus propias funciones
Algunas de estas funciones pueden ejecutarse desde una orden SELECT u otra orden
del lenguaje de modificacin de datos
Objetivos

Describir funciones escalares


Describir funciones multistatement Table-valued
Describir funciones In-Line Tabled-Value

Sintaxis
CREATE FUNCTION <nombre_function>
(<lista_de_parmetros>)
RETURNS (tipo_dato_esperado_que _retorne)
AS
BEGIN
(<ordenes_sql>
RETURN <valor_devuelto_funcion>)
END

Ejemplo:

Suponga que desea calcular el inters que debe tener un documento pendiente en
funcin a los das transcurridos desde su emisin

Ing. Jose luis Herrera Salazar

Page 66

MS SQL Server 2012 Implementando una Base de Datos

Lab 18: Implementando


Funciones Definida por Usuario
Objetivo

Aplicar una funcin escalar y determinar su utilidad a partir de una orden SELECT

Funcin que calcula la mora


CREATE FUNCTION f_CalculaInteres
(@f1 datetime, @f2 datetime)
RETURNS numeric(9,2)
AS
BEGIN
DECLARE @mora numeric(9,2)
IF @f2 - @f1 > 0
BEGIN
DECLARE @TasaLegal numeric(9,2)
SELECT @TasaLegal = TasaLegal /100 FROM parametro WHERE activo = 1
DATEDIFF toma los <dd -dias > transcurridos SET @mora =
DATEDIFF(dd, @f1, @f2) * @tasaLegal END ELSE SET @mora = 0
RETURN @mora END

Llamando a la funcin desde una orden SELECT


SELECT *, DBO. f_CalculaInteres (FECHA, GETDATE())

Ing. Jose luis Herrera Salazar

fROM documento

Page 67

MS SQL Server 2012 Implementando una Base de Datos


Anexo 1: Tipos de datos
En MS SQL Server, cada columna, variable local, expresin y parmetro tiene un tipo de datos. El conjunto de tipos de
datos suministrados por el sistema se muestra debajo. Los tipos de datos definidos por el usuario, que son alias de los
tipos de datos suministrados por el sistema, pueden tambin definirse.
Booleano

bigint
Datos enteros desde -2A63 (-9223372036854775808) al 2A63-1
(9223372036854775807).

bit
Datos enteros con valor 1 0.
Enteros

int

Datos enteros (nmeros enteros) comprendidos entre -231 (-2.147.483.648) y 231 - 1 (2.147.483.647).

smallint

Datos enteros comprendidos entre 215 (-32.768) y 215 - 1 (32.767). tinyint


Datos enteros comprendidos 0 y 255.
Decimales y numricos

decimal
Datos de precisin y escala numrica fijas comprendidos entre -1038 -1 y 1038 -1.

numrico
Sinnimo de decimal.
money y smallmoney

money

Valores de moneda comprendidos entre -263 (-922.337.203.685.477,5808) y 263 - 1


(+922.337.203.685.477,5807), con una precisin de una diezmilsima de la unidad monetaria.

smallmoney

Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisin de una diezmilsima de la
unidad monetaria. Numricos con aproximacin

float
Nmeros con precisin de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308.

real
Nmeros con precisin de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38.
Cronolgicos

datetime
Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisin de un
trescientosavo de segundo, o 3,33 milisegundos.

smalldatetime
Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079, con una precisin de un minuto.
Cadenas de caracteres

char
Datos de caracteres no Unicode de longitud fija con una longitud mxima de 8.000 caracteres.

va rc ha r
Datos no Unicode de longitud variable con un mximo de 8.000 caracteres.

text
Datos no Unicode de longitud variable con una longitud mxima de 231 - 1 (1.147.483.647)
caracteres.
Cadenas binarias

binary

Datos binarios de longitud fija con una longitud mxima de 8.000 bytes. varbinary
Datos Unicode de longitud variable con una longitud mxima de 8.000 bytes.

image

Datos Unicode de longitud variable con una longitud mxima de 231 - 1 (1.147.483.647) bytes.
Ing. Jose luis Herrera Salazar

Page 68

También podría gustarte