Transact SQL - Introducción a la programación en SQL Server
1. I
Instituto de Educación Superior
Tecnológico Público Argentina
Dirección Regional de
Educación de Lima
Metropolitana
Ministerio de
Educación
PERÚ
Mg. Alex Tito Belleza Porras
Transact SQL – Parte 1
Carrera profesional
Computación
2. I
¿Qué es Transact SQL?
Programación en SQL SERVER
Transact SQL es el lenguaje de programación que
proporciona SQL para ampliar la forma de obtener la
información, por ejemplo se definen variables locales, se
estructuran sentencias de control de flujo como if y case y
el control de repeticiones con while.
3. I
¿Transact SQL?
Programación en SQL SERVER
Transact SQL proporciona palabras clave especiales
llamadas lenguaje de control de flujo que permiten
controlar el flujo de ejecución de las instrucciones.
El lenguaje de control de flujo se puede utilizar en
instrucciones sencillas, lotes, procedimientos almacenados
y disparadores.
4. I
¿Qué es una variable?
Programación en SQL SERVER
Una variable es un espacio de memoria a la que se asigna un
determinado valor. Este valor puede cambiar durante el lote o el
procedimiento almacenado donde se utiliza la variable:
SQL
SERVER
2 tipos de variables
Locales
Definidas por el
usuario
Globales
Suministra el sistema,
solo se invoca
Proporciana
5. I
¿Qué tener en cuenta de las variables ?
Programación en SQL SERVER
• Las variables locales se declaran, nombran y escriben
mediante la palabra clave DECLARE, y reciben un valor
inicial mediante una instrucción SELECT o SET.
• Los nombres de las variables locales deben empezar con el
símbolo “@”.
• A cada variable local se le debe asignar un tipo de dato
definido por el usuario.
6. I
Declarando de una variable
Programación en SQL SERVER
DECLARE @VARIABLE TIPO_DATOS.
Asignando valores a las variables
SET @VARIABLE = VALOR O SENTENCIA
SELECT @VARIABLE = VALOR O SENTENCIA
7. I
Declarar la variable edad de tipo entero, asignarle un valor y
mostrarlo mediante la sentencia SELECT
declare @edad int
set @edad = 18
select @edad
Otra Forma:
declare @edad int=18
select @edad
Nota: Se puede declarar y asignar en una misma línea; si necesita
realizar más declaraciones y asignaciones será cuestión de separarlos por
comas
declare @edad int = 10
print @edad
Ejemplo 01:
8. I
Si la impresión está acompañada de un texto representativo del valor se
debe tener en cuenta que los valores sean de tipo Char o Varchar, de otra
manera tendríamos que aplicar la sentencia CAST o CONVERT.
declare @edad int = 18
select 'El numero es: '+CAST(@edad as varchar(10))
Ejemplo 01:
CAST(VARIABLE O VALOR AS TIPO_DATOS)
CONVERT(TIPO_DATOS, VARIABLE O VALOR)
9. I
Ejemplo 02:
Script que permita calcular el promedio de un determinado alumno, el
cual cuenta con cuatro notas y estas son de tipo entero:
DECLARE @NOMBRE VARCHAR (30) ='JUAN PEREZ' , @N1 INT = 10,
@N2 INT = 16, @N3 INT = 15,
@N4 INT =20, @PROM DECIMAL (5, 2)
SET @PROM = (@N1 + @N2 + @N3 + @N4)/4.0
SELECT @NOMBRE AS ALUMNO, @PROM AS PROMEDIO
10. I
Ejemplo 03:
Declarar 3 variables las cuales serán: codcli, nombre y dirección,
asignarle a codcli el código de un cliente de la tabla cliente y a partir
del código asignado buscar su nombre y dirección. Mostrar su código,
nombre y dirección. Utilizar la Base de Datos VENTAS2017
DECLARE
@CODCLI CHAR(6)='CLI003',
@NOMBRE VARCHAR(30),
@DIRECCION VARCHAR (80)
--Obteniendo el nombre del cliente a partir del código
SELECT @NOMBRE=NOMBRES FROM CLIENTE WHERE ID_CLIENTE=@CODCLI
--Obteniendo la dirección del cliente a partir del código
SELECT @DIRECCION=DIRECCION FROM CLIENTE WHERE ID_CLIENTE= @CODCLI
--Mostrando las columnas solicitadas
SELECT @CODCLI AS CODIGO, @NOMBRE AS NOMBRE, @DIRECCION AS DIRECCION
GO
12. I
PROCEDIMIENTO ALMACENADO
Los procedimientos almacenados son grupos formados por
instrucciones SQL y el lenguaje de control de flujo.
Cuando se ejecuta un procedimiento, se prepara un plan de
ejecución para que la subsiguiente ejecución sea muy rápida.
13. I
CARACTERÍSTICAS DE UN
PROCEDIMIENTO ALMACENADO
1. Se almacenan en la propia Base de Datos y constituyen un objeto más
dentro de ésta.
2. Tienden a mejorar el rendimiento de los sistemas producto a que reducen
en intercambio entre cliente y servidor.
3. Los procedimientos almacenados son reutilizables, de manera que
los usuarios mediante la aplicación cliente no necesitan relanzar los
comandos individuales, sino que pueden llamar el procedimiento para
ejecutarlo en el servidor tantas veces como sea necesario.
14. I
¿QUÉ PUEDEN INCLUIR LOS
PROCEDIMIENTOS ALMACENADOS?
• Incluir parámetros
• Llamar a otros procedimientos
• Devolver un valor de estado a un procedimiento de llamada o lote para indicar
el éxito o el fracaso del mismo y la razón de dicho fallo.
• Devolver valores de parámetros a un procedimiento de llamada o lote
• Ejecutarse en SQL Server remotos
15. I
Sintaxis para crear un procedimiento
Almacenado
PRIMERA FORMA:
CREATE PROCEDURE NOMBRE
AS
SENTENCIAS
GO
TERCERA FORMA:
IF OBJECT_ID('SP_LISTA') IS NOT NULL
DROP PROCEDURE NOMBRE
GO
CREATE PROCEDURE NOMBRE
AS
SENTENCIA
GO
SEGUNDA FORMA:
CREATE PROCEDURE NOMBRE
AS
BEGIN
SENTENCIAS
END
GO
16. I
Sintaxis para ejecutar un
procedimiento Almacenado
Si necesitamos visualizar el bloque de sentencias que compone
el procedimiento almacenado puede usar la siguiente sentencia:
EXEC SP_HELPTEXT 'NOMBRE DEL PROCEDIMIENTO‘
¿Cómo se ejecuta un P.A.?
EXECUTE Nombre del procedimiento
NOTA: Se puede colocar las cuatro primeras letras:
EXEC Nombre del procedimiento
17. I
Ejemplo 01:
Crear un procedimiento almacenado que permita listar todos los registros de la
tabla clientes. Utilizar Base de Datos VENTAS2017
18. I
Modificación de un procedimiento
almacenado
La modificación de un procedimiento almacenado permite realizar alguna
modificación dentro del bloque de sentencias que la compone. Pero tenga
en cuenta que si valida el procedimiento almacenado ya no será
necesario modificarlo, solo ejecutar la creación del procedimiento con su
respectiva sentencia de validación.
ALTER PROC Nombre
As
sentencias
Go
19. I
Ejemplo 02:
Modificar el procedimiento almacenado sp_listar_clientes de tal forma
que solo muestre el código del cliente, nombre del cliente y email del
cliente.
--Modificando el procedimiento almacenado
alter proc sp_listar_clientes
As
select c.id_cliente as codigo, c.nombres as nombre,
c.email as correo
from cliente c
Go
--Ejecutando el procedimiento
Execute sp_listar_clientes
Go
20. I
Eliminación de un procedimiento almacenado
La eliminación del procedimiento almacenado es considerada como la
inhabilitación y eliminación del objeto de tipo procedimiento almacenado.
DROP PROC Nombre
Ejemplo 03:
Eliminar el procedimiento almacenado sp_listar_clientes
DROP PROC sp_listar_clientes
GO
21. I
¿Como Visualizar todos los procedimientos
almacenados creados en una Base de Datos?
SELECT ROUTINE_NAME FROM
INFORMATION_SCHEMA. ROUTINES
WHERE ROUTINE_TYPE =
'PROCEDURE'
ORDER BY ROUTINE_NAME
GO
22. I
Procedimientos Almacenados con
Parámetros de Entrada
Los parámetros cumplen una función importante ya que por medio de
ellas enviaremos valores al procedimiento, es así que las sentencias
implementadas dentro del procedimiento usaran a dichos parámetros
como una variable local.
CREATE PROCEDURE NOMBRE (@PARAMETRO1 TIPO, @PARAMETRO2 TIPO)
AS
SENTENCIAS
GO
Otra forma de implementar el
Procedimiento almacenado es:
CREATE PROCEDURE NOMBRE
@PARAMETRO1 TIPO,
@PARAMETRO2 TIPO
AS
SENTENCIAS
GO
EXEC NOMBRE 'VALOR1' , 'VALOR2'
Formato de ejecución del p.a.:
23. I
Ejemplo 04:
Crear un procedimiento almacenado de nombre sp_listarClientesCod el
cual permitirá recibir el código de un cliente y listará todos los datos del
cliente ingresado.
¿Cómo usar parámetros?
EXECUTE sp_listarClienteCod ‘CLI003'
GO
Ejecutando el procedimiento
almacenado con parámetro.
24. I
Estructura condicional IF…ELSE
La estructura condicional IF permite evaluar una expresión booleana
(resultado SI - NO), y ejecutar las operaciones contenidas en el bloque
formado por BEGIN ……….END
IF ( CONDICION )
BEGIN
Sentencias verdaderas
END
ELSE
BEGIN
Sentencias falsas
END
25. I
Ejemplo 05:
Crear un procedimiento almacenado que reciba como parámetro una categoría del
producto. El procedimiento verificara si la categoría existe. Si existe lo mostrará, si no
existe mostrará el mensaje “No existe la categoría ingresado”
26. I
Estructura condicional múltiple CASE
Evalúa una lista de condiciones y devuelve una de las varias expresiones de
resultado posibles. La expresión CASE tiene dos formatos:
- CASE simple, el cual compara una expresión con un conjunto de expresiones
sencillas para determinar el resultado.
- CASE buscada, evalúa un conjunto de expresiones booleanas para determinar el
resultado.
--SIMPLE
CASE COLUMNA
WHEN 'ALTERNATIVA1' THEN 'VALOR RESULTANTE 1'
WHEN 'ALTERNATIVA2' THEN 'VALOR RESULTANTE 2'
ELSE 'VALOR RESULTANTE POR DEFECTO'
END
--BUSCADA
CASE
WHEN CONDICION1 THEN 'VALOR RESULTANTE 1'
WHEN CONDICION2 THEN 'VALOR RESULTANTE 2'
ELSE 'VALOR RESULTANTE POR DEFECTO'
END
27. I
Ejemplo 06:
Crear un procedimiento almacenado que permite mostrar el estado de boleta
teniendo en cuenta los siguientes casos:
CASO ‘AC’, mostrar “ACTIVO”,
CASO ‘AN’, mostrar ‘ANULADO’
CASO ‘PE’, mostrar ‘PENDIENTE’
28. I
Estructura repetitiva WHILE
Establece una condición para la ejecución repetida de una instrucción o
bloque de instrucciones SQL. Las instrucciones se ejecutan
repetidamente siempre que la condición especificada sea verdadera. Se
puede controlar la ejecución de instrucciones en el bucle WHILE con las
palabras clave BREAK y CONTINUE
WHILE CONDICION
BEGIN
SENTENCIAS | BREAK | CONTINUE
END
GO
29. I
Ejemplo 07:
Imprimir los primeros 20 números naturales enteros, indicando si el
numero es par o impar
DECLARE @can int
SET @can = 0
WHILE (@can < 20)
BEGIN
SET @can = @can + 1
IF (@can % 2 = 0)
PRINT CAST(@can as varchar) +' NÚMERO PAR'
ELSE
PRINT CAST(@can as varchar) + ' NÚMERO IMPAR'
END
GO
30. I
Procedimientos almacenados de mantenimiento de datos
(INSERT, UPDATE y DELETE)
Usando la tabla CLIENTE que se encuentra dentro de la base de datos
VENTAS2017 empezaremos a implementar los procedimientos de
mantenimiento de inserción, actualización y eliminación.
31. I
INSERT
Crear un procedimiento
almacenado que permita
registrar datos a la tabla
CLIENTE.
Asignar de nombre
sp_registrar_cliente.
Además, debe validar la
existencia del
procedimiento
almacenado.
IF OBJECT_ID ('SP_REGISTRAR_CLIENTE' )
IS NOT NULL
BEGIN
DROP PROCEDURE SP_REGISTRAR_CLIENTE
END
GO
CREATE PROCEDURE SP_REGISTRAR_CLIENTE
@IDCLI CHAR (6),
@NOMBRES VARCHAR (25),
@APELL VARCHAR (25),
@DIRECC VARCHAR (60),
@TELEF CHAR (9),
@MAIL VARCHAR (35),
@IDDIST CHAR(4)
AS
BEGIN
INSERT INTO CLIENTE VALUES (@IDCLI,
@NOMBRES, @APELL, @DIRECC,
@TELEF, @MAIL, @IDDIST)
END
GO
32. I
Ejecutando el procedimiento almacenado
Vamos a comprobar ingresando los datos respectivos
a cada parámetro de entrada:
EXECUTE SP_REGISTRAR_CLIENTE 'CLI012' , 'PEDRO
MANUEL' , 'RIVERA GUTIERREZ', 'AV. LOS AIRES #
2177' , '953817277' , 'priverag@hotmail.com' ,'D002'
GO
SELECT * FROM CLIENTE WHERE
ID_CLIENTE='CLI012'
GO
Ahora vamos a mostrar el dato insertado mediante un
procedimiento almacenado a la tabla CLIENTE:
33. I
UPDATE
Crear un procedimiento
almacenado que permita
actualizar todos los datos de
la tabla CLIENTES.
Asignar de nombre
sp_actualizar_cliente.
Además, debe validar la
existencia del procedimiento
almacenado. La actualización
se realizará mediante su
código.
IF OBJECT_ID ('SP_ACTUALIZAR_CLIENTE' )
IS NOT NULL
BEGIN
DROP PROCEDURE SP_ACTUALIZAR_CLIENTE
END
GO
CREATE PROCEDURE SP_ACTUALIZAR_CLIENTE
@IDCLI CHAR (6),
@NOMBRES VARCHAR (25),
@APELL VARCHAR (25),
@DIRECC VARCHAR (60),
@TELEF CHAR (9),
@MAIL VARCHAR (35),
@IDDIST CHAR (4)
AS
BEGIN
UPDATE CLIENTE SET NOMBRES=@NOMBRES,
APELLIDOS=@APELL, DIRECCION=@DIRECC,
FONO=@TELEF, EMAIL=@MAIL,
ID_DISTRITO=@IDDIST
WHERE ID_CLIENTE=@IDCLI
END
GO
34. I
Ejecutando el procedimiento almacenado
Vamos a comprobar modificando su dirección y teléfono del CLIENTE
CLI012 . Los demás datos se mantienen igual.:
SELECT * FROM CLIENTE WHERE ID_CLIENTE='CLI012'
GO
Ahora vamos a mostrar el dato modificado mediante un procedimiento
almacenado a la tabla CLIENTE:
EXECUTE SP_ACTUALIZAR_CLIENTE 'CLI012' , 'PEDRO MANUEL' ,
'RIVERA GUTIERREZ', 'JR. BERNARDO ALCEDO 240' , '999887765' ,
'priverag@hotmail.com','D002'
GO
35. I
DELETE
Crear un procedimiento
almacenado que permita
eliminar los datos de un
cliente de la tabla CLIENTES.
Asignar de nombre
sp_eliminar_cliente.
Además, debe validar la
existencia del procedimiento
almacenado.
IF OBJECT_ID ('SP_ELIMINAR_CLIENTE' )
IS NOT NULL
BEGIN
DROP PROCEDURE SP_ELIMINAR_CLIENTE
END
GO
CREATE PROCEDURE SP_ELIMINAR_CLIENTE
@IDCLI CHAR (6)
AS
BEGIN
DELETE FROM CLIENTE WHERE
ID_CLIENTE=@IDCLI
END
GO
36. I
Ejecutando el procedimiento almacenado
Vamos a comprobar eliminando el CLIENTE CLI012.
SELECT * FROM CLIENTE
Ahora vamos a mostrar todos los registros de la tabla CLIENTE:
EXECUTE SP_ELIMINAR_CLIENTE 'CLI012'
GO