Académique Documents
Professionnel Documents
Culture Documents
Objetivos.- aprender a ingresar a SQL Server 2008. Adems de manipular los archivos de una base de datos y creacin de tablas
1 Acceso al Servidor SQL SERVER 2 Entorno de Microsoft SQL Server Management Studio 3 Creacin De Base De Datos 4 Creacin de Tablas en una Base de Datos 5 Ingresando Registros a La Tabla CLIENTES 6 Gestin de Archivos de una base de datos 7 Separar Una Base De Datos 8 Adjuntar Una Base De Datos 9 Eliminar una base de datos SQL SERVER Propuesto Practico 01
2 3 4 5 6 7 8 8 9 10
Docentes:
Pgina 1 de 101
C.-Autenticacin: En estas primeras sesiones haremos uso de Autenticacin de Windows. D.- Presionar el botn CONECTAR
EL NOMBRE QUE RECIBE UN SERVIDOR SQL SERVER ES DIFERENTE EN CADA COMPUTADORA. COMO ES EL CASO DE MI SERVIDOR QUE RECIBE EL NOMBRE DE PC-315E4BA698B1\MANCHESTER
Docentes:
Pgina 2 de 101
Resolver:
Qu tipo de autenticacin est configurado en tu servidor
Docentes:
Pgina 3 de 101
Una vez creado la base de datos LONDRES debes verificar que se encuentre anclado en el explorador de soluciones Dentro de la base de datos veras como se clasificara los objetos creados como son tablas, procedimientos almacenados u otros objetos a crearse.
NOTA: Las bases de datos de SQL server. Administra sus archivos fsicos de diferente manera como lo hara tal vez un archivo MDB de Access. UNA base de datos creada est constituida por ms de 1 o ms archivos fsicos Adems hacer uso de una base de datos existente en otra computadora necesita de un servidor SQL server y adjuntar su base de datos existente.
Docentes:
Pgina 4 de 101
e) Presionar el botn guardar de la barra de herramientas. Y asignar el nombre CLIENTES a la tabla creada
Recuerda verificar la existencia de los objetos creados actualizando el servidor SQL server con la tecla f5
Docentes:
Pgina 5 de 101
d) Para GUARDAR los cambios realizados debes presionar el botn EJECUTAR SQL
Docentes:
Pgina 6 de 101
Cada vez que uno crea una base de datos a travs de un asistente o herramientas visuales de SQL server 2008. Una base de datos creada genera sus archivos en algn lugar fsico dentro de un disco. En una carpeta que fue configurado en el momento de instalacin. Los archivos que genera son: 1 archivo MDF (solo uno) 1 o ms archivos NDF 1 o ms archivos LDF EN CONCLUSION cada vez que Ud. crea una base de datos.Automticamente cada Generar 2 archivos. DEMOSTRACION: A. Crear una base de datos de nombre JPANDAL B. Verificar la ruta de donde se ha creado los archivos de la base de datos creada C. Buscar en la carpeta DATA los archivos de la base de datos creada
Estos 2 archivos generados sern manipulados por los usuarios. Es decir que si Ud. Desea transportar su base de datos de una computadora a otra. Deber realizar la accin SEPARAR - COPIAR ADJUNTAR -
Docentes:
Pgina 7 de 101
c) Presionar ACEPTAR Una vez separado la base de datos UD. Podr copiar los archivos que pertenecen a la base de datos a un disco extrable como USB u otro. Para poder HACER USO la base de datos en otra computadora.
Copiar los archivos en C:\BASE DE DATOS\
Docentes:
Pgina 8 de 101
Docentes:
Pgina 9 de 101
Propuesto Practico 01
1 Crear las siguientes bases de datos: TRILCE, PAMER, UPC, UPCI, JHONNYPANDAL 2 Separar las bases de datos TRILCE Y PAMER 3 Copiar y Guardar los archivos de cada base de datos separada en una carpeta con su mismo nombre en DISCO C 4 Adjuntar las bases de datos TRILCE Y PAMER desde su nueva ubicacin fsica 5 Crear las siguientes tablas en la base de datos TRILCE e Ingresar 10 registros en cada tabla respetando la Calidad de informacin que se almacena.
6 Generar un diagrama de las tablas creadas 7 Qu objetos contiene la carpeta SEGURIDAD del explorador de objetos de SQL SERVER
8 ingresar el nombre de los INICIOS DE SESION que existen en el servidor SQL SERVER
Docentes:
Pgina 10 de 101
CAPITULO 02
Objetivos.- aprender a trabajar con TransactSQL adems de crear programas haciendo uso de elementos de la programacin en SQL server 2008
1 Transact SQL 2 Fundamentos de Transact SQL 3 Tipos de datos en Transact SQL 4 Variables en Transact SQL 5 Operadores en Transact SQL 6 Estructuras de control en Transact SQL 7 Desarrollo de Ejemplos Propuesto Practico 02
12 12 13 16 19 20 25 27
Docentes:
Pgina 11 de 101
1 Transact SQL
Transact SQL es el lenguaje de programacin que proporciona SQL Server para ampliar SQL con los elementos caractersticos de los lenguajes de programacin: variables, sentencias de control de flujo, bucles, ... Herramienta de Programacin TRANSACT-SQL Para acceder a esta herramienta solo debe hacer clic en el botn NUEVA CONSULTA
Docentes:
Pgina 12 de 101
-- Esto es un comentario de linea simple /* Este es un comentario con varias lneas. Conjunto de Lineas. */ declare @nombre varchar(50)-- declare declara una variable -- @nombre es el identificador de la -- variable de tipo varchar set @nombre = Jhonny pandal' -- El signo = es un operador -- Jhonny pandal es un literal print @Nombre -- Imprime por pantalla el valor de @nombre. -- No diferencia maysculas ni minsculas
Scripts y lotes.
Un script de Transact SQL es un conjunto de sentencias de Transact SQL en formato de texto plano que se ejecutan en un servidor de SQL Server. Un script est compuesto por uno o varios lotes. Un lote delimita el alcance de las variables y sentencias del script. Dentro de un mismo script se diferencian los diferentes lotes a travs de la instruccin GO.
-- Este es el primer lote del script SELECT * FROM COMENTARIOS GO-- GO es el separador de lotes -- Este es el segundo lote del script SELECT getdate()-- getdate() es una funcin integrada que devuelve -- la fecha En ocasiones es necesario separar las sentencias en varios lotes, porque Transact SQL no permite la ejecucin de ciertos comandos en el mismo lote, si bien normalmente tambin se utilizan los lotes para realizar separaciones lgicas dentro del script.
Docentes:
Pgina 13 de 101
DECLARE @bit bit, @tinyint tinyint, @smallint smallint, @int int, @bigint bigint, @decimal decimal(10,3), -- 10 digitos, 7 enteros y -- 3 decimales @real real, @double float(53), @money money set @bit = 1 print @bit set @tinyint = 255 print @tinyint set @smallint = 32767 print @smallint set @int = 642325 print @int set @decimal = 56565.234 -- Punto como separador decimal print @decimal set @money = 12.34 print @money
Docentes:
Pgina 14 de 101
DECLARE @myxml XML set @myxml = (SELECT @@SERVERNAME NOMBRE FOR XML RAW, TYPE) print cast(@myxml asvarchar(max)) Obtendremos la siguiente salida: <row nombre="SVR01"/>
Docentes:
Pgina 15 de 101
DECLARE @myuniqueid UNIQUEIDENTIFIER set @myuniqueid = NEWID() print cast(@myuniqueid as varchar(36)) Obtendremos la siguiente salida: 46141D79-102C-4C29-A620-792EA0208637 Sql_Variant.Permite almacenar valores de diferentes tipos de datos. No puede almacena varchar(max), xml, timestamp y tipos de datos definidos por el usuario.
CREATE TYPEMD5FROMCHAR(32) NULL GO DECLARE @miMD5 MD5 set @miMD5 = '0000000000000000000000000000000A' print @miMD5
-- Esto es un comentario de linea simple /* Este es un comentario con varias lneas. Conjunto de Lineas. */ declare @nombre varchar(50)-- declare declara una variable -- @nombre es el identificador de la -- variable de tipo varchar set @nombre = 'MANCHESTER UNITED' -- El signo = es un operador -- MANCHESTER UNITED es un literal print @Nombre -- Imprime por pantalla el valor de @nombre. -- No diferencia maysculas ni minsculas
Docentes:
Pgina 16 de 101
DECLARE @nombre VARCHAR(100) -- La consulta debe devolver un nico registro SET @nombre = (SELECT nombre FROM CLIENTES WHERE ID = 1) PRINT @nombre El siguiente ejemplo muestra como asignar variables utilizando una sentencia SELECT.
Docentes:
Pgina 17 de 101
CDATOS
Apellido1,
CLOSE CDATOS DEALLOCATE CDATOS Veremos los cursores con ms detalle ms adelante en este tutorial.
Docentes:
Pgina 18 de 101
Operadores aritmticos + (suma) - (resta) * (multiplicacin) / (divisin) ** (exponente) % (modulo) Operadores relacionales= (igual a) <> (distinto de) o de comparacin != (distinto de) < (menor que) > (mayor que) >= (mayor o igual a) <= (menor o igual a) !> (no mayor a) !< (no menor a) Operadores lgicos AND (y lgico)
NOT (negacion) OR (o lgico) & (AND a nivel de bit) | (OR a nivel de bit) ^ (OR exclusivo a nivel de bit)
Operador de concatenaci n
(Devuelve TRUE si el conjunto completo de comparaciones es TRUE) ANY(Devuelve TRUE si cualquier elemento del conjunto de comparaciones es TRUE) BETWEEN (Devuelve TRUE si el operando est dentro del intervalo)
ALL Otros EXISTS (TRUE si una subconsulta contiene filas) IN (TRUE si el operando est en la lista) LIKE (TRUE si el operando coincide con un patron)
(Invierte el valor de cualquier operador booleano) SOME(Devuelve TRUE si alguna de las comparaciones de un conjunto es TRUE)
NOT
Docentes:
Pgina 19 de 101
IF (<expresion>) BEGIN END ELSEIF (<expresion>) BEGIN END ELSE BEGIN END
DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' IF @diminutivo = 'DJK' BEGIN PRINT 'www.pandalsoft.com' END
Docentes:
Pgina 20 de 101
DECLARE @coPais int, @descripcion varchar(255) set @coPais = 5 set @descripcion = 'Espaa' IFEXISTS(SELECT * FROM PAISES WHERE CO_PAIS = @coPais) BEGIN UPDATE PAISES SET DESCRIPCION = @descripcion WHERE CO_PAIS = @coPais END ELSE BEGIN INSERT INTO PAISES (CO_PAIS, DESCRIPCION) VALUES (@coPais, @descripcion)
END
CASE<expresion> WHEN<valor_expresion>THEN<valor_devuelto> WHEN<valor_expresion>THEN<valor_devuelto> ELSE<valor_devuelto> -- Valor por defecto END Ejemplo de CASE.
DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' SET @Web = (CASE @diminutivo WHEN 'DJK' THEN 'www.pandalsoft.com' WHEN 'ALM' THEN 'www.manchester.com' ELSE 'www.united.com' END) PRINT @Web
Docentes:
Pgina 21 de 101
CASE WHEN<expresion> = <valor_expresion>THEN<valor_devuelto> WHEN<expresion> = <valor_expresion>THEN<valor_devuelto> ELSE<valor_devuelto> -- Valor por defecto END El mismo ejemplo aplicando esta sintaxis:
DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' SET @Web = (CASE WHEN @diminutivo = 'DJK' THEN 'www.manchester.com' WHEN @diminutivo = 'ALM' THEN 'www.united.com' ELSE 'www.jhonnypandal.com'
DECLARE @Web varchar(100), @diminutivo varchar(3) SET @diminutivo = 'DJK' SET @Web = (CASE WHEN @diminutivo = 'DJK' THEN (SELECT web FROM WEBS WHERE id=1) WHEN @diminutivo = 'ALM' THEN (SELECT web FROM WEBS WHERE id=2) ELSE 'www.jhonnypandal.com' PRINT @Web END)
Docentes:
Pgina 22 de 101
DECLARE @contador int SET @contador = 0 WHILE (@contador < 100) BEGIN SET @contador = @contador + 1 END PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
DECLARE @contador int SET @contador = 0 WHILE (@contador < 100) BEGIN SET @contador = @contador + 1 IF (@contador % 2 = 0) CONTINUE PRINT 'Iteracion del bucle ' + cast(@contador AS varchar) END El bucle se dejar de repetir con la instruccin BREAK.
DECLARE @contador int SET @contador = 0 WHILE (1 = 1) BEGIN SET @contador = @contador + 1 IF (@contador % 50 = 0) BREAK PRINT 'Iteracion del bucle ' + cast(@contador AS varchar) END
Docentes:
Pgina 23 de 101
DECLARE @coRecibo int WHILE EXISTS (SELECT * FROM RECIBOS WHERE PENDIENTE = 'S')-- Ojo, la subconsulta se ejecuta -- una vez por cada iteracion -- del bucle! BEGIN SET @coRecibo = (SELECTTOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = 'S') UPDATE RECIBOS SET PENDIENTE = 'N' WHERE CO_RECIBO = @coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucin hacia una etiqueta. Fu muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema @@ERROR para el control de errores. Actualmente, se desaconseja el uso GOTO, recomendandose el uso de TRY - CATCH para la gestion de errores.
DECLARE @divisor int, @dividendo int, @resultado int SET @dividendo = 100 SET @divisor = 0 SET @resultado = @dividendo/@divisor IF @@ERROR > 0 GOTO error PRINT 'No hay error' RETURN error: PRINT 'Se ha producido una division por cero'
Docentes:
Pgina 24 de 101
7 Desarrollo de Ejemplos
A.- Programa que ingresa dos nmeros y muestra la suma Declare @Num1 Int ,@Num2 Int,@Total Int Set @Num1 =250 Set @Num2 =550 Set @Total =@Num1 + @Num2 Print @Total B.- Programa que ingrese Nombre De Producto, Precio, Cantidad Y Mostrar Pago Total, IGV Y Pago Neto Declare @NomProd Varchar(50) ,@Precio Money,@Cant Int,@TOTAL Money, @IGV Money,@NETO Money Set @NomProd ='Camiseta Oficial del Manchester United 2011' Set @Precio =250 Set @Cant =10 Set @TOTAL =@Precio * @Cant Set @IGV =@TOTAL * 0.19 Set @NETO =@TOTAL + @IGV Print @TOTAl Print @IGV Print @NETO C.- Programa que ingrese la edad de un alumno y determine si es mayor o menos de edad Declare @Nombre Varchar(50), @Mensaje Varchar(50), @Edad Int Set @Nombre ='Mabel' Set @Edad =12 IF @Edad >=18 Begin Set @Mensaje='MAYOR DE EDAD' End Else Begin Set @Mensaje='MENOR DE EDAD' Print @Mensaje D.- Programa que permita ingresar el nombre del empleado y la venta del mes. Si las ventas superan los 5000 soles. Recibir un pago de 800 soles. Caso contrario solo 400 soles. Declare @Nombre Varchar(50), @Ventas Money, @Pago Money Set @Nombre ='Fabio Da Silva' Set @Ventas=5580.25 IF @Ventas >5000 Begin Set @Pago =800 End Else Begin Set @Pago =400 End Print @Pago
End
Docentes:
Pgina 25 de 101
Docentes:
Pgina 26 de 101
Propuesto Practico 02
1. EDAD.VB Desarrollar un programa que ingrese el nombre y la edad de un alumno y le muestre como mensaje. Si dicho alumno es MAYOR DE EDAD o MENOR DE EDAD AULA.VB Desarrollar un programa que ingrese el numero de aula, fecha inicio, fecha termino, turno y cantidad de alumno matriculados. Si el aula programada tiene mas de 15 alumnos el programa debe mostrar un mensaje de ACTIVO caso contrario INACTIVO. VENTAS.VB Desarrolla un programa que ingrese las ventas de un empleado. Si sus ventas superan los 10000 mensuales. Se mostrara un mensaje de EMPLEADO DEL MES caso contrario EMPLEADO NORMAL. ALUMNO.VB Desarrolle un programa que ingrese el nombre y el promedio de un alumno. El programa debe mostrar un mensajes indicando si el alumno esta APROBADO o DESAPROBADO TIPO.VB Desarrollar un programa que ingrese el nombre, precio y tipo (NACIONAL o IMPORTADO) del producto. Los productos nacionales reciben un incremento de S/.100 y los importados S/. 300 soles. El programa debe mostrar: Descuento y pago neto. CARGO.VB Desarrollar un programa que ingrese el nombre, apellido, edad, sexo y cargo de un empleado. Su sueldo depende del cargo que ocupe. Detalles:(GERENTE gana S/. 2500), (OBRERO gana S/. 500), (VENTAS gana S/. 2500) otro cargo diferente a los anteriores ganara S/. 350.00 PROMEDIO.VB Desarrolla un Programa que ingrese el nombre y las 4 notas de un alumno. El programa debe mostrar el promedio y el acumulado de notas. ADEMAS El alumno mostrara un mensaje segn el promedio que haya sacado. (PROM > 20 promedio invalido), (PROM > 14 alumno excelente), (PROM > 10 alumno aprobado), CASO CONTRARIO Desaprobado. BUSCADOR.VB Desarrolla un programa que ingrese el cdigo de un alumno y te muestre su nombre, telfono y direccin. DETALLE: (A001, Juan Perez, 450-9600, Jr.Ica 1200) , (A002, Nadia Ivette, 478-9655, Jr.puno 478), (A003, Joce Ramirez, 987-989955, Calle Bahia 175), (A004, Diana Robles, 785-9655, Calle Los Pinos 125), Si ingresaras un cdigo incorrecto mostrara una mensaje de ERROR DE INGRESO
2.
3.
4.
5.
6.
7.
8.
Es importante repetir. que es muy importante el aprendizaje de este tipo de programacin. Ya que ser necesario para la comprensin de los siguientes captulos
Fecha de ENTREGA:
Pgina 27 de 101
Docentes:
CAPITULO 03
Objetivos.- administrar y ampliar el tamao de una base de datos. Adems de normalizar la misma. Haciendo uso de restricciones que permiten datos correctos
1 Archivos de Base de Datos 2 Creacin de Bases de Datos 3 Ampliando el Tamao una Base De Datos 4 Creacin de Tablas 5 Integridad de Datos de una Tabla 6 Integridad referencial FOREIGN KEY 7 Generando el cdigo de CURSO-INSTRUCTOR 8 Generando el cdigo de CARGO-EMPLEADO-DISTRITO 9 Creacin de Diagrama Propuesto Practico 03 36 37
29 29 30 31 31 33 34 35
Docentes:
Pgina 28 de 101
Con Atributos configurados para cada archivo Create Database Apple ON (Name=Apple_Dat, FileName='C:\Apple\Apple_Dat.MDF', Size=5, Maxsize=10, Filegrowth=2) LOG ON (Name=Apple_Log, FileName='C:\Apple\Apple_Log.LDF', Size=2, Maxsize=5, Filegrowth=1)
Detalles: la base de datos esta creado sobre una carpeta APPLE en disco local C. Name.- especifica el nombre del archivo Filename.- determinas la ubicacin fsica del archivo Size.- espacio mnimo que debe tener el archivo al ser construido Maxsize.- espacio mximo que puede almacenar dicho archivo Filegrowth.- el incremente de crecimiento del archivo a partir de su tamao mnimo hasta su tamao mximo
Docentes:
Pgina 29 de 101
Docentes:
Pgina 30 de 101
4 Creacion de Tablas
Una de las primeras restrcciones que uno aplica dentro de una tabla son los tipos de datos. Al crear una tabla uno debe especificar un tipo de dato relacionado con lo que almacenara dicho campo. Ej. NOMBRE debe almacenar un varchar.
ERROR DE USUARIO
Docentes:
Pgina 31 de 101
Restricciones Unique.-Solo admit5e valores nicos dentro de un campo. Una tabla puede contar con muchos campos con restriccin UNIQUE.
Restricciones Check.- Nos permite aplicar una regla de validacin dentro de un campos. Es decir una regla de datos que podran ingresar dentro de un campo. Ej. Campo EDAD solo admite valores >=18 debido a que los clientes deben ser mayores de edad..
Docentes:
Pgina 32 de 101
EJEMPLO: Para este ejemplo crearemos una tabla cursos y la tabla Instructor.Estas tablas estn relacionadas por un campo comn CODIGO de la tabla cursos y CURSO de la tabla Instructor.
Docentes:
Pgina 33 de 101
Create Table Cursos (Codigo Char(5) Primary key, Nombre Varchar(50)) Go Insert Into Cursos Values('C0001','Sql Server Administrator') Insert Into Cursos Values('C0002','Visual Basic 2008 - N Layer') Insert Into Cursos Values('C0003','Analisis de Sistemas POO') Go Create Table Instructor (Codigo Char(5) Primary key, Nombre Varchar(50), DNI Varchar(8), Curso Char(5) Constraint FK_CursoInstr Foreign Key(Curso) References Cursos(Codigo)) Go Insert Into Instructor values ('P0001','Jhonny Pandal','10606388','C0001') Insert Into Instructor values ('P0002','Juan Salazar','52362200','C0001') Insert Into Instructor values ('P0003','Ernesto Bonifaz','11225125','C0002') Insert Into Instructor values ('P0004','Nemanja Vidic','00006388','C0002') Insert Into Instructor values ('P0005','Poul Scholes','12306388','C0002') Insert Into Instructor values ('P0006','Park Jing Sung','88559960','C0002') Insert Into Instructor values ('P0007','Rafael Da Silva','15202111','C0003') Go Select*From Cursos Select*From Instructor Que sucede al insertar estos registros? Y como se soluciona? Ingresa correctamente el script y obtendrs este resultado. PULSA
Docentes:
Pgina 34 de 101
Create Table Cargo (CodCargo Char(5) Primary key, Nombre Varchar(30) Not Null Constraint Un_Nombre Unique) Go Insert Into Cargo Values('CAR01','Vigilante') Insert Into Cargo Values('CAR02','Ventas') Insert Into Cargo Values('CAR03','Gerente') Go SELECT*FROM Cargo Go TABLA: DISTRITO Create Table Distrito (CodDis Char(5) Primary Key, Nombre Varchar(30) Not Null Constraint Un_NombreDIS Unique) GO Insert Into Distrito Values('DIS01','Chosica') Insert Into Distrito Values('DIS02','Chaclacayo') Insert Into Distrito Values('DIS03','Santa Anita') GO SELECT*FROM Distrito Creacin de Tabla Hijo EMPLEADO Create Table Empleado (CodEmp Char(5) Primary key, NomEmp Varchar(50) Not Null, Edad SmallInt Not Null Constraint Chk_Edad Check(Edad>=18 and Edad<=35), Dni Varchar(8) Not Null Constraint unq_Dni Unique, FechaC Datetime Not Null Constraint Dfl_Fecha Default(Getdate()), Email Varchar(50) Null, TlFono Varchar(15) Null, DISTRITO Char(5) Not Null Constraint FK_EmpDis Foreign Key(DISTRITO) references Distrito(CodDis), CARGO Char(5) Not Null Constraint FK_EmpCar Foreign Key(CARGO) references Cargo(CodCargo) ) GO Insert Into Empleado Values ('E01','Jessica',21,'10603522','12/02/2009','Jess@yahoo.es', '449-9655','DIS02','CAR01') Insert Into Empleado Values ('E02','Carlos',35,'55663522','02/02/2004','car@yahoo.es', '895-9655','DIS01','CAR03')
Docentes:
Pgina 35 de 101
Luego debes ingresar estos registros en la tabla EMPLEADO. De tal manera que quede al final de esta manera:
9 Creacin de Diagrama
a) Seleccionar Diagramas de base de datos
b) Clic en Nuevo diagrama de base de datos c) Seleccionar y AGREGAR las tablas Cursos, Cargo y Empleado d) Clic en CERRAR
Para el desarrollo de este proyecto de 3 tablas se utilizaron integridad de datos para cada una de las tablas involucradas. No debes olvidar que las tablas tiene campos comunes y que tiene el mimo tipo de dato en cada CAMPO no olvidarse. Adems de haber poblado de datos de forma adecuada. Ahora solo se necesita la prctica de parte tuya.
Docentes:
Pgina 36 de 101
Propuesto Practico 03
Desarrollo de la base de datos UNIVERSIDAD
Fecha de Entrega:
Docentes:
Pgina 37 de 101
CAPITULO 04
Objetivos.- aprender hacer uso de las funciones de SQL server. Para obtener un mejor resultado con nuestros datos. Importante saber usar estas funciones No olvidarse
1 Funciones de cadena en SQL Server 2 Funciones de Fecha 3 Funciones Matemticas 4 Funciones de Agregado 5 Otras Funciones Importantes Propuesto Practico 04 41
39 40
41 42 43
Docentes:
Pgina 38 de 101
Funcin RIGHT - Descripcin: Retorna la parte derecha de una cadena con el nmero Especfico de caracteres. - Sintaxis: RIGHT( string , integer) - Ejemplo:
SELECT RIGHT('Jhonny Pandalsoft', 6) -- Resultado = alsoft SELECT RIGHT('JhonnyPandal',6) -- Resultado = Pandal
Funcin REPLICATE - Descripcin: Repite una cadena por un nmero especfico de veces. - Sintaxis: REPLICATE (string, integer) - Ejemplo:
SELECT REPLICATE('JPP', 2) -- Resultado = JPPJPP
Funcin SPACE. _ Descripcin: Retorna los espacios en SQL Query (Puedes especificar el tamao del especio). - Sintaxis: SPACE ( integer) - Ejemplos:
SELECT ('Manchester') + SPACE(10) + ('United') -- Resultado = ManchesterUnited
Funcin SUBSTRING - Descripcin: Retorna parte de una cadena. - Sintaxis: SUBSTRING ( string, startindex , length ) - Ejemplo:
SELECT SUBSTRING('SQLServer', 4, 3) -- Resultado = Ser
Funcin REPLACE - Descripcin: Reemplaza todas las ocurrencias de la cadena 2 y la cadena 1 con la cadena 3. - Sintaxis: REPLACE ( 'string1' , 'string2' , 'string3' ) - Ejemplos:
SELECT REPLACE('All Function' , 'All', 'SQL') -- Resultado = SQL Function
Funcin LEN - Descripcin: Retorna el nmero de caracteres de una cadena. -Sintaxis: LEN( string) - Ejemplo:
SELECT LEN('DIOSTEAMA') -- Resultado = 9
Funcin STUFF - Descripcin: Elimina una longitud especfica de caracteres e Inserta una cadena en un ndice de inicio especifico. - Sintaxis: STUFF ( string1 , startindex , length , string2 ) - Ejemplo:
SELECT STUFF('SqlTutorial', 4, 6, 'Function') -- Resultado = SqlFunctional SELECT STUFF('GoodMorning', 5, 3, 'good') -- Resultado = Goodgoodning
Funcin REVERSE - Descripcin: Convierte a una cadena invertida. - Sintaxis: REVERSE( string) - Ejemplo:
SELECT REVERSE('Pandal') -- Resultado = ladnaP
Funcin LEFT - Descripcin: Retorna la parte izquierda de una - cadena con el nmero especfico de caracteres. - Sintaxis: LEFT ( string , integer) Ejemplo:
SELECT LEFT('ManchesterCampeon', 6) -- Resultado = Manche SELECT LEFT('Megadeth',6) -- Resultado = Megade
Funcin UNICODE - Descripcin: Retorna el valor entero del estndar unicode. - Sintaxis: UNICODE( char) - Ejemplo:
SELECT UNICODE('SqlServer') -- Resultado = 83 (it take first character) SELECT UNICODE('S') -- Resultado = 83
Docentes:
Pgina
39
de
FuncinLOWER - Descripcin: Convierte una cadena a minscula. - Sintaxis: LOWER( string ) - Ejemplo
SELECT LOWER('PandalSoft') -- Resultado =pandalsoft
Funcin LTRIM - Descripcin: Retorna una cadena despus de eliminar los espacios de la izquierda. - Sintaxis: LTRIM( string ) - Ejemplo:
SELECT LTRIM(' sqlserver') -- Resultado = 'sqlserver' -- (Remove left side space or blanks)
Funcin UPPER - Descripcin: Convierte una cadena a mayscula. - Sintaxis: UPPER( string ) - Ejemplo:
- SELECT UPPER('sistemasjhonny') -- Resultado = SISTEMASJHONNY
Funcin RTRIM - Descripcin: Retorna una cadena despus de eliminar los espacios de la derecha. - Sintaxis: RTRIM( string ) - Ejemplo:
SELECT RTRIM('Prof.Pandal ')
2 Funciones de Fecha
DATEADD Devuelve un valor datetime nuevo que se basa en la suma de un intervalo a la fecha especificada. Ejemplo
DECLARE @DateNow DATETIME SET @DateNow='08/10/1980' SELECT DATEADD(Year, 15, @DateNow) AS NewDate SELECT DATENAME(millisecond , GETDATE())
DATEPART Devuelve un entero que representa la parte de la fecha Especificada de la fecha indicada.. Ejemplo
SELECT DATEPART(year, '2007-06-01') AS "Month" SELECT DATEPART(month, '2007-06-01') AS "Month" SELECT DATEPART(day, '2007-06-01') AS "Day" SELECT DATEPART(dayofyear, '2007-06-01') AS "Dy" SELECT DATEPART(weekday, '2007-06-01') AS "Weeday"
DATEDIFF Devuelve el nmero de lmites de fecha y hora que hay entre dos fechas especificadas. Ejemplos
DECLARE @DateNow DATETIME SET @DateNow='08/10/1980' SELECT SELECT SELECT SELECT SELECT SELECT SELECT DATEADD(Year, 15, @DateNow) AS NewDate DATEADD(Month, 3, @DateNow) AS NewDate DATEADD(dayofyear,3, @DateNow) AS NewDate DATEADD(Day, 3, @DateNow) AS NewDate DATEADD(Hour, 3, @DateNow) AS NewDate DATEADD(minute, 3, @DateNow) AS NewDate DATEADD(second, 3, @DateNow) AS NewDate
DAY Devuelve un entero que representa la parte del da de la fecha especificada. Ejemplo
SELECT DAY('02/12/2004') AS "DIA"
GETDATE Devuelve la fecha y hora actuales del sistema en el formato Interno estndar de Microsoft SQL Server para los valores datetime. Ejemplo
SELECT GETDATE() as "HOY ES"
DATENAME Devuelve una cadena de caracteres que representa la parte De la fecha especificada de la fecha especificada. Ejemplos
SELECT DATENAME(month, GETDATE()) SELECT DATENAME(dayofyear, GETDATE()) SELECT DATENAME(day, GETDATE()) SELECT DATENAME(week, GETDATE()) SELECT DATENAME(hour, GETDATE()) SELECT DATENAME(minute, GETDATE()) SELECT DATENAME(second , GETDATE())
MONTH Devuelve un entero que representa el mes de una fecha Especificada. Ejemplo
SELECT MONTH('02/12/2004') AS "MES"
Docentes:
Pgina
40
de
3 Funciones Matematicas
RAND (Transact-SQL) Es una expresin de tipo entero (tinyint, smallint o int) que proporciona El valor de inicializacin. Si no se especifica seed, SQL Server Database Engine (Motor de base de datos de SQL Server) asigna un valor de Inicializacin de forma aleatoria. Para un valor de inicializacin especificado, El resultado devuelto es siempre el mismo. Ejemplos En el siguiente ejemplo se producen cuatro nmeros aleatorios diferentes, Generados con la funcin RAND.
DECLARE @Numero SmallInt ,@Resultado smallint; SET @Numero = 1; WHILE @Numero < 5 BEGIN Set @Resultado =(RAND()*100) SET @Numero = @Numero + 1 Print @Resultado END GO
ACOS (Transact-SQL) Funcin matemtica que devuelve el ngulo, en radianes, cuyo coseno es la expresin float especificada; tambin se denomina arco coseno. Ejemplos En el ejemplo siguiente se devuelve el valor ACOS del nmero especificado.
DECLARE @N_COSENO float; SET @N_COSENO = -1.0; SELECT 'Coseno Es:' + CONVERT(varchar, ACOS(@N_COSENO))
SQRT (Transact-SQL) Devuelve la raz cuadrada del valor de tipo flotante especificado. Ejemplos En el ejemplo siguiente se devuelve la raz cuadrada de los nmeros Comprendidos entre 1.00 y 10.00.
DECLARE @myvalue float; SET @myvalue = 1.00; WHILE @myvalue < 10.00 BEGIN SELECT SQRT(@myvalue); SET @myvalue = @myvalue + 1 END GO
4 Funciones de Agregado
Las funciones de agregado realizan un clculo sobre un conjunto de valores y devuelven un solo valor. Si exceptuamos la funcin COUNT, todas las funciones de agregado ignoran los valores NULL. Las funciones de agregado se suelen utilizar con la clusula GROUP BY de la instruccin SELECT. Las funciones de agregado slo se pueden utilizar como expresiones en:
La lista de seleccin de una instruccin SELECT (en una subconsulta o en la consulta externa). Clusulas COMPUTE o COMPUTE BY. Clusulas HAVING. Transact-SQL proporciona las siguientes funciones de agregado: NOTA: Para ejecutar los ejemplos debe crear la tabla VENDEDORES Con los siguientes registros:
Docentes:
Pgina 41 de 101
MIN Y MAX (Transact-SQL) Min Devuelve el valor mnimo de una expresin. Max devuelve el valor Mximo de una expresin Ejemplo Mostrar la mayor y menor venta de los vendedores
VAR (Transact-SQL) Devuelve la varianza estadstica de todos los valores de la expresin Especificada. Ejemplo Este ejemplo devuelve la varianza para todos los valores de Visitas De la tabla Vendedores
Docentes:
Pgina
42
de
Propuesto Practico 04
Segn lo aprendido ahora debe resolver las siguientes consultas N-100 a) Consulta que muestre INSTRUCTOR como resultado ROTCURTSNI
f)
i)
j)
l)
m) Consulta que muestre a los vendedores que hayan tengan ventas superiores al promedio
Fecha de Entrega:
Docentes: Lic. Luis M. Rojas Ziga Lic. Ramiro De la Cruz Lic. Zambrano Arce, Julio Lic. Israel Huaraca Pgina 43 de 101
CAPITULO 05
Objetivos.- es importante saber gestionar los datos de un DB. En esta seccin debemos aprender consultas que nos permitan hacer uso de los datos
1 DML, Lenguaje de Manipulacin de Datos - SELECT 2 Lenguaje de manipulacin de datos (I) - INSERT 3 Consultas N-100 - WARDS SUPERMARKET 4 Consulta de Datos I 5 Consultas de Actualizacin I - UPDATE 6 Consultas de Actualizacin II 7 Consultas de Actualizacin III 8 Consulta de Eliminacin - DELETE Propuesto Practico 05 45
45
47 49 51 52 53 55 61
Docentes:
Pgina 44 de 101
es necesario aplicar una condicin de combinacin a travs de una clusula WHERE. WHERE Especifica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Admiten los operadores lgicos AND y OR. GROUP BY Especifica la agrupacin que se da a los datos. Se usa siempre en combinacin con funciones agregadas.
Pgina 45 de 101
Docentes:
Especifica una condicin que debe cumplirse para los datosEspecfica una condicin que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condicin debe estar referida a los campos contenidos en ella. ORDER BY Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC. Ejemplo
La clusula WHERE
La clusula WHERE es la instruccin que nos permite filtrar el resultado de una sentencia SELECT. Habitualmente no deseamos obtener toda la informacin existente en la tabla, sino que queremos obtener slo la informacin que nos resulte til es ese momento. La clusula WHERE filtra los datos antes de ser devueltos por la consulta.
MOSTRAR TODOS LOS REGISTROS
Docentes:
3 Consultas N-100
Para aprender a realizar estas consultas se requiere de la base de datos WardsSupermarket. La cual ser facilitado por tu Instructor. Mr. Pandal Poma JHONNY Ahora debes Adjuntar o Restaurar a tu servidor y a practicar sin dudarlo =)
Docentes:
Pgina 47 de 101
Tabla: COMPAIASDEENVIOS
Tabla: PEDIDOS
Docentes:
Pgina 48 de 101
Tabla: PRODUCTOS
Tabla: PROVEEDORES
4 Consulta de Datos I
01 Mostrar los productos que inicien su nombre con la letra A
Resultado:
Resultado:
Docentes:
Pgina 49 de 101
Docentes:
Pgina 50 de 101
5 Consultas de Actualizacion I
El comando UPDATE puede ser utilizado para modificar informacin contenida dentro de una tabla. Cada ao, la compaa les da a todos los empleados un incremento del 3% sobre el salario. El siguiente comando SQL podra ser utilizado para aplicar esto a todos los empleados de la base de datos:
Aqu Tenemos los registros de la tabla de Compaa de Envos Los datos sern modificados segn lo requiera las empresas Los datos se actualizarn por necesidad del usuario
CASO 1 La empresa United Package decide cambiar de razn social por motivos econmicos. Su nueva razn social ser United International Ud. Deber aplicar una consulta de actualizacin para realizar dicha modificacin.
Despus de haber ejecutado los 4 casos. La tabla Compaa de Envos tuvo ciertas modificaciones en su informacin haciendo Uso de Consultas de Actualizacin
Docentes:
6 Consultas de Actualizacion II
Mostrar lo siguientes datos: Select IdEmpleado,Apellidos,Nombre,TelDomicilio From dbo.Empleados
01 Modificar los apellidos y nombre del Empleado donde su cdigo es 1 UPDATE dbo.Empleados SET Apellidos='Pandal', Nombre='Jhonny' WHERE IdEmpleado=1 02 Modificar los 3 campos del empleado donde su cdigo es 2 UPDATE dbo.Empleados SET Apellidos='Gates', Nombre='Bill', TelDomicilio='985-965-845' WHERE IdEmpleado=2 03 Modificar fecha de contratacin del empleado Jhonny Pandal UPDATE dbo.Empleados SET FechaContratacion='12/03/2006' WHERE IdEmpleado=1 04 Mostrar cdigo, nombres y telfono de empleados. Agrupado por el segundo campo calculado Select IdEmpleado,Nombre+SPACE(3)+Apellidos AS [Nombres y Apellidos],FechaContratacion,TelDomicilio From dbo.Empleados 05 Mostrar cdigo, nombres, fecha contratacin, telfono de empleados. Agrupado por el segundo campo calculado Select IdEmpleado,Nombre+SPACE(3)+Apellidos AS [Nombres y Apellidos],TelDomicilio From dbo.Empleados Order By 2
Cada vez que ejecutes una consulta verifica que los datos realmente se hayan actualizado. UPDATE nos permite modificar registros existentes. NO LO OLVIDES
Docentes:
Pgina 52 de 101
Segundo: La empresa Wards Supermarket decide subir los precios de los productos que pertenezcan a la categoria1. Este incremente ser del 50% del mismo. UPDATE dbo.Productos SET PrecioUnidad=PrecioUnidad+(PrecioUnidad*0.50) WHERE IdCategoria =1 El resultado si te das cuenta sera 12 filas afectadas. Ya que hay 12 productos de la categoria1 que fueron modificadas en grupo. Verifica los cambios
CASO 5 La empresa decide reducir el precio de los productos a un 50% pero que pertenezcan a la categora de condimentos (2) y que tengan un stock mayor igual a 50 unidades en almacn. Mostrando datos Antes:
Docentes:
Pgina 53 de 101
Como pueden ver los datos actualizados cumplen el criterio detallado. CASO 6
La empresa decide poner un precio de 15 soles a todas las marcas de las cervezas que vende. Debes modificar dichos precios.
Mostrando datos Antes:
dbo.Productos
Una consulta de actualizacin depende de los criterios que deben de cumplir dicha modificacin. Es importante tener en cuenta que para poder modificar registros primero debes tener un respaldo. Pues los datos modificados no pueden ser restaurados.
Una sentencia que NO DEBES EJECUTAR NUNCA
Docentes:
Pgina 54 de 101
8 Consulta de Eliminacin
Utilizado para eliminar datos dentro de una tabla. Desafortunadamente, los ltimos ingresos de la corporacin reportan disminucin en el desempeo, esto ha causado que Juan Prez sea despedido. El comando DELETE con la clusula WHERE puede ser utilizado para eliminar su registro de la tabla de personal:
01 la empresa decide eliminar de su data todos los productos suspendidos Select * From dbo.Productos Where Suspendido=0 02 la empresa decide eliminar de su data los productos acabados Delete From dbo.Productos Where Stock=0 03 la empresa decide eliminar de su data todos los productos en pedido menores igual a 40 que pertenezcan A la categora 1 Delete From dbo.Productos Where CantEnPedido <=40 AND IdCategoria=1 04 la que no debes USAR Delete From dbo.Productos
Una empresa real cuenta con una tabla denominada Historial_Productos en esta tabla se almacena los registros eliminados de la tabla principal Productos. Adems de los registros de los productos antes de ser actualizados con update
Consulta de Datos II
Consulta a Dos Tablas 01.- Mostrar codigo y nombre del producto. ademas el pais y telefono de los proveedores de dichos productos Select P.IdProducto,P.NomProducto,PR.Pais,PR.Telefono From Productos AS P INNER JOIN Proveedores AS PR ON P.IdProveedor =PR.IdProveedor Resultado
Docentes:
Pgina 55 de 101
02.- Mostrar codigo y nombre del producto. ademas el nombre de la empresa y el nombre del empleado de la empresa proveedora. Ademas configurar el ancabezado con ALIAS Select P.IdProducto AS [COD PRODUCTO],P.NomProducto AS [NOMBRE DEL PRODUCTO], PR.NomEmpresa AS [EMPRESA],PR.NomEmpleado AS [NOMBRE DE EMPLEADO] From Productos AS P INNER JOIN Proveedores AS PR ON P.IdProveedor =PR.IdProveedor Resultado:
DESCRIPCION: a) Una consulta multitablas requiere de los campos de cada tabla en la seccin SELECT. b) Luego la unin de las tablas que intervienen en dicha consultas. Las cuales estn unidas con la unin INNER JOIN estas tablas deben estas relacionadas por un campo comn. c) La instruccin ON en la cual comparamos los dos campos comunes de dichas tablas. 03.- Adems podemos filtrar este resultado acompaando a esta consulta con la instruccin WHERE Select P.IdProducto AS [COD PRODUCTO],P.NomProducto AS [NOMBRE DEL PRODUCTO], PR.NomEmpresa AS [EMPRESA],PR.NomEmpleado AS [NOMBRE DE EMPLEADO] From Productos AS P INNER JOIN Proveedores AS PR ON P.IdProveedor =PR.IdProveedor Where PR.NomEmpleado ='Wendy Mackenzie' Resultado:
WHERE
04.- Mostrar El nombre de la categoria. ademas nombre y precio del producto de dicha categoria Select C.NomCategoria,PD.NomProducto,PD.PrecioUnidad From Categorias AS C INNER JOIN Productos AS PD ON C.IdCategoria =PD.IdCategoria Resultado:
Docentes:
Pgina 56 de 101
06.- Mostrar los detalles del pdido 10250. mostrando: codigo y nombre del producto en pedido. ademas de precio unitario y la cantidad a comprar de dicho producto.ademas nos piden que mostremos un campo CALCULADO que es SUBTOTAL que se genera a partir de la multiplicacion de 2 campos Select DT.IdProducto,P.NomProducto,DT.PrecioUnidad,DT.Cantidad, (DT.PrecioUnidad*DT.Cantidad) AS SUBTOTAL From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto =P.IdProducto Where DT.IdPedido ='10250' Resultado:
06.- Mostrar los detalles del pdido 10258. mostrando: codigo y nombre del producto en pedido. ademas de precio unitario y la cantidad a comprar de dicho producto.ademas nos piden que mostremos un campo CALCULADO que es SUBTOTAL,DESCUENTO Y NETO haciendo uso de 2 campos calculados Select DT.IdProducto,P.NomProducto,DT.PrecioUnidad,DT.Cantidad, (DT.PrecioUnidad*DT.Cantidad) AS SUBTOTAL, (DT.PrecioUnidad*DT.Cantidad)*DT.Descuento AS DESCUENTO, From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto =P.IdProducto Where DT.IdPedido ='10258' Resultado:
((DT.PrecioUnidad*DT.Cantidad)-(DT.PrecioUnidad*DT.Cantidad)*DT.Descuento) AS NETO
Para este ejemplo hemos usado 3 campos de la tabla DetallesDePedidos, 1 Campo de la tabla Productos y 3 campos calculados (SUBTOTAL, DESCUENTO, NETO) haciendo uso de la multiplicacin de PrecioUnidad*Cantidad
Docentes:
Pgina 57 de 101
08.- Mostrar la cantidad de productos vendidos. Clasificado por el nombre del proveedor. Para obtener este resultado debemos hacer el recorrido desde la tabla detallesdepedido hacia la tabla productos y de la tabla productos hacia la tabla proveddores y as obtener los datos para los campos seleccionados Select PR.NomEmpresa AS CATEGORIA,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Proveedores AS PR ON PR.IdProveedor =P.IdProveedor Group By PR.NomEmpresa Resultado:
Docentes:
Pgina 58 de 101
Analizando La Consulta
10.- Mostrar Cantidad de Productos Pedidos Por Categora Select C.NomCategoria AS CATEGORIA,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Categorias AS C ON C.IdCategoria =P.IdCategoria Group By C.NomCategoria 11.- Mostrar Cantidad de Productos Pedidos Por Proveedor Select PR.NomEmpresa AS PROVEEDOR,COUNT(DT.IdProducto) AS CANTIDAD From DetallesDePedidos AS DT INNER JOIN Productos AS P ON DT.IdProducto = P.IdProducto INNER JOIN Proveedores AS PR ON PR.IdProveedor =P.IdProveedor Group By PR.NomEmpresa 12.- Mostrar cdigo y nombre de producto. Adems del pas y telfono del proveedor. En nombre de producto debe iniciar con las letras CA SELECT P.IdProducto,P.NomProducto,PR.Pais,PR.Telefono FROM Proveedores AS PR INNER JOIN Productos P ON PR.IdProveedor = P.IdProveedor WHERE P.NomProducto LIKE 'Ca%'
Docentes:
Pgina 59 de 101
16.- Mostrar el nombre de los pases clientes. El nombre de debe repetirse Select Distinct(PaisDest) FROM Pedidos 17.- Mostrar cdigo, apellido, nombre y edad(campo calculado) de los empleados Select IdEmpleado,Apellidos,Nombre,(YEAR(GETDATE())-YEAR(FechaNacimiento)) AS EDAD From Empleados 18.- Mostrar cdigo, apellido, nombre y edad de los empleados a partir de los 50 aos de edad Select IdEmpleado,Apellidos,Nombre,(YEAR(GETDATE())-YEAR(FechaNacimiento)) AS EDA From Empleados Where(YEAR(GETDATE())-YEAR(FechaNacimiento))>=50 19.- Mostrar el 25% de los empleados de la empresa Select Top 25 Percent * From Empleados 20.- Mostrar empleados donde su edad comprenda del 15/01/1950 hasta 15/01/1960 Select*From EmpleadosWhere FechaNacimiento BETWEEN '15/01/1950' AND '15/01/1960' 21.- Mostrar pedidos del 01/09/1997 Al 31/12/1997 que se realizo dicho pedido Select IdPedido,FecPedido,FecEntrega,FecEnvo From Pedidos Where FecPedido BETWEEN '01/09/1997' AND '31/12/1997' 22.- Mostrar la cantidad de pedidos realizados del 01/09/1997 al 31/12/1997 Select COUNT(IdPedido) CANTIDAD From Pedidos Where FecPedido BETWEEN '01/09/1997' AND '31/12/1997' 23.- Mostrar ciudad y regin de francia Select Region,Ciudad From Proveedores Where Pais='Francia' 24.- Mostrar cdigo y fecha de entrega. Adems del nombre de la compaa que los enviara. Solo debe mostrar los envos de la compaa Speedy Express y la fecha de entrega debe ser a partir de la fecha indicada 01/06/1998 Select P.IdPedido,P.FecEntrega,CE.NomCompaa From CompaasDeEnvos AS CE INNER JOIN Pedidos AS P On CE.IdCEnvos =P.IdCompEnvo Where CE.NomCompaa ='Speedy Express' AND P.FecEntrega >='01/06/1998'
Docentes:
Pgina 60 de 101
Propuesto Practico 05
1. mostrar la cantidad de categorias existentes(numero entero) 2. mostrar el nombre de la categoria con el encabezado 'nombre de categoria' 3. mostrar nombre de empresa y nombre de empleado de la tabla clientes. donde el nombre de la empresa inicie con la letra a y c 4. mostrar la cantidad de clientes de la ciudad de mexico 5. mostra a los clientes que no tienen fax 6. mostrar codigo de pedido,nombre de producto, precio, cantidad de la tabla detalles de pedido ademas de los campos calculados subtotal, descuento 10% y pago neto
7. mostrar el promedio de precios de la tabla detalles de pedido 8. mostrar los detalles de pedido donde la cantidad este entre 50 a 100 y el porcentaje del descuento sea superior a 20% 9. mostrar codigo, nombre y apellido de los empleados. ademas el tiempo de servicio que tiene cada empleado
10. mostra la cantidad de empleados por tratamiento. ej. cuantas seoras,seores, doctores existen. etc. 11. mostrar el nombre y apellido de los empleados en una sola columna de titulo 'datos' 12. mostrar los empleados donde su edad este entre 50 a 60. usar funciones 13. mostra los empleados que no tengan jefe 14. mostrar el promedio del monto de la tabla pedidos 15. mostrar los pedidos donde el monto sea mayor la promedio 16. mostrar el mes de la fecha de pedido,el ao de la fecha de entrega y el dia de la fecha de envio. de la tabla pedidos. usar funciones 17. mostrar la cantidad de pedidos que realizo cada cliente 18. mostrar los productos donde el stock este en el intervalo de 40 a 50 19. mostrar los productos de la categoria sea 1 y 3 20. mostrar los productos donde el nombre inicie con a y el precio sea superior a 50 21. mostrar la cantidad de proveedores por cargo de contacto 22. mostrar cargo de contacto de la tabla proveedores. no deben repetirse los datos 23. mostrar la cantidad de proveedores por pais 24. mostrar codigo, nombre y precio de producto. ademas de nombre y descripcion de su categoria 25. mostrar los productos donde el nombre de la categoria sea bebidas 26. mostrar precio, stock y cantidad por unidad de la tabla productos donde el cargo de contacto del proveedor sea 'representante de ventas'
Docentes:
Pgina 61 de 101
tablas de una base de datos y saber qu informacin desea uno obtener de dichas consultas es una parte fundamental para poder realizar los siguientes captulos NO OLVIDARLO practica es lo que hace al maestro.
Docentes:
Pgina 62 de 101 Lic. Luis M. Rojas Ziga Julio Lic. Zambrano Arce,
L i c . R a m i r o D e l a C r u z L i c . I s r a e l H u a r a c a
CAPITULO 06
Objetivos.- aprender a aplicarle rendimientos a nuestras tablas. Cuando estas tengan un gran cantidad de registros. Recuerda que la lentitud es un factor negativo en sistemas de la inf.
1 Optimisando la base de datos con Indices 2 CREATE INDEX 3 ndices en un Mundo Real - 100.000 4 Agregando ndices en la Tabla Usuarios 5 Creando ndices en Wards Supermarket 6 Seguridad y Rendimiento con Vistas 7 Creacin de Sinnimos Propuesto Practico 06
64 65 66 68 69 70 71
71
Docentes:
Pgina 63 de 101
La palabra clave UNIQUE especfica que no pueden existir claves duplicadas en el ndice. ASC | DESC especifican el criterio de ordenacin elegido, ascendente o descendente, por defecto es ascendente. Ejemplo En el apartado dedicado a la definicin de tablas usaremos la tabla Clientes de la base de datos Wards Supermarket, este ejemplo crea un ndice nico en el campo NOMBREEMPLEADO. Esto nos permitir buscar mucho ms rpido por el campo NOMBREEMPLEADO y nos asegurar que no tengamos dos NOMBREEMPLEADO iguales.
Docentes:
Pgina 64 de 101
2 CREATE INDEX
La sentencia CREATE INDEX sirve para crear un ndice sobre una o varias columnas de una tabla. ASC: la clusula ASC es la que se asume por defecto e indica que el orden elegido para el ndice es ascendente (en orden alfabtico si la columna es de tipo texto, de menor a mayor si es de tipo numrico, en orden cronolgico si es de tipo fecha). DESC: indica orden descendente, es decir el orden inverso al ascendente.
Ejemplo:
Crea un ndice llamado ind1 sobre la tabla empleados formado por las columnas ciudad, regin y fecha de nacimiento. Este ndice permite tener ordenadas las filas de la tabla empleados de forma que aparezcan los empleados ordenados por ciudad, dentro de la misma ciudad por regin y dentro de la misma regin por edad y del ms joven al ms mayor. CREATE INDEX ind1 ON Empleados (Ciudad, Region ASC, FechaNacimiento DESC) Create Index Ux_Cargo_Emp ON Clientes(CargoEmpleado) Create Index Ux_Nom_Cat ON Categorias(NomCategoria) Create Unique Index Ux_Nom_Cat_Unico ON Categorias(NomCategoria) Create NONCLUSTERED Index Ux_Nombre_Compaia ON CompaasDeEnvos(NomCompaa) Create CLUSTERED Index Ux_telefono_Compaia ON CompaasDeEnvos(Telefono) Create NONCLUSTERED Index Ux_Pedido_Fechas ON Pedidos(FecPedido,FecEntrega,FecEnvo) Verificar la existencia de los indices en la Carpeta indice de cada tabla.
VELOCIDAD DE DATOS
Los INDICES se crean dentro de una tabla cuando el volumen de datos aumenta y es necesario un mecanismo de bsqueda de datos eficiente.
DROP INDEX
La sentencia DROP INDEX sirve para eliminar un ndice de una tabla. Se elimina el ndice pero no las columnas que lo forman. La sintaxis es la siguiente:
Ejemplo: DROP INDEX Empleados.Ux_Nom_Cat_Unico Elimina el ndice que habamos creado en el ejemplo anterior.
Docentes:
Ejercicio 01
A.- Vamos a crear una tabla de nombre un usuario y le vamos a agregar 100.000 registros de una sola ejecucin con la ayuda del procedimiento almacenado
dbo.Usp_CrearUsuarios
El cual me permite realizar el llenado de dichos registros. Bueno comencemos Crear a Tabla Usuario
B.- Ahora desde el Analizador de consultas ejecutas el procedimiento almacenado dbo.Usp_CrearUsuarios que se encuentra en tu DB Wards Supermarket.
C.-
Docentes:
Pgina 66 de 101
Sin lugar a dudas, el desempeo de una aplicacin est directamente relacionado al buen o mal diseo de los ndices de la base de datos. Esta tabla no tiene ningn ndice creado, por lo cual SQL Server tratar la tabla como un HEAP. Un heap es una estructura de datos que almacena la posicin fsica en la que se almacen cada nueva fila dentro de las pginas asignadas a la tabla. Puesto que esta tabla no tiene ningn tipo de ndice, es bastante eficiente para agregar nuevas filas a la tabla pero muy ineficiente para encontrar una fila especfica, esto se debe a que es necesario leer toda la tabla para obtener el resultado deseado. Para ilustrar esto, realicemos el siguiente experimento: utilizando el procedimiento almacenado Usp_CrearUsuarioscrearemos 100.000 usuarios de los cuales el 10.000 no estn activos y su fecha de creacin esta en los ltimos 600 das. D.- Ahora realicemos una consulta para validar el usuario al inicio de sesin del sistema. SELECT Clave, Activo FROM Usuario WHERE NombreUsuario = 'PANDAL123' La respuesta probablemente funcione bastante rpido, ya que al recin haber creado los datos, todas estas filas estn en memoria, pero veamos el plan de ejecucin de esta consulta presionando el botn incluir plan de ejecucin real. De la barra de herramientas del SQL Server Management Studio y luego ejecutando la misma consulta.
Docentes:
Pgina 67 de 101
Ahora creare un indice Create Index IDX_NombreUsuario ON Usuario(NombreUsuario) Luego volvere a ejecutar SELECT Clave, Activo FROM Usuario WHERE NombreUsuario = 'PANDAL123' Y Veo el plan de ejecucion
Docentes:
Pgina 68 de 101
EXEC Sp_HelpIndex Productos Muestra los indices de la tabla productos EXEC sp_SpaceUsed Productos Muestra el espacio que ocupa la tabla productos
Ejemplos
A. Crear un ndice no clster sencillo El ejemplo siguiente crea un ndice no clster en la columna NomProducto y Precio de la tabla Productos IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_ProductoNomPrecio') DROP INDEX Productos.IX_ProductoNomPrecio GO CREATE INDEX IX_ProductoNomPrecio ON Productos(NomProducto,PrecioUnidad) GO B. Crear un ndice compuesto no clster sencillo El ejemplo siguiente crea un ndice compuesto no agrupado en las columnas Stock y Cant en Pedido de la tabla Productos IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_Stock_CantPed') DROP INDEX Productos.IX_Stock_CantPed GO CREATE NONCLUSTERED INDEX IX_Stock_CantPed ON Productos (Stock,CantEnPedido) GO C. Crear un ndice no clster nico
El ejemplo siguiente crea un ndice no clster nico en la columna Name de Production.UnitMeasure. El ndice exigir unicidad en los datos insertados en la columna Name. la tabla
IF EXISTS (SELECT name from sys.indexes WHERE name = N'UniNomProducto') DROP INDEX Productos.UniNomProducto GO CREATE UNIQUE INDEX UniNomProducto ON Productos(NomProducto) GO
Docentes:
Pgina 69 de 101
Creacin de vistas.
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT vlida. CREATE VIEW<nombre_vista> AS (<sentencia_select>);
Ejemplo 01
Crear una vista sobre nuestra tabla Empleados, en la que se nos muestre el nombre y apellidos del empleado en lugar de su cdigo. CREATE VIEW vEmpleados AS (SELECT nombre,apellidos FROM Empleados) GO Mostrando el contenido de la Select*From vEmpleados Modificar una Vista Existente. ALTER VIEW vEmpleados AS (SELECT nombre,apellidos,Pais FROM Empleados WHERE Pais='EE.UU.') GO Mostrando el contenido de la Select*From vEmpleados
Por ltimo podemos eliminar la vista a travs de la sentencia DROP VIEW. Para eliminar la vista que hemos creado anteriormente se utilizara: DROP VIEWvEmpleados Una vista se consulta como si fuese una tabla.
Docentes:
Pgina 70 de 101
7 Creacin de Sinnimos
Un sinnimo es un nombre alternativo que identifica una tabla en la base de datos. Con un sinnimo se pretende normalmente simplicar el nombre original de la tabla, aunque tambin se suelen utilizar para evitar tener que escribir el nombre del propietario de la tabla. No todas las bases de datos soportan los sinnimos. Para crear un sinnimo hay que utilizar la sentencia CREATE SYNONYM especificando el nombre que deseamos utilizar como sinnimo y la tabla para la que estamos creando el sinnimo.
Ejemplo 01El siguiente ejemplo crea el sinnimo Coches para la tabla tCoches.
CREATE SYNONYM MisEmpleados FOR Empleados ejecutar Select * From MisEmpleados Para eliminar el sinnimo creado debemos emplear la sentencia DROP SYNONYM. DROP SYNONYM MisEmpleados
Propuesto Practico 06
Crear una Base de datos de 3 tablas AGENCIA DE VIAJES con ndices Crear 3 ndices a las tablas (Clientes, Empleados, Pedidos, Productos) de Wards Super... Crear 5 Vistas Simples Crear 5 Vistas con Consultas de ms de 1 tabla Crear 2 Vistas Con Tablas Particionada Crear Sinnimos para cada tabla
Docentes:
Pgina 71 de 101
CAPITULO 07
Objetivos.- aprender a administrar la informacin de una base de datos haciendo uso de objetos los cuales no permiten una programacin por lado del servidor. Ademas de generar copias de seguridad
1 Funciones Creadas Por el Usuario 2 Funciones Escalares.3 Funciones de Tabla En Lnea 4 Procedimientos Almacenados 5 Procedimientos Almacenados Con Parmetros 6 Procedimientos almacenados con Parmetros de SALIDA 7 Procedimientos Almacenados de Mantenimiento 8 Desencadenadores o TRIGGERS 9 Activar o Desactivar USP 10 Copia de Seguridad 11 Restaurar una Copia de Seguridad 12 Propuesto
73 73 74 75 76 79 79 83 86 86 89 91
Docentes:
Pgina 72 de 101
2 Funciones Escalares.Las funciones escalares vuelven un tipo de los datos tal como int, money, varchar, real, etc. Pueden ser utilizadas en cualquier lugar incluso incorporado dentro de sentencias SQL. La sintaxis para una funcin escalar es la siguiente: Ejemplo 01 CREATE FUNCTION Ufn_VolumenCubico (@CuboLargo decimal(4,1), @CuboAncho decimal(4,1), @CuboAlto decimal(4,1)) RETURNS decimal(12,3) WITH SCHEMABINDING AS BEGIN RETURN (@CuboLargo * @CuboAncho * @CuboAlto) END GO Ejecutar la funcion DECLARE @MyResultado decimal(12,3) EXEC @MyResultado = Ufn_VolumenCubico @CuboLargo = 12.3, @CuboAlto = 4.5, @CuboAncho = 4.5 SELECT @MyResultado GO Ejemplo 02 CREATE FUNCTION Ufn_Promedio (@Nota1 Int, @Nota2 Int, @Nota3 Int) RETURNS Int WITH SCHEMABINDING AS BEGIN RETURN ( @Nota1 + @Nota2 + @Nota3 )/3 END GO Ejecutar la funcion DECLARE @MyPromedio Int EXEC @MyPromedio = Ufn_Promedio @Nota1 SELECT @MyPromedio GO = 12.3, @Nota2 = 11, @Nota3 = 17
Docentes:
Pgina 73 de 101
Docentes:
Pgina 74 de 101
RETURN(Select P.IdPedido,C.NombreEmpleado,P.FecPedido,P.PaisDest From Pedidos As P INNER JOIN Clientes AS C ON P.IdCliente =C.IdCliente Where C.NombreEmpleado LIKE @NomCli+'%' AND P.PaisDest=@Pais) GO Ejecutar Funcion 01 Use [Wards Supermarket] GO Select * From Fn_BuscarPedidos01('H','Alemania') Ejecutar Funcion 02 Use [Wards Supermarket] GO Select * From Fn_BuscarPedidos01('A','Alemania') Ejecutar Funcion 03 Use [Wards Supermarket] GO Select * From Fn_BuscarPedidos01('Y','Suiza') Ejecutar Funcion 04 Select COUNT(*) From Fn_BuscarPedidos01('Y','Suiza')
4 Procedimientos Almacenados
Un procedimiento es un programa dentro de la base de datos que ejecuta una accin o conjunto de acciones especficas. Un procedimiento tiene un nombre, un conjunto de parmetros (opcional) y un bloque de cdigo. En Transact SQL los procedimientos almacenados pueden devolver valores (numrico entero) o conjuntos de resultados. Para crear un procedimiento almacenado debemos emplear la sentencia CREATE PROCEDURE.
Docentes:
Pgina 75 de 101
sistemas de informacin. Los programadores solo usan el nombre de dicho USP. Muchas veces sin saber las lneas que cdigo que estas tienen. Lo ideal sera encriptar un USP para una mejor seguridad.
Docentes:
Pgina 76 de 101
Docentes:
Pgina 77 de 101
Ejemplo 07.- este USP tiene como finalidad elevar el precio de los productos por cdigo de proveedor. Este USP usa 2 parmetros de entrada para conseguir este objetivo. Y verifica los datos antes de ejecutar el USP Create Procedure Usp_ModificarPrecioMAS @PrecioUnidad money, @IdProveedor int AS Update Productos Set PrecioUnidad = PrecioUnidad+@PrecioUnidad Where IdProveedor=@IdProveedor GO Ejecutar Consulta select IdProveedor,PrecioUnidad from Productos Ejecutar USP Exec Usp_ModificarPrecioMAS 50,1 Verificar Cambios select IdProveedor,PrecioUnidad from Productos
Docentes:
Pgina 78 de 101
Ahora fjate en lo datos que tiene esta tabla Porque ahora comenzaremos a Crear el procedimiento que me permitir ingresar nuevas categoras dentro mi tabla categora.
Docentes:
Pgina 79 de 101
Usp_ModificarCategoria
Este USP nos permite modificar registros existentes dentro de la tabla categora. Para el ejemplo modificaremos la categora de cdigo 12. Create Proc Usp_ModificarCategoria @IdCategoria Int, @NomCategoria nvarchar(15), @Descripcion nvarchar(max) AS UPDATE Categorias SET NomCategoria=@NomCategoria, Descripcion=@Descripcion Where IdCategoria=@IdCategoria GO Ejecutar el USP con los Nuevos datos Exec Usp_ModificarCategoria 12,'Mascotas Favoritas','Bao, paseo y productos para mascotas' Verificamos Select * From Categorias
Usp_EliminarCategoria
Este USP nos permite eliminar un registro Create Proc Usp_EliminarCategoria @IdCategoria Int AS Delete From Categorias Where IdCategoria=@IdCategoria GO Ejecutar el USP y Eliminar datos Exec Usp_EliminarCategoria 12
Docentes:
Pgina 80 de 101
WITH ENCRYPTION
Una funcionalidad utilizada algunas veces para proteger la propiedad intelectual es la encriptacin. En SQL Server podemos crear funciones, vistas, procedimientos almacenados aadiendo la opcin "WITH ENCRYPTION" para que no se muestre el texto claro de su definicin. Si leemos la explicacin sobre dicha opcin en los BOL vemos que ha cambiado desde SQL 2000 a 2005/2008 pero su esencia es la misma:
SET NOCOUNT ON
Si se establece SET NOCOUNT en ON, no se devuelve el recuento. Cuando SET NOCOUNT es OFF, s se devuelve ese nmero
Docentes:
Pgina 81 de 101
Docentes:
Pgina 82 de 101
8 Desencadenadores o TRIGGERS
Un trigger( o desencadenador) es una clase especial de procedimiento almacenado que se ejecuta automticamente cuando se produce un evento en el servidor de bases de datos. SQL Server proporciona los siguientes tipos de triggers: Trigger DML, se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulacin de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Trigger DDL, se ejecutan en respuesta a una variedad de eventos de lenguaje de definicin de datos (DDL). Estos eventos corresponden principalmente a instrucciones CREATE, ALTER y DROP de Transact-SQL, y a determinados procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL. Trigger DML. Los trigger DML se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulacin de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista.
'Usted Acaba de Ingresar DATOS' Que se mostrara cada vez que un cliente ejecute la instruccin INSERT sobre la tabla que apunta.El cliente puede ser: Por medio de Transact-SQL Aplicacin Visual Basic Excel SQL Management Studio, etc Realizar algo mientras alguien ingresa datos.
Docentes:
Pgina 83 de 101
ANALIZANDO Ud. creo un trigger que emitir un mensaje 'Usted Acaba de Ingresar Eliminar Datos' Que se mostrara cada vez que un cliente ejecute la instruccin DELETE sobre la tabla que apunta. Una vez creado el Trigger lo ejecutamos con una consulta de Eliminacion
Docentes:
Pgina 84 de 101
Ejemplo 05 Permite mostrar un mensaje. Cuando se elimina una tabla en la base de datos
Los desencadenadores DDL pueden activarse en respuesta a un evento de Transact-SQL procesado en la base de datos actual o en el servidor actual. El mbito del desencadenador depende del evento. Por ejemplo, un desencadenador DDL creado para activarse como respuesta a un evento CREATE_TABLE se activar siempre que se produzca un evento CREATE_TABLE en la base de datos o en la instancia de servidor. Un desencadenador DDL creado para activarse como respuesta a un evento CREATE_LOGIN se activar nicamente cuando que se produzca un evento CREATE_LOGIN en el servidor.
Docentes:
Pgina 85 de 101
10 Copia de Seguridad
Para el ejemplo vamos a crear una base de datos de nombre PANDAL Imaginemos que esta base de datos contiene. Tablas, USPs, Funciones etc. Y deseamos generar una copia de seguridad. Para luego restaurar nuestra base de datos. Esta prctica es usada para tener una copia de datos si ocurriera algn desastre que con lleve a la perdida de la informacin. Tambin algunos estudiantes lo usan para transportas sus bases de datos. PASOS A.- Seleccionar la base de datos Clic en TAREAS + COPIAS DE SEGURIDAD como podemos ver en la imagen
Pgina 86 de 101
Docentes:
Nombre y Descripcin
C.- Clic en el botn AGREGAR D.- Clic Botn Examinar (botn de 3 puntos) E.- Seleccionar la Unidad C:\ o el que t elijas F.- ingresar Nombre de Archivo G.- Presionar Aceptar
Docentes:
Pgina 87 de 101
I.- Verificar los datos y verificar la copia de seguridad Por generada. Clic en Aceptar
Presionar Aceptar y Verifica la Existencia del Archivo BackUp de la Db Pandal NOTA: Se Recomienda que elimines la Db Pandal
EL ESTUDIANTE DEBE GENERAR LA COPIA SDE SEGURIDAD DE SU BASE DE DATOS PARA LUEGO RESTAURARLO EN EL SERVIDOR QUE HACE USO. LA CREACION DE BASE DE DATOS ES UNA TAREA FUNDAMENTAL DE UN DBA Y SON PROGRAMADAS PARA SU CREACION EN UN MOMENTO DETERMINADO. ADEMAS REDORDAR QUE TAMBIEN SE PUEDE CREAR COPIA DE SEGURIDAD Y RESTAURAR CON CODIGO TRANSACT-SQL
Docentes:
Pgina 88 de 101
B.- Ingresar el Nombre de la Nueva base de datos A una base de datos: PANDALSOFT
Selecciona
Docentes:
Pgina 89 de 101
E.- Presionar el botn Agregar F.- Buscar la ubicacin de tu archivo de Copia de seguridad (archivo .BAK)
Docentes:
Pgina 90 de 101
Propuesto 07
1) Crear una funcin que me permita Mostrar el sueldo de un profesor sabiendo sus pago hora y sus horas trabajadas 2) Crear una funcin que me permita ingresar un nmero y mostrar el nmero elevado al cuadra
3) Crear un funcin que permita ingresar la edad de la persona y muestre un mensaje por si es Nio, Joven, Adulto y Adulto mayor 4) Crear una funcin que muestre el nombre, precio y stock de los productos de la tabla productos
5) Crear una funcin que me muestre las ventas totales que realizo un empleado. Debes ingresar su cdigo 6) Crear una funcin que me permita crear cdigo autogenerados ej. P0001, P0002, P0003
7) USP que me permita generar cdigo auto generados. Que depender de la categora. Ej. BEBIDAS B0001, B0002, B0003 - REPORTERIA ser R0001, R0002, etc. Y si se agregara una nueva categora. esa nueva categora tendr su nuevo cdigo auto generado. 8) USP Para Mostrar los productos con un intervalo de precios 9) USP Para Mostrar los productos donde el precio sea mayor a un precio ingresado 10) USP Para Mostrar los productos donde el precio sea menor a un precio ingresado 11) USP Para Mostrar los productos donde sea ingresado el nombre del proveedor el proveedor 12) USP Para Mostrar los productos donde depende del pas y regin del proveedor 13) USP Para Mostrar los productos activos o no activos 14) USP Para restaurar el stock de un producto cuando un cliente cancela dicho pedido 15) USP de mantenimiento de todas las tablas de Wards Supermarket 16) Como Restaurar una base de dato con cdigo Transact-SQL - Ejemplos
Fecha de entrega:
Docentes:
Pgina 91 de 101
CAPITULO 08
Objetivos.-Conocer el manejo de transacciones dentro de un servidor. Los tipos de transacciones. Y por ltimo aprender a gestionar permisos y restricciones de todos los objetos que aprendi en este material
1 Transacciones en Transact SQL 2 Creacin de Usuarios y Asignar Permisos y Restricciones 3 Modificar Usuario SA 4 Ingresando como Usuario JHONNY 5 Otorgando Permisos a JHONNY 100 101
93 98 99
Docentes:
Pgina 92 de 101
DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) /* Asignamos el importe de la transferencia * y las cuentas de origen y destino */ SET @importe = 50 SET @CuentaOrigen = '200700000001' SET @CuentaDestino = '200700000002' /* Descontamos el importe de la cuenta origen */ UPDATE CUENTAS SET SALDO = SALDO - @importe WHERE NUMCUENTA = @CuentaOrigen /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO + @importe, SALDO, @importe, getdate()FROM CUENTAS WHERE NUMCUENTA = @CuentaOrigen /* Incrementamos el importe de la cuenta destino */ UPDATE CUENTAS SET SALDO = SALDO + @importe WHERE NUMCUENTA = @CuentaDestino /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO - @importe, SALDO, @importe, getdate() FROM CUENTASWHERE NUMCUENTA = @CuentaDestino Esta forma de actuar seria errnea, ya que cada instruccin se ejecutara y confirmara de forma independiente, por lo que un error dejara los datos errneos en la base de datos (ese es el peor error que nos podemos
encontrar)
Docentes:
Pgina 93 de 101
DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) /* Asignamos el importe de la transferencia * y las cuentas de origen y destino */ SET @importe = 50 SET @CuentaOrigen = '200700000002' SET @CuentaDestino = '200700000001' BEGINTRANSACTION -- O solo BEGIN TRAN BEGINTRY /* Descontamos el importe de la cuenta origen */ UPDATE CUENTAS SET SALDO = SALDO - @importe WHERE NUMCUENTA = @CuentaOrigen /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO + @importe, SALDO, @importe, getdate() FROM CUENTAS WHERE NUMCUENTA = @CuentaOrigen /* Incrementamos el importe de la cuenta destino */
Docentes:
Pgina 94 de 101
SETIMPLICIT_TRANSACTIONSON DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) /* Asignamos el importe de la transferencia * y las cuentas de origen y destino */ SET @importe = 50 SET @CuentaOrigen '200700000002' SET @CuentaDestino '200700000001'
= =
BEGINTRY /* Descontamos el importe de la cuenta origen */ UPDATE CUENTAS SET SALDO = SALDO - @importe WHERE NUMCUENTA = @CuentaOrigen /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO + @importe, SALDO, @importe,
Docentes:
Pgina 95 de 101
/* Incrementamos el importe de la cuenta destino */ UPDATE CUENTAS SET SALDO = SALDO + @importe WHERE NUMCUENTA = @CuentaDestino /* Registramos el movimiento */ INSERTINTO MOVIMIENTOS (IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO) SELECT IDCUENTA, SALDO - @importe, SALDO, @importe, getdate() FROM CUENTAS WHERE NUMCUENTA = @CuentaDestino /* Confirmamos la transaccion*/ COMMITTRANSACTION -O solo COMMIT ENDTRY BEGINCATCH /* Hay un error, deshacemos los cambios*/ ROLLBACKTRANSACTION -O solo ROLLBACK PRINT 'Se ha producido un error!' ENDCATCH
La transaccin sigue activa hasta que emita una instruccin COMMIT o ROLLBACK. Una vez que la primera transaccin se ha confirmado o revertido, se inicia automticamente una nueva transaccin la siguiente vez que la conexin ejecuta una instruccion para modificar datos. La conexin contina generando transacciones implcitas hasta que se desactiva el modo de transacciones implcitas.Podemos verificar el nmero de transacciones activas a travs de @@TRANCOUNT.
SETIMPLICIT_TRANSACTIONSON BEGINTRY UPDATE CUENTAS SET FXALTA = FXALTA 1 PRINT @@TRANCOUNT COMMIT ENDTRY BEGINCATCH ROLLBACK PRINT 'Error' ENDCATCH
Docentes:
Pgina 96 de 101
BEGINTRAN UPDATE EMPLEADOS SET NOMBRE = 'Jhonny Huber' WHERE ID=101 BEGINTRAN UPDATE EMPLEADOS SET APELLIDO1 = 'Pandal' WHERE ID=101 -- Este COMMIT solo afecta a la segunda transaccion. COMMIT -- Este ROLLBACK afecta transacciones. ROLLBACK a las dos
Una consideracin a tener en cuanta cuando trabajamos con transacciones anidadas es la posibilidad de utilizar puntos de guardado o SAVEPOINTs. Puntos de recuperacin (SavePoint). Los puntos de recuperacin (SavePoints) permiten manejar las transacciones por pasos, pudiendo hacer rollbacks hasta un punto marcado por el savepoint y no por toda la transaccin. BEGINTRAN UPDATE EMPLEADOS SET NOMBRE = 'Devjoker' WHERE ID=101 UPDATE EMPLEADOS SET APELLIDO1 = 'Devjoker.COM' WHERE ID=101 SAVETRANSACTION P1 -- Guardamos la transaccion (Savepoint) UPDATE EMPLEADOS SET APELLIDO1 = 'Otra cosa!' WHERE ID=101 -- Este ROLLBACK afecta solo a las instrucciones -- posteriores al savepoint P1. ROLLBACKTRANSACTION P1 -Confirmamos la transaccion COMMIT
Docentes:
Pgina 97 de 101
Ingresar Usuario SA A.- Clic ARCHIVO + DESCONECTAR EXPLORADOR DE OBJETOS B.- Clic ARCHIVO + CONECTAR EXPLORADOR DE OBJETOS
Docentes:
Pgina 98 de 101
SA es un inicio de sesin que tiene todos los permisos para administrar las herramientas y todas las bases de datos de SQL Server 2008. Es un Sper Usuario. El siguiente paso es crear un Nuevo Usuario con Permisos Limitados
3 ModificarUsuario SA
A.- Expandir la carpeta Seguridad y luego Inicios de Sesin B.- Clic en Nuevo Inicio de sesin C.- Ingresar Nombre de Inicio de sesin y su contrasea
La contrasea ser: pandal1980 Con autenticacin SQL Server Las contraseas deben tener una combinacin especial de dgitos por seguridad
Pgina 99 de 101
Docentes:
CONSULTAS Abrimos el analizador de consultas y agregamos y ejecutamos lo siguiente Use Pandalsoft Go Select * From Planilla GO
Como Puede Ver El Usuario Jhonny No Tiene Acceso A Ninguna Base De Datos Ni Tampoco Puede Crear Bases De Datos. Este Usuario Es Un Usuario Sin Permisos. Quin Administra Los Permisos? Un Usuario Que Tiene El Rol De Sysadmin En Nuestro Caso El Usuario
SA
Lic. Zambrano Arce, Julio Lic. Israel Huaraca Pgina 100 de 101
Docentes:
B.- ahora crearemos el siguiente escenario. Te entrego estas lneas de script Use Pandalsoft Go -- Consultando Select * From dbo.Planilla GO -- insertar nuevo registro de PEPE INSERT Planilla VALUES('E0006','PEPE',1200,'12/12/2011','Obrero',5) -- modificando du fecha de contrato de PEPE UPDATE Planilla SET FinContrato='12/12/2013' WHERE IdEmpleado='E0006' --eliminando a PEPE DELETE FROM Planilla WHERE IdEmpleado='E0006' Haremos que el usuario JHONNY solo tenga acceso a la base de datos Pandalsoft. Adems el solo podr insertar registros a la tabla. y NO podr actualizar ni eliminar registros. Adems te dars cuenta que el usuario JHONNY no podr crear bases de datos Y Bueno este escenario lo haremos en clases. As que les dejo con las ganas. Investigar y practicar es lo que nos hace ms grandes. NUNCA LO OLVIDES
Docentes: