SQL Server 2012 Implementación General
SQL Server 2012 Implementación General
SQL Server 2012 Implementación General
Page 1
Page 2
TABLA DE CONTENIDO
Sesin
Tema
El Transact- SQL
10
Recuperando Datos
11
12
Sumarizando Datos
13
14
Modificando Datos
15
Implementando Vistas
16
Implementado Triggers
17
18
Page 3
SESION
08
Page 4
PLANIFICACIN DE LA CLASE
Veremos los tpicos siguientes:
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.
Page 5
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.
Page 6
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.
C O B R ANZ AS
Actualizar el saldo del cliente cada vez que se produzca una amortizacin 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.
Page 7
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
Page 8
Page 9
Expanda la BD Tenebrosa
Seleccione Diagrams, y siga los pasos del asistente
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.
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.:
Page 10
Page 11
Page 12
Sesin 09
EL TRANSACT-SQL
Page 13
Objetivos
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
Page 14
ORDEN
GRANT
DENY
REVOKE
Descripcin
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
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)
SELECT
INSERT
UPDATE
DELETE
Page 16
Variables Locales
Definidas por el
usuario Son definidas
usando :
DECLARE @variable_local
<tipo_dato> [<long>]
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 (=)
Page 17
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
Page 18
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
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
cliente
CLI3
CLI3
(2 row(s) affected)
Page 19
DiasTranscurridos
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
Sintaxis:
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
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
precio
PR06
PR07
Precio es=100.00
Precio es=15.00
(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.
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
(3 row(s) affected)
Ing. Jose luis Herrera Salazar
Page 21
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:
Comentarios:
Page 22
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
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
Page 23
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.
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
Page 24
Ejecucin
Se tienen las sgts. posibilidades
Page 25
Sesin 10
RECUPERANDO DATOS
Page 26
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
Page 27
Sesin 11
Page 28
Sintxis:
SELECT {nombre campo} [, ...n] FROM
{tabla_o_vista}
[
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.
Page 29
Lista de Requerimientos
Page 30
Sesin 12
SUMARIZANDO DATOS
Page 31
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
Page 32
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 ]
Page 33
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.
Page 34
Sesin 13
IMPLEMENTANDO
INTEGRIDAD DE DATOS
Page 35
Objetivos
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
Page 36
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.
Page 37
Usando CONSTRAINTS
Son los mtodos preferidos para forzar la Integridad de Datos. A continuacin
veremos como aplicar los tipos de CONSTRAINTS.
CONSTRAINT
DESCRIPCION
DOMINIO
DEFAULT
CHECK
Identifica nicamente a un
registro y asegura que no
existan valores duplicados
UNIQUE
REFERENTIAL
FOREIGN KEY
USER-DEFINED
CHECK
ENTIDAD
Page 38
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
Page 39
Page 40
Page 41
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
Page 42
Sesin 14
MODIFICANDO DATOS
Page 43
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)
Page 44
Sesin 15
MANEJO DE VISTAS
Page 45
Page 46
Creando Vistas
Se tiene la sgte. sintxis
CREATE VIEW [view owner.]view _name
[(column[, ...n])]
[WITH ENCRYPTION] AS
select_statement
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
Page 47
Sesin 16
MANEJO DE TRIGGERS
Page 48
Caractersticas
Usos de un Trigger
Page 49
Creando Triggers
Se utilizar la orden CREATE TRIGGER. Para lo cual es necesario tener los permisos
respectivos
CREATE TRIGGER trigger_name ON
table
Page 50
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
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.
Page 51
Preparar triggers para actualiza el Stock del producto y el Saldo de cliente para una
venta al crdito
ON d.pedido = p.pedido
IF
@fp o 'C
UPDATE cliente SET saldo = saldo + @valor WHERE cliente = @cliente
Page 52
ON d.pedido = p.pedido
Page 53
Sesin 17
Page 54
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
Page 55
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.
Incrementan la Performance:
Dado que los procesos se realizan en el servidor los tiempos de ejecucin tienden a
ser mejores.
Page 56
AS
<ordenes_SQL>
Por ejemplo: vamos a suponer que queremos conocer los clientes que nos
adeudan 2 documentos pendientes de pago:
aplicacin
AS
tipo 'A'
V. .
rni
Page 57
Page 58
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.
es el devuelto
--observe OUTPUT
Resultado = 35
Page 59
Pasos
Declarar el cursor
Abrir el cursor
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
Desactivarlo de memoria
Page 60
Lab
17:
Implementando
Stored Procedures
Objetivos
Combinar la potencialidad de programacin del lado del servidor que ofrece SQL
Server.
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
Page 61
SET NOCOUNT ON
-- Capturando IGV
SELECT @igv = Igv/100, @Interes = TasaInt /100 FROM parametro WHERE activo =
Page 62
Page 63
@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
Page 64
Sesin 18
IMPLEMENTANDO FUNCIONES
Page 65
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
Page 66
Aplicar una funcin escalar y determinar su utilidad a partir de una orden SELECT
fROM documento
Page 67
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
decimal
Datos de precisin y escala numrica fijas comprendidos entre -1038 -1 y 1038 -1.
numrico
Sinnimo de decimal.
money y smallmoney
money
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