You are on page 1of 113
SENATI PROGRAMA NACIONAL DE INFORMATICA Programacion de Base de Datos en SQL Server MANUAL DEL PARTICIPANTE NET Pte Programseién de 80 rsa Sorver SENATI Manual partspane TABLA DE CONTENIDO Capitulot: Creacién de Vistas Introduccion Creackin y manipulaciin de vistas. Creacién de vistas copii informacion on vistas . Tipos de vistas Modifica disefio de las vistas... Eliminacién de vistas Preguntas de repaso. Capitulo 2: Procedi Introduceién. Creectn de procediniontos ainacaradoe. Uso de parémetras con proceckmentos almaconados... Ejecutarprocedimionos almacenados autométcamente al iniciar SQL Server. Uso de procedimientos aimacenados remotos. Preguntas de repaso ;ntos almacenados Capitulo 3: Desencadenadores ‘Trabajo con desencadenadores. CComprensién de las tables inserted y deleted. (reacién de desencadenadores.... Decencedener hserciones y actuatzaciones Desencadenar eliminaciones... Encepsulamiento de les regs de negocbs. Uso de desoncadenadores INSTEAD OF... Recopietin de informactn sobre los devencadenadres.. Preguntas de repaso.. Capitulo. Introducet6n. Funciones eecalres. Funciones de valores de tabla en lin Funciones de valores de tabla de mitiples instrucciones: Preguntas de repaso.. unciones definidas por ol usuario Capitulo 5: Manejo de Transacciones ‘ProgremsNeconaideinbmiies Programacién de BD ‘on SOL Sarver Marval del parkpante a ‘Secuencia de comandos. ‘Transacciones. Tipos de Transacciones. Transacciones explictas La vateble global @@trancount.. ‘Transacciones autométicas. ‘Transacciones implicitas Preguntas de repaso.. Capitulo 6: Herramientas de monitoreo y rendimiento Fundamentos y herramientas de monitoreo del rendimiento Soleccion y optimizacién de hardware. Parémetros de configuracion de Windows 2000. Contadores del monitor de rendimiento de Windows 2000. Configuracion de SQL Server Opciones de procesador Opciones de consultas en paralelo Opciones de configuracién de memoria... Opciones de E'S. Opciones de consulta indice . \Monitoreo del rendimiento de SQL Server Contadores del monitor de rendimiento de SQL Server. et Procedimiantos aimacenados de sistama para 6! monitoreo del rendimiento. La ventana de Actividad actual del Administrador corporativo de SQL... Uso de! Analizador de SQL Server Configurar un registro de auditor... Uso de una raza pera superar el rendimienio m1 1 Asistente para optimizaciin de indices . 72 Preguntas de repaso.. 75 Capitulo 7: Analysis Services Introducetén, Comprensién del almacenamiento de datos . ‘Tablas de hechos Dimensiones. ‘Agregacion Comprensin de los puestos de datos Crvacion de un almacén de datos. CComprensisn de los componentes de Analysis Series... LAP. Mineria de datos. Meta Data Services eu. nnn Instalacion de Analysis Sorvicos Pte Programaciin de BD ‘on SL Server SENATI Manual partspane ‘Acceso a la aplicacion de ejemplo para Analysis Services... Preguntas de repaso... Capitulo 8: Programacién desde el lado del Servidor Introduce. ene Tablas Temporates... Uiiizar tables temporales. Variables. Variables bealos Variables globales.. Variables de Configuractén Variables estadisticas. Variabios dol sistoma .. Ublizar variables Declarar una variable local. Control de ejecucién... Procesamiento Condicio Elcomando GOTO... Bucles.. Cursores de Transact-SQL. Caracteristicas de los cursore: Tos de cursor. Ullizar Cursores: Gearcursores... Manipular fas mediante un cursor . Preguntas de repaso... ‘ProgamaNedonaldeinbeniiee Programackin de 8D rt Tr sat Saver Maral del prkspante SENATI Programe Nacional e homies ww worsens"? SENAT Mana lpr cpanta Capitulo | Creaci6n de Vistas Objetivos: ‘A finalizar este capitulo, el participante tendré conocimientos sobre: ]@ Creacién y manipulacion de vistas. Tipos de vistas. & Eliminacion de vistas. Introduccién La creacién y la manipulacién de vistas le permiten especiicar la manera en que los usuarios voran exactamente los dalos. Puede penser en ellas como si fueran consultas almacenedas, Creacion y manipulacién de vistas Las vistas le permiten dividr en forma horizontal o vertical la informacién de una o més tablas de una base de datos. En ots palabras, con una vista puede permitir que los usuarios vean solo los campos y fas seleccionados, La figura muestra una vista que permite que los usuarios vean solo los campos de apelido y nombre de los aulores (particin Vertical) y solo los autores que tengan un apelido que empiece con la letra M (particion orzontal). ‘uname | autnamo | city | stato | ap |Caloney [Sarah Fresno | CA | 90225 Deitch Pino | Tx | 76503, Dominic Bend oR | 9722 Ferrous ‘Towns | ME | 2566 MecFeather Bowie | TU | 82331 MacDonald London | mo | 85823, [oretand Reno NV | 89509) Spinola Moreno | MN | 73220 ‘Program Neconaldelnemiice Programacisn de 8D rt erat Soo Merial el parante SENATI uname | au_fname MacFeather [Steams MacDonald | Stephani El.c8digo utlizado para crear esta vista podria verse de la siguiente manera: CREATE VIEW dbo. wAutores AS SELECT au. Iname, au_fhame FROM authors WHERE au_Iname LIKE "M36" ‘También pueden crearse vistas para mostrar informacisn derhada, Por ejemplo, puede crear una vista que muastre el apelido, nombre y titulo del fibro de un ‘autor, y luego un campo calculado 0 derivado que muestra el nimero de libros vendidos ‘muttipicado por la cuota de regalias por libro Las vistas también tonen las siguientes ventajas: ‘+ Usted controla lo que los usuarios pueden ver. Esta capacidad es cil tanto por seguridad ‘como por faciidad de uso, Los usuarios no tienen que ver informacion extra que no requieren. ‘+ Puede simplifcar la interfaz do usuario ceando vistas de consultas utlizadas ‘cominmente. Con esta capacidad, los usuarios pueden ejecutar vistas con instrucciones simples, en lugar de toner que proporcionar parémotros cada woz que so ojecute la consutta, ‘+ Las vistas fe permiten establecer la seguridad. Los usuarios pueden controlar s6lo lo que usted les permita ver. Esto podria ser un subconjunto de fas 0 columnas, informacin ‘estadistica 0 un subconjunto de informacién de otra vista ‘+ Puesto que una vista es un objeto de base de datos, puede asignar permisos a un usuario en relacién con la vista. Este mélodo es mucho mas eflcente que colocar los, ‘mismos permisos en oolumnas individuales de una tabla, Ahora pueden crearse indices en las vistas, fo que las convierte en un método increiblementa eficiente para oblener acceso a los dalos solcitados con frecuencia, ‘+ Los datos pueden exportarse desde una vista, utiizando la herramienta BCP (Programa de Copia Masiva).. Las vistas son objetos muy poderosos y dtiles en el disefio de su base de datos. Puede ‘olorgar a los usuarios acceso a ciertas columnes y fias dentro de su tabla, pero una vista es ‘mucho mas facil de mantener que fos parmisos de usuario en columnas individuales; por fo tanto @s el metodo preferide para particionar informacion. Esta también es una consideracién de rendimiento. Al colocar permisos en columns de una tabla, cada vez que se hace referencia a esa tabla por alguna razén, deben comprobarse los permisos en cada columna alla que se hace referencia. Creacién de vistas Puede croar vistas ullizando la herramionta Analizador de consuitas de SQL Server o ol ‘Administrador corporativo de SQL Server. La sintaxis de a instruccién VIEW es la siguiente: Programe Nacional e homies ww worsens"? SENATI Manus! partpan (CREATE VIEW [propitaro] nombre_vista [(nombre_cokurna[,nombr@_cokmna |) [WITH atibutos ‘AS instuccién_select IWITH CHECK OPTION ‘irbutos: (ENCRYPTION | SCHEMABINDING | VIEW_METADATA} Una instrucolén CREATE VIEW simple se ve de la siguiente manera: CREATE VIEW wTodosLosAutores (AS SELECT * FROM authors Puede utiizar esta vista de diversas meneras, como se muestra en los siguientes ejemplos: SELECT * FROM wTodostosAutores. SELECT au_fname, au_Iname FROM wwTodosLosAutores SELECT au_Iname FROM wwTodosLosAutores WHERE au_Iname like 9%" unde especiicar varias opciones en la instruccién CREATE VIEW: WITH CHECK OPTION. WITH ENCRYPTION, WITH SCHEMABINDING y WITH VIEW_METADATA. De manera predoterminada, las modiicaciones de datos reakzadas por medio de una vista no se comprueban para determina sibs fis afoctodas estarén dentro de la definicion de la Vista, En otras palabras, pueden realzarse incerciones y actualizaciones @ la tabla base incliso sila vista no las uti. Por ejemplo, una vista podria paricionar una tabla en forma horizontal y proporcionar sélo Ios registos que tengar el apelido de un eulor que comience con laleta FSi ullizar WITH CHECK OPTION, podria agregar potencialmente un nuevo regkstto que tuvira el apelido Meredith. La opoén WITH CHECK OPTION obliga @ que todas los insirucciones do ‘modifieacin de datos aplicadas a través de la vista utlicon los etorios establecidos con la Instucci6n SELECT que dotin [a vista. La opcén WITH ENCRYPTION cia fa instuccion CREATE VIEW en la tabla de sistema sysoomments. Una vez quo se ofa una defnicion do Vista, no puede ser vista por nadie. La Gnica mansra de descirar una visas quitara y logo volver a crear. Las siguientes vistas de ejamplo se crean con las opciones WITH CHECK OPTION y WITH ENCRYPTION habilladas: CREATE VIEW viMiComprobacion AS select * from authors WITH CHECK OPTION (CREATE VIEW wiMiCifrado WITH ENCRYPTION AS select * from authors Programe Nedoral de nornbica Programacisn de 8D rt erat Soo Manual del parkdpante SENATI Cucndo cree visas siompre debe probar la insiruociin SELECT ants de inckira en una isla. De osta manera puede evil resultados inesperacos. Por ejampl, puede crear una Visla que dewela todas los fias de su taba. Le tabla podria toner solo 500 fis al crear su visla. Dos arics después, esa misma tabla podria devoNer 10.000 fias de datos. zSigue siondo esta instuccion SELECT adecuada? Le opelén WITH SCHEMABINOING lo obliga a ulizer nombres compuestos por das partes (propietario objeto) para hacer referencia a las tablas base, vistas 0 UDF a los que se hace referencia en la instruccién SELECT de su vista. Al hacer no puede modificarse ni quiarso ol ‘esquema de esos objotos base, a menos que se quile 0 sa allore la vista Por ejemplo, si crea una vista con base en las columnas au_Iname y au fhare de la tabla authors ublza la opcién WITH SCHEMABINDING, no puede quitar le table euthors. PPrmerotendria que quitarla vista y luego la tabla authors. La opcion VIEW_METADATA especiica que cuando se solcten los metadatos del modo de exploraciin de un clente SQL Server 2000 debe devolver informecén acerca de la vila {(netedeios) en iyger del conjunto de resuitedos de le instucciin SELECT de lp vista. En a ‘actualiiad, as APIs DBLIB y ls biblioteces de OLED soporian esta caracterisica Tenga en cuenta estas reglas y resticciones al cear vst ‘+ Las instrucciones CREATE VIEW no pueden combinarse con otras instrucciones de SQL ‘en un be. ‘+ Alcrear una vista, se comprueba cualquier objeto de base de datos a los que haga refe- rencia la vista en él momento en que ésta se cree. ‘+ Cuando ejacute una vista, debe tener permiso SELECT en los abjetos a los que se hace referencia on la defnicién de la vista, a menos que los objetos no tengan un propietario especticado. Esto signfica que usted podria crear potencialmente una vista que no pueda ejecutarse. Los permisos an las vislas se comprueban cada vez que se ejecute la Vista y no cuando se crean. ‘+ No puede incluir dentro de une vista les ckéusulas ORDER BY, COMPUTE ni COMPUTE BY de su instruccién SELECT. ‘© Si quita objetos a fos que se haga referencia dentro de una vista (@ menos que haya ‘especiicado la opcion WITH SCHEMABINDING). la vista no se elimina. Recibiré un ‘mensaje de error a siguiente vez que trate de uliizar esa vista, or ejemplo, si crea una vista combinando informacion de dos tablas baso y luego quita luna de las tablas, fa vista no se elimina, pero no puede ejecutarse. Para eviar este problema, utlice ol procedimiento almacenado de sistema sp_depends para ver qué objotos dependientes tone ia tabla antes de quitara, ‘+ No puede hacer referencia a tabias temporales en una vista. Eslo también significa que 10 puede utllizar una ciusula SELECT INTO en una Vista, ‘© Sisu vista utliza una instruccién SELECT * y se agregan columnas en la tabla base a la {que se hace referencia en la instruccién SELECT, las nuevas columnas no aparecen en ‘a vista. EI * se roemplaza al momenio de su creacién por una lista fja de columnas. Debe allerarla vista para incluir las columnas recién agregadas. ‘© Sicrea una vista hija basada en una vista madre. Tenga culdado de lo que hace la vista ‘madre. Podtia toparse con problemas si esta ultima os grande y compleja, ‘+ Los datos no se guardan por separado en una vista. Esto significa que si modifica los datos en una vista, esta modificando los datos de las tablas base. ‘+ No puede hacer referencia a més de 1,024 columnas en una vista. ‘+ Debe especificarlos nombres para todas las columnas derivadas en su vista. Programe Nacional e homies Rocopllar informacién on vistas Para obtener el texto utlizado en Ia instuccién CREATE VIEW, puode utlizar ol ‘Administrador corporalivo de SQL Server, 0 ejecutar el procedimianto aimacenado de sistema sp_helplext y pasar el nombre de la vista como parametro: sp_helptext wiMiComprobacion (CREATE VIEW vwMiComprobacion AS SELECT * FROM authors WITH CHECK OPTION Si ejecuta Sp_dopends en le vista anterior, obtendra lo siguiente: EXEC sp_depends vwMiComprobacion En la base de datos actual, el objeto especiicada hace las siguientes referencias: Name type update selected column dbo authors user table 0 yes auld dbo.authors user table 0 yes au_hname dbo authors user table 0 yes ‘au_fname dbo.suthors user table 10 yes phone dbo.authors user table 0 yes address dbo authors user table 0 yes. oly dbo.authors user table 0 yes. state dbo.authors user table 0 yes: zp dbo authors user table 10 yes contact También puede consultar las siguientes tablas del sistema para recopilar Informacion acerca de una vista: ‘+ syscolumns devuelve las columnas definidas dentro de una vista. ‘© syscomments devuelve el texto de la instruccién CREATE VIEW. ‘+ sysdeponds devuelve las dependencias de la vista. + sysobjects devuelve el nombre de la vista. Tipos de vistas Cada tipo distinto de vista depende del tipo de insttucciin SELECT utiizada para crearla ‘Ahora veamos mas detalladamente las _proyecciones, combinaciones, agregados, ‘columnas calculadas y vistas basadas an otras vistas. Vistas de proyeccién El tipo mas simple de vista se conoce cémo proyeccién. Una proyeccién es simplemente tun subcorjunto de columnas de una tabla: CREATE VIEW wwMiVista ‘AS SELECT au_Ineme, au_fname FROM authors ‘Programs Neconaldelnomiice Programacién de BD rt Tr sat Saver Marl et parkipant SENATI Para trabajar con la vista recién croada utlice la siguiente instruccién’ SELECT * FROM vwMiVista ‘au_fnamo au_Iname Bennet ‘Abraham Blotchet Halls, Reginald Carson Chery DeFrance Michel ol Castilo. Innes Dull Ann Green Marjorie bel Lol White Johnson Yokomoto Akiko (23 flas atectadas) Vistas de combinacion Las combinaciones vinculan filas de dos o més tablas mediante la comparacién de valores on las columnas especificadas. Por ejemplo, tal voz usted quiora dar a los Usuarios una lista de autores de la tabla authors y los titulos de los libros que han escito de la tabla tities. Estas dos tablas tionen una rolacién de varios a varios en la base de datos pubs, y por lo tanto ultlizan la tabla titeauthor para crear dos relaciones de uno a varios, como se muestra en la figura. Authors fitleauthor titles: au_id au_id title_id au_iname title_id title ay_fname au_ord phone royaltyper address aty state zip contract Programe Nacional e homies wr SENAT Puede escribir una combinacién para recopllar datos de las tablas authors, titles y tileauthor, pero es mucho mas eficiente crear una vista, como se muestra a continuacién. CREATE VIEW vwAutoresTitulos [AS SELECT authors, au_Iname, authors.au_Mmame, titles.tide FROM authors INNER JOIN titleauthor ON authors.au_id = titleautor.au_id INNER JOIN titles (ON titles.title_id = titleauthor.title_id Luego ejecute lo siguiente para mostrarel apelido, nombre y titulo de cualquier libro que hayan escrito todos los autores con un apellido que empiece con la letra M SELECT + FROM vwAutoresTitulos WHERE au_Iname like "M%' au_Iname au_fame Title MacFesther Stearns Cooking with Computers: MacFoathor Stearns ‘Computer Phobie AND Non-Phobic.. (@ files afectadas) Otros tipos de vistas ‘También puede crear vistas ulilizando funciones de agregado, columnas calculadas y Vistas basadas en otras vistas. Los agregados ulilizan funciones de agregado tales como AVG, COUNT y SUM. Puede ullizar columnas calculadas para crear datos de resumen para sus usuarios. Puede utilizar una vista para refinar ain mas la vista original. Por ‘ejemplo su vista original podria proporcionarle informacién sobre todos los productos con sus precios corespondientes y la cantidad vendida. Puede crear una nueva vista a partir de 9sa vista que calcule la multiplicacion de la cantidad por el numero de unidades vendidas para un numero de articulo especitico. CREATE VIEW waLibrosTotales AS SELECT title (price * yid sales) ‘Total’ FRON tities ‘Ahora puede utlizar esta vista para devolver todos los libros de la tabla titles con una ‘columna tlamada Total, la cual muestra el precio muttiplicado por las ventas anuales del afio en curso, Select * from vvLibrosTotales title Total ‘The Busy Executive's Database Guide 81,859.05 ‘Cooking with Computars: Surreptitis Balance .. 6318.20 You can combat computer stress! 5978.78 straight Talk About Computers 81,859.05 silicon Valley Gastronomic Treats 061968 ‘Programs Neconaldelnomiice mre” Pe Maral dl print SENATI “The Gourmet Mctowave es1554 ‘The Psychology of computer Cooking (ou) te] Ld Fity Year in Buckingham Palace Kichons 180,397.20, Sushi Anyone? 61,984.05 (18 Mas afoctodas) Modificar datos en la vista Usted puede modiiicar datos en una vista. Recuerde que al modificar datos en una vista se ‘modifican los datos de las lables en las que se basa la vista. Cuando se modifican dalos través de una vista no indizada y/o una vista no particionada se aplican a varias reglas: ‘+ Las modificaciones no pueden afectar a mas de una tabla. Si su vista combina datos de una o mas tablas, puede modificar sélo los datos de una de las tablas base. + Puede modificar datos sélo de una tabla base, asi que no puede alterar los agregados, las columnas calculadas ni las columnas con funciones integradas. ‘+ Siutliza la opcién WITH CHECK al crear o alterar sus vistas, todos los datos que van a insertarse 0 2 modificarse a través de la vista deben someterse a las restricciones de la instruccién SELECT utilizada para crear la vista Por ejemplo, si su instruccién SELECT tione una cléusula WHERE au_Inamo LIKE 'M%", puede agregar 0 modificar flas que se ajusten sélo @ sa clausula WHERE, ‘+ Las columnas NOT NULL definidas en la tabla base, pero que no formen parte de la vista, también deben tener asignados valores predeterminados para poder insertar luna nueva fila por medio de la vista. ‘+ Sia vista contiane una cldusula UNION, se conoce come visla particionada y no puede utiizarse para inserciones ni para actualizaciones bajo condiciones muy estrictas. Para ‘obtener més informacién, vea el tema Crear y mantener bases de datos de los Libros ‘en pantalla de SQL Server 2000. Modificar disefio de las vistas En SOL Server 2000 puede alterar una vista por medio de la instrucién ALTER VIEW. Su sintaxis ¢s la misma que la utlizada en CREATE VIEW, sblo que se reemplaza CREATE con ALTER. Por lo tanto la sintaxis para la instrucckin ALTER VIEW es como se muestra @ Continuacién ALTER VIEW _[propietario,Jnombre vista [(nombre_columnaf, nombre_columna...])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA }] AS instruccién_select [WITH CHECK OPTION] La ventaja de utilizar ALTER VIEW es que se retisnen todos los permisos que ya han sido ‘asignados a la vista. Si quita y vuelve a crear esta vista, esto no se aplica No obstanie, debe tener an cuenta que si su vista tiene acceso a nuevos objetos que tengan especiicado un pro- pietaro los usuarios que tengan permiso en su vista recién alterada deben tener también los ppermisos apropiados en esos objatos a los que se acaba de hacer referencia, Programe Nacional e homies ww worsens"? SENATI Manus! partspane Eliminaci6n de vistas Para eliminar una vista de su base de datos, seleccione la vista deseada en el Administrador ccorporativo de SQL Server y luego haga clic con el botén derecho del ratén y seleccione la opcién Eliminar. También puede utlizar una instruccién DROP. Esta instruccién ulliza la siguiente sintaxis: DROP VIEW [propietariojombre_vista [,[propietario]nombre_vista..] Para quitar una vista llamada vwMiComprobacion, que tiene como propietatio al dbo. Utlice este codigo: DROP VIEW dbo. wwMiComprobacion Este comando no devuelve datos ni flas. Programe Nedoral de nornbica 8 Programacién de BD won SOL Sarver Marval del parkpante Preguntas de repaso 1. {Qué ventajas tiene utilizar una vista? 2 {Cudles son los tipos de vistas? 3. 4Cémo se modifican los datos desde la vista? 4. {Qué instruccién se utliza para eliminar una vista? Como modificamos el disefio de una vista? Programe Nacional e homies Pte Propramactin de 8 Seat Se SENATI Mara tpn Capitulo 2 Procedimientos almacenados Objetivos: ‘A finalizar este capitulo, el participante tendré conocimientos sobre: ] Creacién de Procedimientos almacenados. Uso de parémetros con procedimientos almacenados, ]% Compilar procedimientos almacenados. Introduccién Los procedimientos slmacenados son insirusclones precompilades da T-SQL alma- ‘conadas en una base de datas de SQL Server. Como los procedimientos son precompliados. Por lo ganeral offecen el mejor rendimiento en cualquier tipo de consulta. Muchos ‘procedimienios almacenados de sistema definidos con sp recopilan informacién de las tablas del sistema y son especialmente dtiles en la administracion. Usted puede crear también sus propios procedimientos aimacenados. .2Por qué son tan maravilosos los procedimientas almacenados? LQué tienen de espacial estos objetos de SAL Server? Los procedimientos almacenades son conjuntos de comandos T-SQL que se ejecutan répidemente y se guardan en una base de dalos de SQL Server. Cuando se elecuta por primera vez un procedimiento almacenado, se llevan a cabo todos los pasos que se muestren 2 continuacién. Luego se coloca en memoria ol plan de consulta del procodimionto ‘almacenado. En las siguientes llamadas al mismo procedimiento almacenado se realiza s6lo ol pasos. 1 Se analizan todas Iss piezas que componen al procedimiento. 2. Se comprueba la existencia de los componentes que hacen referencia a otros objetoe on la base de datos (labas, vistas, etcétera). Este proceso se conoce también como resolucion. 3. El nombre del procedimiento se guarda en la tabla sysobjects. y el cédigo necesario para crear ol procedimiento almacenado se quarda en syscomments. ‘+ El proceso de compilacién continua, durante el cual se crea un plano en el que se indica ‘como ejecutar la consulta. Este plano se conoce cominmenie como plan normalizado o bo! de consulta. Este érbol se guarda en la labia sysprocedures. 5. Cuando el procedimiento almacenado se ojecuta por primera vez, se loe ol arbol do Consulta y se optimiza completamente en un plan del procedimiento y luego se ejecuta Esto le ahorra ol tempo requerido para vover a enalizar, resolver y compllar un &rbol de consulta cada vez que se ejecuta el procedimiento almacenado. (tro beneficio del uso de un procedimianto almacenado ¢s que despuse de ojecutarse, el plan del procedimianto se guarda en la caché de procedimientos. Esto significa que la proxima vez ue lice ese procedimiento aimacenado én la misma sesién, se leera directamente de la Ccaché y se ejecutara, Gracias a ello se obtiene una considerable mejora en el rendimiento, ‘comparacién con ejecutar una y otra vez una consulta esténdar de SQL. Los procedimientos almacenados tienen benefcios adicionales: ‘Programs Neconaldelnomice Programacisn de 8D rt erat Soo Manual del parkdpante SENATI + Puede utilizarlos para encapsular reglas de negocios. Una vez encapsuladas, varias aplicaciones pueden utlizar dichas regias, con lo cual se obtiene una interfaz de datos consistente. Esto también tione la ventaja de que si debe cambiar la funcionalidad, puede ‘camblarse slo en un lugar, en lugar de una vez para cada aplicacin. ‘+ El rencimionto aumonta en todos los procedimiontos almaconados, pero aumenta adn més cen los procedimiontos almacenados que se ejpculan mas de una vez. ya que ol plan de consulta se quarda on la caché de procedimiontos. ‘+ Conlos procedimiantos aimacenados puede pasar arguments y también recibir dato. ‘+ Los procedimientos aimacenados pueden configurarse para ejecutarse aulométicamente al Iniciar SOL Server. ‘+ Los procedimiantos almacenados pusden ullizarse para extraer o modiicar datos (No al ‘mismo tiempo). ‘+ Los procedimiantos almacenados se invocen explictamente. A diferencia de los desencadenadores, los procedimientos almacenados deben ser lamados por su aplicacién, secuencia de comandos, lote o tarea. En general, los procedimientas almacenados son componente de bases de datos poderosos. Los. procedimienlos almacenados de sislema son tles para la administracién y ol ‘mantenimiento de bases de datos. Los procedimisntos almaconados definidos por el usuario son cities en cualquier tarea para la que hayan sido diseftados. Tlenen ventajas sobre las vistas y consultas ya que son precompilades, y después da su primera ejecucin se guarda su plan da ejecuciin en la caché de procedimientos que reside en la RAM (memoria de ‘acceso aleatori). Otro beneficio de fos procedimientos almacenados es que se puede dar ppermiso a un usuario para que ejecute un procedimiento aimacenado, incluso si ese usuario 1 tiane permisos an las tablas involucradas. Creacién de procedimientos almacenados La instruccién CREATE PROCEDURE se ulliza para crear procedimientos almacenados. Estos se crean en la base de dalos actual a menos que este creando procedimientos ‘almacenados tomporales en tempdb, Para crear un procedimiento almacenado debe tener el ppormiso para eecutar la Instucelsn CREATE PROCEDURE. ‘Accontinuacién se muestran las reglas para crear un procedimiento almacenado: ‘+ Los objetos a los que se haga referencia en el procedimianto almacenado deben existir cuando este se ejecute. Esta caracteristica conockda como resolucién diferida de nom= bres, le permite hacer referencia @ objetos que no existan en tiempo de compilacién, Puede hacer que su procedimianto almacenado cree objetos temporales y luego hacer referencia a ellos posteriormente en el mismo procedimiento almacenado. ‘+ No puede crear y luego quitar 0 voNer a crear objetos con el mismo nombre en un solo procedimionto aimacenado, ‘© Puede toner un maximo de 1,024 parametros. ‘© Puede hacer referencia a tablas temporales dentro de su procedimiento almacenado. Las {ablas tomporales locales desaparecen al erminar el procedimiento. ‘+ Los procedimientos almacenados_no pueden contener las siguientes instrucciones CREATE de T-SQL: CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER y CREATE VIEW. ‘+ Puede anidar procedimiantos dentro de otros procedimientos (hasta una profundidad de 32 niveles). ‘+ Al igual que con las vistas, si utiza un * en la instruocién SELECT del procedimisnto ‘almacenado y se agregan columnas a la tabla involucrada, las nuevas columnas no aparecerin al ejecutarse el procedimianto. Debe utiizar la instruceién ALTER y voNer a compilar el procedimiento almacenado. Programe Nacional e homies Pte Programseién de 80 rsa Sorver SENATI Manus! partspane La sintaxis de CREATE PROCEDURE es la siguionte: CREATE PROC [EDURE] nombre_procedimiento (nimero) [@parémevo do, datos) [VARYING] (spredeteminds] OUTPUT], [WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION J], IFOR REPLICATION] ASinstruccién_sql [..-n] Después de ver algunas instrucciones CREATE PROCEDURE de ejemplo, aprenderé ‘acerca de los componentes nimero, perémetro, RECOMPILE y ENCRYPTION, (CREATE PROCEDURE pAutores, ‘AS SELECT au_fnane, au_Iname FROM authors, (ORD BY au_Iname DESC Este comando no devuslve datos ni fias. Para utitzar este procedimiento, puede ejecutario desde la ventana del Analizador de consulas: EXEC pautores, ‘au_fname ‘au_Iname Yokomoto Johnson White Dirk ‘Stinger la La Cheryl Carson Reginald Blotchet Halls ‘Abraham Bennet (23 fas afoctadas) Los resultados se muestran en una tabla de dos columnas con el nombre y el apelido desplegados en orden descendente. Recopilar informacién en procedimientos almacenados Para obtener 6! texto utlizado on una instrucciin CREATE PROCEDURE, utlice ol ‘Administrador corporativo de SQL Server 0 ejecute 61 procedimiento almacenado sp_helplext pasando el nombre de la vista como pardmetro: sp helptext pAutores Text (CREATE PROCEDURE pAutores AS SELECT au_fhame, au_Iname FROM authors ORDER BBY au_Iname DESC ‘Programs Neconaldelnomiice Programacisn de 8D rt erat Soo Manual del parkdpante SENATI ‘También puade utilzar el procedimionte almacsnado sp_depends para obtener un informe do bs abjolos de los que depende un procedimianto slmacenado. Para aplcar sp_depends al procedimiento anterior reaice lo sigule ‘sp_depends pAutores En la base de datos actual, ol objeto especticado hace las siguientes referencias: Nome ‘ype updated solectod column dbo.euthors ——_usertable 10 yes auld dbouthors user table 0 yes ‘au_Iname do.authors user table no yes ‘au_fname dbo.authors user table no yes phone doauthors ——_user table no yes address dbo.euthors ——_usertable 0 yos ty dboauthors user table no yes state dboauthors user table no yes 2p dbo.authors user table no yes contact (@ fas atectades) rear un grupo de procedimientos La primera opcién que analizaremos es la opcién; numero. Al especiicar un punto y coma y tun némero, puede crear un grupo de procedimientos almacenados. A menudo $8 crean grupos de procedimisntos almacenados para utiizarse en la misma aplicacion. Por ‘consecuencia, of mantenimiento es mas sencilo, ya que todos los procedimientos utiizados por una aplicacén especifica hacen referencia al mismo grupo. A continuaciin se muestra lun ejemplo de la Creacion de un grupo de procedimientos: CREATE PROC grupo_sp;1 [AS SELECT * FROM authors co (CREATE PROC grupo_sp;2 ‘AS SELECT au_Iname FROM authors. co CREATE PROC grupo_sp;3 'AS SELECT DISTINCT city FROM authors co Este lote de instrucciones crea un solo procedimiento llamado grupo_sp compuesto de tes procedimientos distintos. Para hacer referencia a los procedimientos individuales, ejectitelos ‘on su; numero como parte del nombre. Por ejemplo para rectbir un lstado de todas las clu- dades on las que viven los autores ullice o siguiente: EXEC grupo_sp;3 Cty ‘Ann Arbor Berkeley Corvallis ecg Nasal fori wr SENATE arsicctprtcparte covelo Gary Lawrence Ll Vacaville ‘Walnut Creek (16 fas afectadas) ‘Al quitar procedimientos agupados, necesta quar s6lo el nombre del procedimiento, (Cualquier procedimianto que sea parte de ese grupo también se quita: DROP PROCEDURE dbogrupo_sp. Uso de parémetros con procedimientos almacenados Los parémetros lo pormiten crear procedimiantos almacenados que se comportan de manera ‘un poco distinta cada vez que son llmados. Por ejemplo, puede escribir un procedimionto ‘almacenado que calcule ol promedio de una serie de calicaciones de pruetas que reciba. ‘No 89 sabe cuales van a ser las califcactones al crear el procedimiento, pero cada vez que ‘8 ejecute el procedimiento, recibira un nuevo promedio, La sintax's de la porcion de los parametros de CREATE PROCEDURE merece un andiisis: @parémetro tipo_datos [= predeterminado | NULL ] [VARYING] [OUTPUT] @parémetio especifica el nombre del parémetro dentro del procedimiento, Puede declarar hasta 1,024 parémelros dentro de un solo procedimiento almacenado. E| tipo de datos dal pardmetro puede ser cualquier tipo de datos definito por e! sistema 0 defnido por el usuario excepto image. El parametro predeterminado espectica un valor por defecto. VARYING se aplica al cursor (corjunto de registros) devuelio, y OUTPUT indica que se trata de un parémetio de retomo. La opcién OUTPUT le permite devolver informactén del procedimiento almacenado al procedimianto invocador ilustemos este punto con cédigo de ejemplo. El siguiente procedimianto almacenado acepia cinco parémetios, calcula el promedio y lo muestra ‘como salida: ‘CREATE PROCEDURE calificaciones @calift smaltint, @calif2 smaltint, @calif3 smallint, @calirt smaltint, @califS smaltint, @miProm smallint SALIDA ‘AS SELECT @miProm =(@calift + @eallf2 + @calif3 + @calfé + @callfS)/5 Para extraer el valor miPromedio de este procedimiento, primero debe declarer esta variable y luego ejecutar el procedimiento. Observe que en este ejemplo se pasan los pparémetros por posicién. DECLARE @PromedioCalif smallint EXEC calificaciones 10, 9, 8, 8, 10, @PromedioCalif SALIDA SELECT "El promedio de califcaciones es: ', @PromedioCalit co ‘Programs Neconaldelnomiice Programacisn de 8D rt erat Soo Merial el parante SENATI Bi promedio de califcaciones es: 9 (1 filas afectadas) Primero debe ctear el procedimiento califcaciones declarando a miPromedio como variable OUTPUT. Luego debe declarar una variable temporal llamada PromedioCalif y pasar ol promedio de calfficaciones en su lamada al procedimiento almacenado con ol parémetro OUTPUT. Con esto se coloca el valor de miPromedio del procedimiento ‘almacenado en la variable PromedioCalif que osté fuera del procedimionto. Luego se utiiza una instrucctén SELECT para Imprimir el valor de PromedioCalil. Obsorve que al pasar sus valores al procedimiento almacenado los pasa en orden por posicién. También puede pasar los pardmetros por referencia lo cual le permite pasar sus variables en ‘qualquier orden. Por ejemplo el siguiente cédigo pasa los valores fuera de orden, y ain asi se obtiene el mismo resultado que antes: DECLARE @PromedioCalif smallint EXEC calificaciones @calif = 10, @ecall3 = 9, @calif2 = 8, @califé = 8, @califS = 10, @miPromedio = @PromedioCalif SALIDA SELECT "El promedio de calificaciones es: ', @PromedioCalit co (tra manera de pasar informacién de vuelta al procedimiento invocar es utlizando la palabra clave RETURN. Se pasa una variable directamente al procedimiento invocador sin utiizar las instrucciones OUTPUT necesaries tanto en la definicon dol procedimionto almacenado y la llamada al procedimiento. Demos un vistazo al cédigo para utlizar la palabra RETURN: (CREATE. PROC MiRetorno tt smalint, @12 smaliint, Qvalret smalint AS SELECT @valret = @tl + O12 RETURN @ valet Después de crear este procedimionto escriba lo siguiente para ejecutari: DECLARE@ miValorRetomo smaliint [AS SELECT @miValorRetomo = MiRetoro 9, 9, 0 SELECT’ valor de retorno es: @miValorRetomno Opcién WITH RECOMPILE Puede agregar la opcién WITH RECOMPILE en las Instrucciones CREATE PROCEDURE 0 EXEC PROCEDURE. Su ubicacién afecta la manera en que se procesa y ejacuta el procedimionta almacenado Uso de WITH RECOMPILE en una instruccién CREATE PROCEDURE. ‘Al utilizar WITH RECOMPILE en la instruccién CREATE PROCEDURE, ol pian de @jecucion no se guarda en la caché de procedimientos. Todo el procedimiento se vuelve a ‘compilar cada vez que se ejecula. Esto es similar a la manera en que se manoja una ‘consulta esténder. Volver @ compilar puede ser util en procedimientos almacenados con pparémetros que hacen que el plan normal de ejecucién se ejecule pobremente, Al volver 2 ‘compilar cada vez que se vaya a ejecutar, el procedimianto puede optimizarse para los ‘huevos parametros. Este ejemplo muestra un procedimiento almacenado con la opcién WITH RECOMPILE: CREATE PROCEDURE MiProcRecompllado WITH RECOMPILE Programe Nacional e homies Pw AS SELECT * FROM authors ORDER BY au_Iname Uso de WITH RECOMPILE en una instruccién EXEC PROCEDURE. También puede utlizar la opcién WITH RECOMPILE en la instruccién EXEC PROCEDURE. Se compila el procedimienio almacenado para esa ojecucién individual y luego se guarda ol nuevo plan en la eaché del procedimiento para los siguientes comandos EXEC PROCEDURE. En el siguiente ejemplo se utliza WITH RECOMPILE en una Instrucci6n EXEC PROCEDURE: EXEC pAutores WITH RECOMPILE au frame u_Iname Akiko Yokomoto Johnson White Dire Stinger Ld a Chery Carson Reginald Blotchet Hells ‘Abraham Bennet (23 fe ofoctadas) Los resultados se muestran en una tabla de dos columnas con el nombre y el apellido \desplegados en orden descendents. El procedimiento también se vuelve a compilar, y el ‘nuevo plan se guarda en la caché de procedimientos. Compilar todos los procedimientos almacenados Puede hacer que todos los procedimientos almacenados y desencadenadores que hagan roferoncia @ una tabla especifica se vuelvan 2 compilar la proxima vez que so ejeculen nile el procedimiento almacenado sp_recompile: EXEC sp_recomplle authors, Ejecutar procedimientos almacenados autométicamente al iniciar SQL Server. Puede hacer que los procedimiontos almacenados so “autoojecuten’ al iniar SQL Server. La ejecucion de estos procedimientos almacenados empieza después de recuperar la ‘ltima base de datos al momento del inicio. Para crear esios procedimiantos almacenados con ejecucién automatica ullice el ‘procedimianto almacenado sp_procoption. Uso de la opcién WITH ENCRYPTION Esta opcién codifica las instrucciones de SQL utlizadas para crear el procedimianto y guarda el toxlo codificado on la tabla syscomments. El siguiente ejemplo ulliza la opeién WITH ENCRYPTION: CREATE PROC proc_codificado WITH ENCRYPTION AS SELECT * FROM authors Claro que este eédigo hace fo mismo que cuando se utiliza la opcién WITH ENCRYPTION on Ia instruccion CREATE VIEW- No puode ullizar sp_holptext ni ol Administrador corporativo de SQL para ver el texto del procedimianto almacenado, Programe Nedoral de nornbica yom 4000 roereatacee ~~ Manual del peripante SENATI Uso de procedimientos almacenados remotos Pose Inplementar y_ sjecar procedinianioe slmscenadoe conocioe somo frocadinionios sracarsdce remot, on cos srdoree de SOL Saver, Poa bla’ e {So de prcadramnse simacenodos rencion eo necesenoo siglon «- Elser moto debe permit of acceso on tome remota gun ven sano opton prntsrninede Gastso ‘oe Tauie SOL Sever, A anon ee aye rconguiste a0 Iroator or ona cptsn me noes pteocoptan por kre +. Amos srvdows debentner labo al oo servdr on aus aban ayes. + Ambos soridores doban tne su Deno de sesén en i tabla syloins Despuss de corgurar exis soeso, eo slecutin ls procedinienis aimaconados do la ca nonnr 90s cana hose oh tones Koala dtrrok’ oes tay cus snspomet ‘Deiglons al nembre del poceinions, HEC nombreservidor nombredb propletarlprocedimientonimacenado Por lompl, sl éaseeeeuar el procadrlenn elmecanado de sistame sp_selegn on el sorvor Consblad gocte ‘el sgona codbe pore opreger ID de hic da Solon fmado Marl al Sorc EXEC Conailded master. bo sp_adogn Mail Programe Nacional e homies Pte Propramactin de 8 Seat Se SENATI Mara tpn Preguntas de repaso 4. ECuéles son los beneficios de utilizar los procedimientos almacenados? 2 {Qué reglas deben seguir la creacién de un procedimiento almacenado? 3. Qué instrucciones se utlizan para crear un grupo de procedimientos? 4. 4Qué ventajas ofrece utlizar procedimientos almacenados con parémetros? 5. 2Qué realiza la opcidn WITH COMPILE? 6. Crear un procedimiento almacenado que muestre que libros se venden en cuales tiendas 7. 4Como puedo obtener una lista de todos los procedimientos almacenados en mi servidor? ‘Programs Neconaldelnomiice Programaelén de 8D rt erat Soo Merial el parante SENATI Programe Nacional e horniica Pte Propramactin de 8 Seat Se SENATI Mara tpn Capitulo 3 Desencadenadores Objetivos: ‘A finalizar este capitulo, el participante tendré conocimientos sobre: Creacién de Desencadenadores. Integridad referencial con desencadenadores. ] Encapsulamiento de la regia de negocios. Trabajo con desencadenadores Un desencadenador es un tipo especial de procedimianto almacenato que se invoca automaticamente al tralar de modiicar datos que estén disefiados para proteger. Los desencadenadores ayuden a asegurar la integridad de sus detos ya que impiden que se reaicon modiiceciones no autorzades 0 inconsistontes. Suponga que lene ls tales clentes, y pedkdos. Puede crear un desencedenador que asegure quo al crear un nuevo pedido éste se {nexo @ un ID de ciontovaldo. De la misma forme puede crear ol desoncadenador do tal ‘manera que stata de eiminar un cliente do la taba clenies, el desencadenador comprvebe si todavia hey pedidos relacionadas con ese cients y de ser esi, se detiane ol proceso do climinacién. Claro que también podria implomertar esta funcionalidad wtlizando integrkded reforencial docaratva. “También puede uttzar desencadenadores para hacer vaerregles de negocios mas complejes de lo que pueden sercon las resricciones. Por ejemplo un desencadenador INSERT se puede activar cuando se agregue un nuevo registo a su tabla pedidos. El desencedenador puede Comprobar el histerial de pago de clnte y determiner un término de pago apropiad. ‘Los desencadenadores no tienen parmetos y pueden invocarse explctamente. Esto significa «que para actvar un desencaxlenador debe inteniar na modiicacién de datos Puede anider desencadenadores hasta un méximo de 32 nivel. Los desencadenadores aridados funcionan asi: un desencadenador de su tabla pedidos puede agregar una entrada feu table de cuentas por cobrar que a su vez ejocula un desencadenador para comprober si el cliente tiene cuentas. por cobrar vencidas y luego se lo notiica a usted. Un desencadenador realza una sctuslzaciin en ota table, la cual a Su ver djecuta Su propio desencadenador De manera predeterminada todos los desencadenadores (INSERT, UPDATE, DELETE) se ejeculan después de realzar la modiicaciin de los. datos. Se conocen como desoncadenadores AFTER y efan el Gnico tipo disponive en versiones ankeriores de SQL Server. SQL Server 2000 inroduce el desencadenador INSTEAD OF el cual se ejecuta en lugar dela modiicacin de daios que se tenia pensada. Desde la perspectva de rondimiento, ls desencedenadores tionen une cantidadrelatvamonto baja do sobrecarga. La mayor parte del tempo empleado en la ojecucién de un =20) > 0 BEEGIN PRINT ‘No puede eliminar ninguna de estas tiendas.” PRINT ‘Algunas tiendas tienen més de 20 ventas!” PRINT ‘Se va ha deshacer su transaccién!” ROLLBACK TRANSACTION END Este comando no devuelve datos ni flas. ‘Ahora pruebe este desencadenador: DELETE FROM thlVentas WHERE stor_id = "7066" 'No puede eliminar ninguna de estas tiondas. 1 Algunas tiandas tienen o mas de 20 ventas! 1Se va a deshacer su transaccién! @filas afectadas) ‘Al menos una tienda con un stor_id de 7066 tiene mas de 20 ventas. Para comprobarlo ejecute esta instruccién SELECT: ‘SELECT stor_id, qty FROM thiVentas storid aty 6380 5 6380 3 "7066 50 ‘7066 75 ‘7067 10 Beal [el ‘9042 10 e042 25 ‘e042 30 (21 filas afectadas) ‘Ahora ejecute la instruccién DELETE de nuevo, esta vez ulllzando un stor_id de 6380 ‘Como puede ver del cbdigo anterior, esta instruccin debe oliminar esas Wendas, ya que ninguna entrada tiene en su campo aly una cantidad mayor de 20: Programa Nacional de nfornii Pte Programseién de 80 rsa Sorver SENATI Manus! partspane DELETE FROM tbiVentas (2filas afectadas) \Vuelva a ofecutar la instruccén SELECT, y vord que se eliminaron ambas tiondas con un 1D de 6380, y que ahora hay 19 flas de datos en lugar de 17. Exigir la integridad referencial ‘También puede utilizar desencadenadores para exigit la integridad referencial. Este es su principal propésito en una base de datos. Son especialmente stiles en actualizaciones y eliminaciones en cascada. Los desencadenadores se prueban al dliimo cuando ocurren las modificaciones de datos. Las restrcciones se comprueban primero en la tabla del @re ‘Programs Neconaldelnomiice mre” Pe Maral del prkspante SENATI todas las tlendas tienen un stor_id vilido” PRINT ‘en la tabla de tiendast” ROLLBACK TRANSACTION END Uso de desoncadenadores INSTEAD OF A utilizar un desencadenador INSTEAD OF, no se ejecute ol cédigo original que realiza ‘una modificacién en la tabla en su lugar, s¢ ejacute el codigo del desencadenador. Por ‘ejemplo podria crear un desencadenador en la tabla authors para informar a los usuarios uo los autores no pueden eliminarse. Podria hacer lo mismo con un desencadenador FOR.. AFTER normal, pero se requerira que los datos so modificaran primero y luego so deshiciora esta modificacién desde el interior del cédigo del desencadenador. Si utliza un 0 ROLLBACK TRAN ASE ‘COMMIT TRAN La instruccidn ROLLBACK TRAN cancela completamente la ansaccién. Cualquier trabajo realizado en la transaccién hasta es¢ punto se deshace, o cancela. También puede crear puntos de almacenamiento dentro de una transaccién y luego deshacer ol trabajo en forma solectva a e808 puntos. El siguionto es un ejemplo de cédigo para que entienda mojor esto: BEGIN TRAN UPDATE tablat SET colt =5 WHERE col2 SAVE TRAN puntoalmcenamiento. INSERT tabla? valores (3,16) IF @@error >0 ROLLBACK TRAN puntoalmacenamientot DELETE tabla3 WHERE colt >2 IF @@error > 0 ROLLBACK TRAN BSE ‘COMMIT TRAN Observe que después del comando SAVE TRAN aparece el nombre, el cual se conoce como ol ‘nombre del punto de almacanamionto. Al inclu ef nombre del punto de aimacenamiento en la primera instruccién rolback, esti expresando que, en lugar de deshacer toda la transaccin \desde el principio, desea deshacer hasta un punto.con un nombre, La instruco}bn INSERT que realza una ingereién en la table? serfa cancelada si se ejecutara la primera instruccién rollback, pero la transaccién en si continuaria, En esencia, la instruccién INSERT seria ‘eliminada” de Ib liansaccién, Como no se proporciona un nombre en la segunda instwocién rollback, ROLLBACK TRAN regresa hasta la instuccién BEGIN TRAN. ‘Ahora analicemos mas de cerca las instrucciones TRANSACTION, empezando con BEGIN y ‘COMMIT. BEGIN TRAN [nombre_transaccién] COMMIT TRAN [nombre_transaccién] COMMIT [WORK] Puede asignarse el nombre_transaccién opcionala la transacciin. EI nombre_transaccién debe ‘or un ientificador valido de SQL Server. Puede susiltukr una variable en cualquier parte on donde vea nombre_transacclén, siempre y cuando sea un nombre de transacelin vélido. No necesita dar un nombre @ una transaccién, con la excepeién de la instruccién BEGIN mas ‘externa de su transaccon. Con la instruecion COMMIT WORK no se permite espocificar ol ‘nombre de una transaccion: Las siguientes es la sintaxis del comando SAVE TRANSACTION: SAVE TRAN [nombre_puntoalmacenamiento] Programe Nacional e homies Pte Programseién de 80 rsa Sorver SENATI Manus! partspane ‘rombre_puntoalmacenamiento indica un punto seguro para abortar cierta cantidad de trabajo fen una irensacaiin, sin tener que cancelarla toda, E1 nombre_puntoalmacenamiento debe ser un identifiesdor valido de SOL Server. La siguiente 6s la sintaxis para el comando ROLLBACK TRANSACTION: ROLLBACK TRAN [nombre transaccién | nombre_puntoalmacenamiento] ROLLBACK [WORK] Haga referencia a la discustin anterior acerca de las instucciones BEGINICOMMIT TRAN y ‘SAVE TRAN pata obtener una descripciin de los nombres opcionales. De nuevo, la instruccion ROLLBACK WORK no le permite especifcar ya sea un nombre de transaccién o un nombre de punto de almacenamianto La variable global @@trancount Existe una variable global lamada @@trancount que so aplica directamente a estas transacciones. Al ejocutar una instruccién BEGIN TRAN. @@trancount so incrementa en uno Una instruccién SAVE TRAN no tiene efecto en @@rancount. Una instuccién ROLLBACK ‘TRAN puede tener varios efectos, dependiendo de si se especiica 0 no el nombre de una transaccién. Si no se espectica un nombre, @@trancount se restablece a0 (se deshace todo el trabajo). Si se especifica el nombre de la Gilima transacciin, @@lrancount se disminuye en ‘uno. Una insttuccién ROLLBACK WORK siempre mslablece @@tancount_ a 0 y también cancela todo el trabajo realizado desde la primera instrucciin BEGIN TRAN. Analice el Siguiente cédigo para ver céma funciona esto: SELECT @@TRANCOUNT . . Debe devover 0. BEGIN TRAN tt SELECT @@TRANCOUNT . . Debe devoler 1. ‘SAVE TRAN puntoalmacenamientot SELECT @@TRANCOUNT . . Sigue establecida a 1. ROLLBACK TRAN puntoalmacenamientot. SELECT @@TRANCOUNT ... Sigue establecida a 1. BEGIN TRAN (2 SELECT @@ TRANCOUNT . . Debedevolver 2. ROLLBACK TRAN SELECT @@TRANCOUNT . . Se rearesa a 0 Instrucciones permitidas y no permitidas ‘Aigunas instrucciones no se permiten como parte de las transacciones explicitas, incluyendo las siguientes: ALTER DATABASE, RESTORE DATABASE DROP DATABASE (CREATE DATABASE RECONFIGURE RESTORE LOG BACKUP LOG UPDATE STATISTICS Olras instrucciones pueden aparecer juntas dentro de una transaccién, aunque esto no cambia ninguna de las regles que aprendié anteriormente. “Programe Nedovalde ioral Programacisn de 8D rt erat Soo Manual del parkdpante SENATI Puntos de almacenamiento 'No hay un limite establecido en cuanto al numero de puntos de almacenamiento dentro de una ttansaccién, Una vez que la transacciin se confirma, no hay manera de deshacerla Tal vez tenga nombres de puntos de almacenamiento duplicades dent de una sole ttansaccién, sin embargo, s6lo la ditima Instancia del nombre del punto de almacenamiento se utliza en realidad, si deshace las acciones hasta ese punto de almacenamiento. Por ejemplo, la siguiente instruccién ROLLBACK TRAN guardatrant se regresa solo hasta el segundo punto de almacenamiento guardatran El primer punto de almacenamiento se ignora una vez que se wuelve a utilizar ol nombre, BEGIN TRAN INSERT UPDATE SAVE TRAN guaardatrant. DELETE INSERT SELECT SAVE TRAN guardatrant INSERT DELETE IF @@ERROR <> 0 ROLLBACK TRAN guardatran. BSE COMMIT TRAN Procedimientos almacenados remotos Las lamadas a los procedimientos almacenados remotos normalmente no se consideran parte de una transaccion, BEGIN TRANSACTION UPDATE tablat SET colt = 5 WHERE colt = DELETE tablat WHERE colt = 5 EXEC servidor?.pubs. .usp_insertareditoral parmt parm2 parm3, ‘COMMIT TRAN Si el procedimionto slmacenado_pubs.usp_insertpubisher del servidor2 emiiera une instruccién ROLLBACK TRAN, esté no afectaria la ransaccién local. No obstante, una opcién de configuracién de servidor__—_lamada REMOTE_PROC_TRANSACTIONS, normaimente establecida a 0 (desactivada), control silos, procedimientos aimacenados remotos inician una tansaccién distibuida. Para permitir ol ‘alo aloes de prcaasiorice elmraradoe rns ones warecrbnen: seo siguiente: EXEC sp_configure "REMOTE_PROC_TRANSACTIONS’, 1 RECONFIGURE WITH OVERRIDE Esto ojemplo afacta 6 todas las ojecuciones de bos procedimientos almacenados remolos en 6! servidor, por bo que debe hablltario con mucho culdado. Programe Nacional e homies Pte Propramactin de 8 Seat Se SENATI Mara tpn Transacciones automaticas ‘Aunque parazca que las transaccones no se ullzan, estén ahi, detrés del escenario. Cualqulor Sjecunin do una Instucnkin do modioacén do detos on SOL Server os una tansaccin impli En 01 siguiente loto, cada instruccién de SQL es una transacctin separada. Por lo tanto, este lote consiste realmente en tres transacciones separadas. Si cualquiera de las instrucciones falla, esto no afecta a las demés. Cada instruccién se completa correctamente o falla por su ‘cuenta, sin importar las otras instrucciones del lot. INSERT tablat VALUES (1,'abade’) UPDATE tablat SET colt = 5 WHERE col DELETE FROM tabal1 WHERE colt = 5 co Las transacclones también pueden proporcionar beneficios en ol rendimionto. Al no escribir las ‘entradas del registro de transacciones al disco sino hasta que se complete la transaccion, SQL ‘Sener puede ofrecer uno o mas eficiente del disco. Esto en consecuencia os benefcioso para ‘agrupar instrucciones. Si agrupa las instrucciones anteriores en la siguiente transacokin, solo ‘2 escriben cinco entradas en e! registo, en lugar de nuave. BEGIN TRAN INSERT tabla VALUES (1,'abode’) UPDATE tablai: SET coll = 5 WHERE colt =1 DELETE FROM tabiat WHERE colt = (COMMIT TRAN ‘A medida que se incremonta of agrupamiento de instrucciones, las transacciones pueden Incrementar dramaticamente la eficiencia de sus instrucciones de modificaciones de datos. Transacciones implicitas Las transacciones implictas se proporcionan para fines de compatibildad con los esténdares ‘ANS! (Instituto Estadounidense de Estandares Nacionales). Al habiltarse las transacciones Implicias, las instrucciones de T-SQL seleccionadas ejecutan autométicamente una instruccién BEGIN TRAN. Debo confimar o deshacor estas instrucciones de manera explicita, ejecutando tuna instrucciin COMMIT 0 -ROLLBACK TRAN Las transacciones implictas se habiltan al nivel de sestin ejecutando la siguiente instruceén: ‘SET IMPLICIT_TRANSACTIONS ON Para ol resto de esa sesién, las siguientes instucciones necesitan confimarse (0 deshacer) explictiamente: ALTER TABLE GRANT REVOKE, CREATE DROP DELETE SELECT INSERT UPDATE ‘TRUNCATE TABLE FETCH OPEN Para desactivar as transacciones implictas ejecute: ‘SET IMPLICIT_TRANSACTIONS OFF Programe Nedoral de nornbica vermin Pt Manval del parkas SENATI For ohne, oe spules oe farence de olan son tne (on ws. de transacciones). Observe que puede verificar este uso por medio de la variable @@trancount. CREATE THRE ta (35 nc ra) Ban Tan INSERT tabial VALUESS (1) SELECT Grant COMME Ta ‘SET IMPLICITE_TRANSACTIONS ON DSERT bat ves @) SELECT erent conver ea Programe Nacional e homies Pte Propramactin de 8 Seat Se SENATI Mara tpn Preguntas de repaso 4. eCémo se cancela una transaccién iniciada con transacciones implicitas? 2 2S verdad que la instruccin COMMIT TRAN escribe en el disco todas las paginas modificadas en memoria? 3. 4Como se llama a la situacién en la que dos transacciones tiene un bloqueo exclusivo en un recurso y cada una de las otras transacciones necesitan bloquear el recurso que la otra transaccion ha bloqueado? 4, 2 Qué tipos de transacciones se conocen? 5. Si deshace una transaccién desde el interior de un desencadenador en la tablat en el cédigo que se muestra a continuacién: 2Se ejecutara la instruccién SELECT * FROM Authors? BEGIN TRAN INSERT tablat Values (3) co SELECT “FROM Authors COMMITRAN 6. En que consisten las transacciones automaticas? Programe Nedoral de nornbica Programaelén de 8D rt erat Soo Merial el parante SENATI Programe Nacional e horniica Pte Propramactin de 8 Seat Se SENATI Mara tpn Capitulo 6 Herramientas de Monitoreo y Rendimiento Objetivos: A finalizar este capitulo, el participante tendré conocimientos sobre: Seleccién y optimizacion de hardware. Parametros de configuracisn de Windows 2000. Contadores de! monitor de rendimiento de Windows 2000. Monitoreo de rendimiento de SQL Server Procedimientos almacenados de sistema Uso de! analizador de SQL Server Asistente para optimizacién de indices Fundamentos y herramientas de monitoreo del rendimiento En este capitulo veremos c6mo confgurar y viglar a SQL Server 2000. En términos de rmonloreo de SQL Server, se tlenen disponibles varias horramientas para vigilar la manera en que se desomperia SQL Server. Estas herramiontas son: e! monitor de rendimionto de Windows, 6! Analizador de SQL Server y ol Asistente para optimizacknn de indices. Soleccién y optimizacién de hardware Vamos a considerar la seleccién apropiada del hardware. A menudo, la gente se pregunta cual 85 el componente mas importante de un sistema SQL Server. Un equipo que funcione ‘correctamenta requiere de componentes que funcionen bien en conjunio. No obstanie, si tuviera que elegir un componente, tendria que sar la memoria. En muy pocas ocasiones SQL ‘Server cuenta con la suficiante memoria RAM (memoria de acceso aleatorio). De todas formas, o ream ‘maser 2) SQL Server Agen: IOs o ‘sysam ‘ro database contest Current Aetity ~sejoay2nn9 12: Se : = = reese : + = Se tee mer eecsiom 8: B = Teletetonee Seemetnriewaticn HSS = 3 7 Laveniana 6 ssid act Programe Nacional de hiomnéics Pte Programactin de BO Treat saver SENATI anual dl prtpanto [La TL cormand batch | Messone —S Cando de dalogo Detalles del proceso Uso del Analizador de SQL Server Con ta herramienta Anazador de SQL Server puede viglar toda la actividad de su servidor SQL Server. Puede capturar y registrar una matiz sorprendenie de suoesos al ullizar el Analizador de SQL Server. Una de las cosas més ties de esta herramienta es la capacidad de ‘capturar los comandas de Transact-SQL que se ejecutan en su server. Puede utlizar esta Informacién como rastreo de audiiria o simplemente como una manera de ver que tipo de trabajo se esti realzando en su equipo. También puede ulilzar una traza capturada como jentrada para el Asistente para optimizaciin de indices de SOL Server. Este asistente le ayuda 2 seleccionar 10s indices apropiados para un conjunto dado de consultas. Es atl cuando se juede simplemente ejecular una traza para un dia de negocios comiin y luego se pasa esa tvaza al Asistente para oplimizacién de indices. Se ejecuta por un instante y luego muestra el Conjunto éptimo de indices para que usted lo utlice. Configurar iniciar una traza EI primer paso para utilizar el Anelizador de SQL Server es configurer una traza. Inicio el ‘Analizador desde el grupo de programas de SQL. He Edt ew Sepey Took Won Hep Saste we San S| hee Programs Nedoral de inbrnbica Programacién de 8D wt erat Soo Marval del parkpante SENATI Para iniciar una traza previamente configurada seleccione Nueva | Traza del mend Archivo. A ‘ontinuacién debe iniclar una sesidn en una instancia de SOL Server. Una vez conactado debe ‘parecer el cuadro de dislogo Propiedades de traza, SQL Server 2000 incliye varias trazas previaments configuradas en forma de Piantilas de traza, De manera predeterminada, ol ‘Analizadar de SQL Server carga la plantila SQLProftlerStandard, | Genel Evens | Usa | Fs | EA iceman = Tiere $Q) Saver fies Use he folwina Hace tenia Teed name qFrfesiensd SCY “Teotate fe nai inpbieNGHL Prien Sal PrhisStonderstal Cal T Sevetofie Sel inacriani 2912) TF tiene ater Spree oatesees SUL Servers dae 1 Savetntsble F Set inaivamn ans ti theasoni F Enable tiace soo tine: fame =]ftenate Fan Concer ud Propledades de in waza Cada plantila define un conjunto astindar de sucesos (conjuntos de informacién que es ‘onvaniente que conozca) y columnas de datos (los bits individuales de informacién acerca de ‘cada suceso). Acepte los valores predeterminados para esta traza y haga clic en el bolon Ejecutar para empezar a registrar una traza. Inicie el Analizador de consultas de SOL Server (observe el icono de la barra de herramientas para el Analizador de consultas) y ejacute la siguiente consulta, Use pubs Select * from authors, ‘Ahora regrese al Analzador y vea las instrucciones de T-SQL y demés informacion que se ‘capturaron. Ademas de que s@ capturaron las consullas que ejeculs (el comando USE seguido del comando SELECT), también se capturaron otros comandos més. Estos comandos s¢ sjecutan cada vez que inicia 6! Analizador de consultas de SQL Server, y configuran el entomo antes de que usted empiece a ejacutar consultas. Aqui se capturan todos los comandos que s6 fejecutar, incluso fos que usted no sepa que se estén ejecutando. ecg Nasal fori wr SENAT Para detener la traza simplemente haga cc en e! botén represontado por un cuadto rojo dentro de la ventana de consulta, La traza se detiene, y ya no se captura mas informackin. ‘Ahora personalica una taza para que cumpla con sus requerimientos. Cierra la traza que ‘estaba analzando y haga clic en el botén Nueva raza que se encuentra en la barra de herramisntas. Después de iniciar sesién en una instancia de SQL Server, debe aparecer 6! ‘cuadro de dislogo que se muestra en la figura, en donde puede empezar a escibir las propiedades de su traza, Primero debe escribir un nombre para fe raza (utlice un nombre mas escriptivo si tiene la intencién de guardar su traza). i | Sere | Eerie | Dale Cohn Fite | [BA te rane ‘Trace SQL Sener: LUsethe olowing race tents Templzenane SOLProtisstndard | “Template Fle nae: fnsicleASOL PioeSuLPiciesandaand (4) FF Seve tole: FsAdmiictacoriedooanertoaMivaza> (4) ‘Set maemum fle she ME} "8, I Eystette okra PServer processes Sal Sewet ace cata Enein [MAODo0 eksd i vacel JF Se menu se in thovsaree) T F Enable taos sco tine im ae | CEST ae La traza dot Anaiizador de SOL. ‘También puede quardar sus trazas on un archivo 0 en una tabla de SQL Server, en lugar de ‘solo mostraria on la intorfaz de usuario. Si selecciona la opcién Guardar en archivo, debe escribir una ubicacién. La ubicacién predetarminads es su carpeta Mis documentos, con 6! nombre de archi nombretraza.trc. Por lo tanto el nombre de archivo seria Mi traza.tre, ‘También puode guardar su traza en una tabla de SQL Server, Si activa la opokin Guardar en tabla debe escribir el nombre del servidor, el nombre de la base de datos, el nombre del propictario y de la tabla. Seleccione una base de dalos en su servidor SQL Server y acepte ol ‘nombre de tabla predeterminado [Mi raza], Observe que la labia tiene ¢! mismo nombre que su ‘taza, por lo que es convenianle crear el nombre de su traza siguiendo las reglas para ‘dentificadores validos en SQL Server. SSihace clic en la ficha Sucesos, puede seleccionar la informacién que desea capturar en su ttaza. La opcién predeterminada os capturar cuando se conectan los usuarios, cuando se desconectan y que usuarios estén conectados al iniiar la traza. También puede ver cualquier ‘Propane Neconaldelnormiice Programacién de 8D wt erat Soo Marval del parkpante SENATI ‘suceso RPC (llamada a procedimionto remoto) 0 SQL Batch cuando éste so complete. Los ‘Sucesos SQL Baich son las lamadas en SQL Server que no son Sucesos RPC. Germ EvIni | Daa Cotame| Fit | ‘site overt clases: ‘Sebsted event classes @ iF Secu Audit ‘g Datahase ‘ua Loon 12) Ewore and Waininge ‘ud Logeut 7 Locks Sessions 15 Objects EviinaConnection 1 Pevfomance Stored Procedures "© Seane RPC. Cemoleted 1) Security Audit = T80L 1 Sewer SOLBstchComplind Stored Procedures = Transactions Grsorr Colection of sons produned Mon cursors xo ciated usd and deleted La ficha Sucseos de una nuova taza Observe que en el kado izquierdo del cuadtro do didlogo de la taza 60 oncuentra un nimero considerable de eventos adkionales que pueden capturarse. Explorar estos eventos leva tem Po, pere cuando los domine descubrirs que puede hacer casi cuakuier cosa con el Analizador, Haga clic en la cha Columnas de datos para ver qué elementos se muestran en su informe de traza. De manera predeterminada se capturan elementos tales como cuél usuario estaba ¢jecutando una consuta, qué aplcacién esiabe ullizando qué nombre de inicio do sesién de SQL Server estaba uilizando, informaciin diversa sobre ol rondimieno y, desdo luego, ol texto el comando que ejacuid. También puede agrupar elementos de pos similares. Por ajemplo, si desea agrupar evenios por nombre de usuario de SQL Server puede resatiar ol elemento Nombre de usuario SQL. y luago hacer cle en ol bot6n Subir pasta qua aparezca Nombre de Lsuario SQL debaio del elemento Grupos. Entonoes su informe agrupa la raza por nombre de inicio de sestin del usuario de SQL Server (Nombre de usuario SQL) 0 on lugar de mostrar {evenios en forma secuencial. Puade utlizar os egrupamiantos para que sus informes tengan ‘més legibided en pantalla, Frama Nacional de foi Pte Programaciin de BD SENATI Manual partpan race Properties | Genta | Evers DateCokawe | itr | Stleetthe dol columns you werk capture, Unselectes cata Elect dats ColunnPairsore Dstameelo atanneeNone Latlseniare. rstine Ener EvertubCles Frellsre Hanae ontlare Ire InkageD te EvertClase Type cf evertlarscapited bet ue sun 1a fiona columnas de datos de une nueva taza. La altima ficha, quo no por ser la ditima deja de ser importante, se lama Fitros, en donde puede fitrar su traza para recoplar s6lo la informacién que realmente desee. Observe que 6! ‘Analizador excluye sus comandos de T-SQL de manera predeterminada. Para ver si la herramienta Analizador lama a un procedimiento almacenado extendido al Iniciar qulle esta, restriccin seleccionando y resaliando las palabras SQL Profle y luego oprimiendo "Supr’. Al climinar estas palabras se quita la restriccién, para que no se muestte el trabajo que realiza el mismo Analizador. Para cada restriocién que desee colocar en su traza, resalle la opciin en la ventana Criterios, para trazar sucesos; luego escriba el elemento que desea inclu 0 excluir en el cuadio de texto ‘apropiado. Para cada critario de suceso aparece ol cuadro de texto apropiado. Haga clic on Ejecutar y se iniclaré aulomaticamente la taza. Observe que el analizador de SQL ‘Sener estd lamando al procedimiento amacenado sp_trace_creale, Es mucho mas sencillo utiizar ia interfaz gréfica que descubrir cuales procedimientos almacenados se deben lamar pero, usted mismo si o desea, puede establocer llamades a este procedimiento (y a todos los ‘demas que necesite). Programs Nedoral de inbrnbica yoni 00 rereatacee ~~ Manual del perpante SENATI I Germ | Evers | Dale Cokemns Fils | i Tics even cis ‘Specy he crn ler determing whieh evenictocaptie ‘AppicationName Like fi | tb cone S caaricaain a Barba Bosna F Svolude seem IDs epicatorNene [ar fe click appieion thal costed he coremetio io SOL Sava Thir coke Ie populled wih evan poveedtpom aobloaicr ver han the depiyod nae ofthe piogian, La toma Ftros de una neva Tears ‘Traza capturada Programe Nacional de hiomnéics wr SENAT ‘De nuevo, esta traza simplemente captura todas las instrucciones de T-SQL y sucesos RPC que ocurten en su seridor SQL Server. Si no la detione, seguié ejecutandase Indefinidamente, Por ahora detenga la traza y compruebe que se haya creado el archivo de traza haciondo ic en Archivo | Abrir | Archivo de traza. Debe aparecer Mi traza.trc. Al abrir fesla traza, debe verse que evidentemente, todos ios comendos que se eslaban viendo fueron capturados y registrados en el archivo de traza. Configurar un registro de auditoria Como puede ver, hemos comenzado a establecer el principio de un registro de audiiorla, ‘Todo lo que debe hacer es seleccionar todos los eucesos de Audilora de seguridad, agregar todas las columnas de datos y luego dejar la traza ejacutandose siempre en su servidor. Incluso SQL Server 2000 puede renovar ol archivo cuando ésie llegue a tener cierto tamario para que nunca tenga que desactivar la auditoria para realizar una copia de seguridad de cada traza de auditor. Cuando el archivo de traza de auditoria anterior lega al tamano que Usted haya configurado, se abre un nuevo archivo, se cierra el archivo anterior y ast puede realizar la copia de seguridad. ‘También podtia considerar la configuracén de una traza del Analizador para que se inicie ‘autométicamente al iniclar SQL Server. Puede hacerlo de dos manoras: pueda envolver todas las lmadas para configurar un traza dentro de un procedimiento almacenado y luego marcar ese procedimiento aimacenado como de inicio, Este método es en realidad bastante simple: configure la taza y luego ejectitela. Luego, en el mend Archivo seleccione incluir taza en secuencia de comandos y el Analizador de SQL Server genera todas las llamadas para crear la traza. Ahora todo Io que tiene que hacer ¢s envolver un procedimianto ‘almacenado alrededor de estas lamadas y marcar ese procedimianto almacenado para que Inkcie automaticamente con SQL Server. ‘También puede configurar el Modo de auditoria C2 mediante el use de sp_configure. Una vez que reinicie SAL Server, siempre se ejecutard una traza de audllora completa. En los bros en pantalla de SQL Server, hay informacién disponible en relacién con el Modo de ausditoria C2. Uso de una traza para supervisar el rondimionto La manera més sencila de utlizar el Analizador para encontrar sus problemas de rendimiento es seleccionar una plantila de traza distita: SQLProfierTuning es una buena ‘opcién para empezar. Luego haga clic en la ficha Fitros para restringir bs elementos @ ‘buscar. Por ejemplo podria fitrar s6lo la base de dates en la que est interesado y restringlt los resultados a las consultas que se ejecuten mas de clerta cantidad de tiempo (como 1 segundo). Tome en cuenta que el valor es en millsegundos, por lo que 1000 es en realidad tuna consuita de 1 segundo. Se muestra un fitro que restringe los resultados del analizador a ‘consultas que se ejecuten por al menos 1 segundo en la base de datos pubs. ‘Ahora ejecute la traza y vea obmo se apilan las consullas en su entomo que califican con ‘base en los ftros establecdos. No se olvide de establacer la ubicacién del archivo on el que debs guardarse la traza. Programe Nedoral de nornbica opeeaiindt ~~ Maral del prkipants SENATI rE Gaver | Evens | Data Chaar Fite | EE Tjeceeven clsia —oOoOo Te Ehasgnte eee a d ‘Speely ihe eth er dates wich events cape (e-Lase thao ea @ Enctime sm Enc 15 Flame PF Sxclude ster IDe Dusaon ry liane) taken oy the event Fitrado por cuestiones derendimionto El Asistente para optimizacién de indices El tema anterior sobre las trazas nos lleva a una descripciin del Asistente para optimizacion de Indices. Este asistonto rovisa un archivo de traza guerdado y luego recomionda cambios en sus Indices on ol servidor para mejorar el rendimionto do las consultas capturadas durante la traza. La siguiente es la forma de utitzar e|asistonto: 1. Seleccione Asistente para optimizacién de indices del mend Herramientas on el Anali- zador de SQL Server. Lea la pantalla de presentacién y luego haga cic en Siguiente Para ver el cuadro de dislogo Seleccionar servidor y base de datos. una vez que inicie ‘sesion en SOL Server. Programe Naconal e homies Pte Programseién de 80 rsa Sorver SENATI Manual partpan Cr Select Server and Dalabare Belo the vicar can enchon you deta, woumusteeect he server ere rd - MAQ-D20 x ‘Blabase 1 te, “saver = :~C~«S above a ~ F Keepal esisting ndexes. ere bien arrestee acon et Sera RO IER neit tor or corar Ac Foes om Cee FF Addvdese views ing ee ‘5 merethernugh ana ees moreturing tire bur sults n bese reconmendatch of resves © esi Mestum © Thowush concn | ste Selocolone Servidor y base de datos on ol Asetente para optimizackin de Indices 2. Seleccione un servidor distinto si cambia de opinion en jos iltimos 5 segundos. Luego seleccione una base de datos. El Asistente para optimizacion de indices recomienda indices, sélo para una base de datos a la vez. La opcién predeterminada es mantener todos los indices existentes y realizar un andiisis menos exhaustvo. Es conveniente selecclonar la opcion para realizar un andlsis exhaustio, ya que sera muy and Setinec\Adurntocer Ms dscrrarionM © SOL Serve ace Jae ee © a0 Gey nae 7 ich Asanees Options te sen or charge the ceaut paemter: “+ Masmean sumo o cokes rsa ++ Masur apace lor the eccrunended nde 1+ Mauer curbs! o quetoe tobe sampled om the workleed ‘Advanced Options ncn | ate ‘Espoccar la carga do trabajo 4. Seleccione un archivo de traza existente (por ejemplo Mi traza.ttc). 0 seleccione la tabla de SQL Server con su informacion de la traza guatdada. Haga clic en el botén ‘Opciones avanzadas para ver el cuacro de diélogo 5. Haga clic en Acoptar para aceptar cualquier modificacién que haya realizado luego haga clic en Siguiente para ver el cuadro de didlogo Seleccionar las tables para optimizar. De manera predeterminada, el asistonte no trata de optimizar ninguna tabla, ‘asi que Seleccione todas las tablas de su base de datos. Después haga cle en ‘Siguiente. ‘A continuacién, el Asistente para optimizacin de indices analiza la carga de trabajo ‘que usted le ha asignado. Este proceso podria tardar un poco, dependiendo del tamatio de su archivo de traza. Al completarse. los indices recomendamos se muestren ‘en el cuadro de diaiogo Recomendaciones de indices 6. Como la taza Mi traza contenia s6lo dos consultas simples, el Asistonte para ‘optimizacién de indices no recomendé ningin cambio. Puede ver la recomendacién haciendo clic en le botén Analisis y viendo el informe Configuracién actual, observe que ‘5 déntico al informe de Configuracion recomendada. 7. Haga clic en Siguiente otra vez, y si se rocomendaron algunos cambios, puede optar Por oecutar los cambios recomendados por ol asistente programando un trabajo en el Agente SQL Server, o guardando los cambios como una secuencia de comandos de T- ‘SQL y revisarios 0 ejecutaros cuando usted quiera 8. Como el asistente no recomend ningtin cambio en este caso, no verd el cuadro de didlogo de finalizacién. En caso de que legue a ver un cuadro de didlogo diferente, ‘quier® decir que se recomisndan algunos cambios. Elja aplcarlos inmediatamente, haga clic en siguiente y luego haga cle en Finalzar. El equipo de SQL Server ha convertio un trabajo horrblemente complejo (seleccionar los {indices necesaris en un servidor) en cuantos cls del rain medianis el uso del asistente. igi Nasal de CS Pte Propramactin de 8 Seat Se SENATI Mara tpn Preguntas de repaso Si deseo una répida instanténea de la actividad de SQL Server gEn donde debo buscar? 2. {Que tipo de tarjeta de red debo instalar en mi servidor? 3. @Que tipo de RAID es mas comveniente de utiizar con los registros de ‘ransacciones? Que herramienta debo utilizar para seleccionar los indices adecuados para mi base de datos? zQue es una traza? 6. EComo puede configurar un registro de auditoria? ‘Programs Neconaldeinemiice Programaelén de 8D rt erat Soo Merial el parante SENATI Programe Nacional e horniica Capitulo 7 Analysis Services A finalizar este capitulo, el participante tendré conocimientos sobre: 1 Almacenamiento de datos. © Puestos de datos. © Componentes de Analisis Services. Introduccién Esta caracteristica conocida como Servicios OLAP en SQL Server 7.0 fe permite dar soporte al aimacenamiento de datos. Este tema también introduce la mineria de datos y bos ‘omponentes Meta Data Services de Microsoft (conocidos como Microsoft Repository en SQL Server 7.0). Comprensién del almacenamiento de datos ‘Aimacenamiento de datos es el arte de reunir datos de tal forma que se pueda analizar y fextraer informacién de lo que se ve como datos puramente operacionales. Los dalos operacionals son los datos que utlizan sus sistemas de produccién para encargarse de sus negocios. 'No hace mucho tiempo los dalos recopilados en sistemas operacionaies se ullizaban para las, necesidades ciaras, se archivaban segin lo requerido por las restricciones legales 0 de nego- ios, y luego se descartaban. Luego, algunas empresas inteligentes empezaron a preguntarse <¢Por qué estamos descartando estos datos? Los departamentos de ventas y mercadotecnia hhan estado proyectando negocios futuros durante mucho tiempo. No obstante, raras. veces ‘uentan con los datos suficientes como para realizar las decisiones conrectas. Después de todo, cuando sus sistemas de produccién tienen un formato adecuado y estén transformados ‘correctamente, contlenen montafias de informacién dll para fines de negocios, tales como las proyecciones. En una compania de pinturas. Este negocio ya conlaba con informes de ventas, pero no festaban cisponibles facimente. Teniamos que esperar que saleran los informes, generar ‘muchas impresiones y luego navegar por todas esas hojas para encontrar informacion. Este difcimente podia ser un modelo para la toma répida de dacisiones de negocios. Luego se decidis crear un almacén de datos. Tomamos datos de varios sistemas de produc- cién, recopilamos la cantidad requerida de datos historicos y creamos un almacén de datos. Este almacén consistia en las ventas, dotaliadas hasta e! nivel de producto indWvidual, de cada articulo en cada tienda en la que estaba disponible en todo el mundo. Los datos se agregaban fn interesantes calegorias de negocios y se correlacionaban en base al iampo. Entonces podiamos ulizar el almacén de datos para preguntar cosas tales como: ZDe qué ‘manera se comparan las ventas entre la region X y la regién Y? Le vende mejor en tiendas de la marca X o la marca Y? Podemos correlacionar vantas con otros factores, como los tipos de mostradores 0 con los producios similares que se venden en el mismo mostrador. {Cémo se ‘comparan las ventas de esta semana por producto y por categoria con las ventas de la misma ‘Programs Neconaldelnomiice Programacisn de 8D rt erat Soo Merial el parante SENATI ‘semana pero ol aio pasado? Tal vez lo que os mas importante, podiamos hacer todas estas ‘preguntas en Linea. No tenlamos que esperar que alguien escribiera un informe - podiamos hacerlo nosotros mismos pare obtener Una respuesta cael inmediatamants. Eso @s lo emocionante acerca del almacenamiento de datos, la capacidad de recopllar infor- ‘macion que no podia haber encontrado antes o informacion por la que tuvo que esperar a que ‘alguien escrbiera un programa por usted. No sélo eso, sino que también puede empezar a hacer preguntas que nadie haya hecho antes. La base de datos del almacén es lo sufcientemente flexible como para permitife pensar en nuevas preguntas y contestarias en poco tiempo. Los almacenes de datos por lo general se basan en ol tiempo y estén compussios de varios ‘componentes: tablas de hechos, dimensiones y niveles de agregedo. Por lo general extraan datos en conjunio de varios sistemas distintos, con base en formatos de datos diferentes, y los uniican en algo dtl, Los almacenes de datos pueden ser bastante grandes, EI sistema con 6! {que se trabajo tenia alrededor de 1 GB de informacion basica, pero crecié hasta 40 GB al terminar la agregacion y la creactén del almacén de datos. Claro que la creacién de un almacén de datos nunca se completa, ya que constantemente el negocio 0 la organizacién generan nuevos datos, Para los estindares actuales. 40 GB es un almacén de datos bastante pequefio. Algunos distribuidores publican que tienen almacenes de datos de varios terabyles. Se numora que ‘algunas companias tienen slmacones de dalos mucho més grandes, pero slgunas veces la sola existencia de estos sistemas se considera come informacion privada de la compatiia, ya que ol valor de negocios de un almacin de datos puede ser tremondo lo que genera una ‘enorme venisja competiiva, Tablas de hechos La mayoria de los disefios de las bases de dates de los almacenes de datos se centran en las tablas de hechos. Una tabla de hechos es el origen central de la informacién con la que se crea ‘el almacén de datos. La manera mas sencita de explicar una tabla de hechos es por medio de ‘un ejemplo. Vamos a pretender que usted es ese fabricante de Pinturas. Su tabla de hechos probablemente ‘ontendria informaciin tal como el producto que vendid, a quien se lo vendié prec'samente, ‘ax8nio cobré, cual fue el costo de fabricactin de este producto, por cuanto se vendié el detalle, y la fecha y'hora en la que lo envid. Entonces podria utizar esta tabla de hechos para ‘ontestar preguntas, come cuanios productos vendié este mes y cuanto dinero obtuvo en los cenvios de hoy. Dimensiones Une sola tabla de hechos aisleda no tiene mucha utlidad. Lo dtl es combinar esa tabla de hhechos con tablas de soporte dimensionales. Una dimension es una descomposicion de algo ‘conocido como el tiempo. Su dimension de tempo podia incluir siglo década, aio, mes, semana, dia y hora. Podria tener una dimension de categoria de productos que agrupe informacion sobre cada tipo de producto que puede vender y como puede agruparios en forma légica. También podria mantener informactsn geogréfica, como continents. pals, region, estado y cludad. Luego puede tomar cada dimensién y combinarla con la tabla de hechos para ‘oncontrar la respuesta 2 progunias tales como: "Dime por cada regién, por categoria de productos, por semana, {Cules fueron las ventas del producto X este afio en comparacién con ‘el ano anterior? También hay que comparar es0 con las ventas en otras regiones”. Agregacion Evidentemente, e! tener una tabla de hechos extensa con varias tablas de dimensiones puede responder a sus preguntas acerca del almacenamiento de datos. No obstanle recibir las respuestas puede llevar cierto tempo si se envian decanas o cientos de milones de productos Individuales: Por lo tanlo, probablemonte haya necesidad de egregar dalos, calcular sO igi Nasal de CS wr SENAT proviamente les respuesias a las preguntas que se piensa van a formularse, 0 calcular ‘reviamente fs datos por dimensién hasta cierto nivel Por ejemplo tal vez se anticipe con frecuencia a las preguntas relacionadas con las ventas de productos por semana, Asi que para ahorrar tiempo cuando las personas ejecutan consulias podria celcular las ventas por semana por producto, o por calegoria de producto. Luego cuan- do alguien haga una pregunta que ya haya sido prevista por su agregacion, puede devolver los resultados con mucha més rapidez, para as{ tener contentos a ls clientes, Como podria imaginar, lo diel acerca de la agregactin es saber cuando detenerse y como saber si se liane o no «! conjunto correcto de agregados. La mejor manera de hacerlo 2s capt- rar ls tipos de preguntas que hacen los usuarios y revisar sus disefios de agregados. Tambisn puede utlzar algunas herramientas de prodiceién para modelar, como las que se inckyen an Analysis Services de SQL Server 2000, Comprensién de los puestos de datos Los puestos de datos se estén voliendo cada vez mas populares. Un puesto de datos es implementa un almacén de datos en miniatura. Imagine que acaba major almacén de datos del mundo para su compania. .Cudnios usuatios utiizaron los datos en forma simuténea? {Cuéntos datos habré en ese almacén de datos? Podria ser demasiada informac#én en un solo lgar para algunos clientes. Por ende z.qué podria hacer con respecio a este problema? La respuesta: croar un puesto de datos. Un puesta de datos es simplemente une secctin de su ‘almacén do dalos porsonalizada pare una comunidad especiica de clontos de esos datos. Por ‘ample on el caso de la compariia de Pinturas tal va2 ol represoniante de vontas de una exiensa cadena nacional este interesado s6lo en los datos de su clente espacio, y no desee l resto de fa dimenstin del aimacén de datos. Podria crear un puesto do datos pare dirirse a las noveskiades de este clente y extras’ s6lo los datos requeridos del almacén de datos. Dada la ata disponibidad do herramiontas tales como SQL Server 2000, el proceso de crear y mentener pussios de dalos se esté volando més fécl cada momento, Creacién de un almacén de datos Hay que realizar unos cuantos pasos para crear su almacén de datos. Lo mas probable es que fen cada paso se involucre una herramianta proporcinada con SQL Server 2000. Su primer ‘paso os diseriar ol almacén de datos identificar en donde se van a oblener los datos. Este paso porlo general requiere de un esfuerzo en equipo y podria tomar bastante tempo. Paso 1: Creacién del érea para guardar los datos Una vez que descubra en donde obtener los datos, necesite crear un érea temporal para {Quardarlos. Puede ser una copia separada de SQL Seiver, pero por lo general simplemente es luna base de datos aislada. Es muy probabie que los dalos no vayan a estar preparedos para simplomente cargarlos en el almaosn de datos. Por consecuencia, es conveniente guardarlos ‘aqui hasta que este listo para tansformarios en los formalos correctos y para fitrar s6lo la informacion que necesite, Paso 2: Obtencién de los datos de un sistema OLTP 0 heredado | segundo paso implica el obtener la cooperaciin de otros administradores y desarroladores {de su compatiia, Neoasita encontrar el origen autoriario de fos datos para cada pieza de informacion que desee relener en su almacén de datos. Luego necesita hacer arregios para ‘alimeniar informacion en forma regular desde esos sistemas hacia su érea de almacenaminto, ‘Aqui puede utiizarse la duplicaciin de SQL Server junto con las consultas distibuidas heterogéneas para conectatse a estos sistemas y obtaner los datos. Paso 3: Transformacién de los datos, en caso de ser necesario Cuando tenga toda la informaciin, probablemente necesita transformar jos datos para que sean de utiidad, Es probable que no todos fos dalos se encueniren an el formato exacto que usted necesite, y también es probable que, necesile combinar o separar columnas para darles cel formato necesario para su almacén de datos ‘Programs Neconaldelnoaiice Programacisn de 8D rt erat Soo Merial el parante SENATI Un ejemplo cldsico os una columna de nombre. Si normaliza su base de datos, puede tener ol ‘pelle patemo, apelido matamo, nombra, titulo y sutfo. Pero suponga que su almacén de datos solo necesite un simple campo de nombre. Puede transformar fos datos, combinando las piezas de fos nombres en un slo campo para su almacén de datos, Los servicios DTS (Servicios de transformacion de datos) se utilzan cominmente en este paso para transformar sus datos en el formato apropiado. DTS puede realizar bisquedas ‘omplicades, conversiones y combinar o separar informacion, segun sea necesario. Como DTS utiiza OLE DB para conectarse con un origen de datos, este paso y el paso 2 pueden comb arse cominmente, Paso 4: Carga de los datos transformados en su almacén de datos ‘Una vez que tenga los datos en el formato apropiado, puede cargattos en so almacén de datos. ‘Aqui se pueden aprovachar otra vez los servicios DTS o utilzar las herramientas BULK INSERT y BCP de SQL Server pare cargar sus datos. Cada proceso se crea con la expectaliva de que simplemente se van a agregar datbs al almacén de datos existent. Paso 5: Creacién y actualizacién de cubos OLAP en Analysis Services Una vez que tenga las tablas de hechos basicos, puede realizar la agregacién y prepararse para contestar todas estas inleresantes preguntas de negocios. Probablemente deba hacerlo ‘mediante cubos OLAP y Microsoft Anaiysis Services. Al hacerlo de esla manera, pusde obtener las respuestas a las preguntas con mucha rapidez, inclusive cuando se ejacuten consullas que ‘ontengan conjuntos muy extensos de informacién en donde se combinen une o més tablas de hhechos con muchas tablas de dimensiones. Comprensi6n de los componentes de Analysis Services ‘Analysis Services es parte de los fundamentos del almacenamiento de datos disponible con ‘SQL Server 2000. Coma hemos visto se necesta algo mas que los componentes basicos de SQL Server 2000 para crear un almacén de datos. También se necesita ayuda por parte de los ‘componentes provisios por Analysis Services. Analysis Services esia formado por tres ‘componentes: OLAP, mineria de dalos y Meta Data Services. ‘OLAP CLAP significa Procesamiento analitico on linea, y viene siando la habildad de aprender algo significative de_sus datos sin tener que utlizar un sistema de procesamisnto por tes esconectado. SQL Server 2000 tiene soporte completo para OLAP y el almacenamiento de datos con la disponibiidad de Analysis Services. Las caracteristicas OLAP de SQL Server 2000 le permiten ver datos en algo més que tablas relaconales. Puede combinar datos en formas nuevas @ interesantes y verlos de manera "multidimensional". Puede optar por guardar los dalos dentro de tablas tredicionales de SQL. ‘Server (esto se conoce como ROLAP que significa OLAP relacional), en un formade propiedad de Microsoft conocido como MOLAP (OLAP Multidimensional) o HOLAP (OLAP Hibrido, en donde cierlos datos se guardan en SQL Server y los demas en cubos MOLAP).. Un cubo es simplemente un conjunto de datos quardados de tal forma que se perma un ~anélsis rapido y sencilo de los datos. Los datos que se guardan en cubos analizan con base fn las dimensiones. Una dimensién es por lo general algo muy intutivo, como ol tiempo o una regién. Por ejemplo, podria tenor ventas por afo, trimestre, mes, semana, dia @ inclusive hora o ‘minuto, También podria divir las ventas por region, por ejemplo por pais, estado y Cluded y tal vez por cddigo postal dentro de Ciudad. ‘Anora coloque sus datos de ventas en un cubo con las dimensiones de tiempo y ragion, y jpodré empezar a preguntar cosas como "zFueron las ventas de helado mas alias en el sur de Estados Unidos durante el mes de Junio?" Eso es interesante, pero entonces podria profun- dizar mas en sus datos y hacer preguntas detalladas, correlacionando informacion adicional tal ‘como el cima de cada region en ese momento. Como podria imaginar, el agregar mas dimensiones pueda permite hacer preguntas muy difcles y obtener respuestas casi instanténeas. Puede guardar datos en cast cualquier nlvel de etale (dependiendo del espacio en disco con el que cuenta) para poder resolver preguntas tan extensas como les ventas durante los Gitimos cinco alos, hasta las ventas por cada Programe Nacional e homies wr SENAT departamento en cada tienda de cada regién, para cada producto. Todo esto en un solo cubo OLAP y, tal vez fo que 6s mas importante con tempos de respuesta extramadamenta répidos \dabido a que las respuestas ya se encuentran en ol cubo, Servicios OLAP tiene su propio languaje de consulta MDX (Expresiones Muttidimensionales). Si utiiza un cubo HOLAP o MOLAP en vez de Transact-SQL para manipular datos, entonces esta utilzando el lenguaje MDX. Este lenguaje tiene soporte completo en OLE DB y ADO. Mineria de datos Analysis Sorvcos Incluye capacdlades de minerte de datos. La minoria de datos le permite ullizar ubos OLAP oxistentes para buscar relciones en sus datos que puedan ser interasan- tos. Por ejpmpl, si realz6 une encuesto con varias preguntas, podrfa crear un cubo OLAP de los resultados de la encuesta y luego conlestar preguntas acerca de los dalos, como “Si ‘algun contast6 que si en ia pregunta 2,“zqué tan probable es que esa persona responda que sia la progunia 5?" ‘Suena aburrido, pero imagine si eso signicara que sile persona loge a una tenda a comprar Pafiales y ©s un hombte de menos de 35 aos, probablementa compre también cerveza. Usted ‘omo vendedor emprendedor podria entonces colocar la cerveza enive bs pafials y la caja, registradora, como una sugerenca algo menos que sulll ¥ supeniendo que sus datos fueran earrecios, probablemente se incremenerian les venlas de a cerveza. Cro elemplo: Suponga que ha estado enviando correns @ su lista de clontes. Cada plaza de correo iene cierto casio, por 1 que sera mas conveniente enviar correo solo @ ls cients que tengan mas probabliades de eprovechar sus servicios. Con la mineria de dato, usted puede analizar a quien ha enviado coreo previamenle y si se obtuvo 0 no una respuesta. También puede inch informacion socioecondmica acerca de sus clentes para determinar quien tiene ‘més probabildades de responder a eus correos. De esta manera puede reducir la cantidad de correo enviado y posiblemente incrementar las respuestas de los clentes a los que desea enviar correo. ‘Ambos ejemplos muestran cémo la recoleectin de datos y el andisis posterior (mineria de sus deios) pueden producr mayores beneficios y la habiided de proporcionar un mejor servicio al hens. El proporcionar este tipo de datos a la compatiia puede contibuir drectamenta a la linea fnanciera final (yjustifear ese aumento en el salaro que ha estado esperando). ‘A Igual que con OLAP, la mineria de datos también cuenta con interfaces API, como DSO (Qbjtes d Ayuta pare ia Tom de Decstones), un modelo de ojos pore OLAPy a minera Jato. Meta Data Services Meta Data Services es un sistoma orientado a objetos para guardar metadalos o informacion ‘eoerea de los datos, Para allo utiiza un motor de Mela Dala incluide en SQL Server 2000, herramientas para ver metadatos y un SDK (Kit de Desarrollo de Software) para escribir aplicactonas que utlicen Meta Data Services. Los metadatos pueden mejorar considerablemente el valor de un almacén de datos. Pueden responder preguntas acerca de sus datos, tales como ‘Cua 68 el origen de esta fla de datos? © En donde ocurté a altima modiicacion y quian la hizo? ‘© ¢Se transfomné mediante DTS a parti del sistema original? De ser asi, .cudl era la aparioncia del paquete DTS? Claro que éstas son sblo preguntas basadas en les caracteristcas integradas de SQL Server £2000. Si utiiza 61 SDK puede crear sus aplicaciones de forma que soporten ¢| almacenamiento yeluse de los metadatos. Meta Data Services extrae la informacién hacia un modelo orientado a objelos. Una vez defin- dos los modelos, la informacién encaja en forma muy natural (si piensa que la informaciin ‘Proprans Neconaldelnomiice Progremackin de 8D wt Tr sat Saver Maral del prkipants SENATI otientada a objotos encaja en forma natural). Los models bésicos se basan en un modelo fslandar de la industria conocido como OIM (Modelo Abierto de Informacion), el cual ests definido por un grupo conocido como MDC (Meta Data Coalition), MOC es un grupo de distribuidores de software (siendo Microsoft uno de los miembros) que se han unido para ofrecer esténdares @ infraestructura para dar soporte a los metadatos. Instalaci6n de Analysis Services La instalacién de Analysis Services es un proceso bastante simple. Inserte el CD-ROM de SQL ‘Server, seleccione la opcin Componentes de SQL Server 2000 y luego seleccione Instalar Analysis Services Después de hacer cic on esta opciin debe aparecer la pantalla Programa de instalacién de Microsoft SQL Server 2000 Analysis Services, como se muestra Haga cfc en Siguiente y lea el contenido del contrato de licencia. Haga clic en Si después de leet. , BF Install Components M Eee 2000 Enterprise Edition (@ reste er mae tage was cae ee ae ts Programe Naconal e homies ‘welcome othe Mierosok SOL Server 2000 nal |i issterc reccmmerdettny you exit a Windons prosiams belo urrng ine Soup pogim. Dick Cancel to guk Setup ad thon ess any prorans you Fave urring. Cie Ne toconkrus wihite Sele pram WARNING: The prozar is proectedby copnicht ay and Flematanel ose LUpsutheees production cr cetibuton of thi Frog, et 2 pasan cli, ap rsukin severe ci and ena penalies, nd ‘el be prosecuted othe marnum ever! peceble ure I ‘Programa de instalaciin de Analysis Services ‘A continuacién debe aparecer el cuadro de dislogo Seleccionar Componentes. De manera predeterminada se instalan todos los componentes de Analysis Services por lo que no necesita cambiar nada en este cuadro de dislogo (a menos que desee cambler la ubleacin predeterminada de la instalacién). Select the cenponenteyou nertto real dea he coroners yu do neta teil Components ‘Brel Nanoaer IDecrion Suooa Uc! ‘Sandie appleatione Rooks Grine ee Folder CA. AMiosct dis Senlces Brow Space Requred eee & ae Space Avalebe smeszsa, —_DshSpece.. | Beck | Ned ‘Seleccionar componentes de Analysis Services Programs Nedoral de inbrnbica ‘Programacién de 8D wt ‘on SOL Sarver Manual del parkiparte SENATI Haga clic en Siguionte para avanzar a cuadro de didlogo. Aqui puede soleccionar la ubieacin predeterminada en la que se van a guardar sus cubos OLAP a medida que se vayan creando, ‘asi como también la ubleaciin de os cubos de ejemplo que se incluyen con Analysis Services, ‘Cambie la ubicacién en caso de ser necesatio, y haga clic an Siguiente, mera SSeup wi este Dalle intheoleang cestrtin “Teraeai thelr in his ection ick Heat Towseie thelr in ifeert eatin, ok Base em Fo: A. Siferonolt rai Servces\Dans Biewse Selocotén a carpets de datos Por dtimo, el programa de instalaciin Je preguntara en cual grupo de programas del meno Inicio dessa instalar los herramienias. De manera predeterminada, el grupo de programas ‘Analysis Services se coloca en el grupo de programas Microsoft SOL Server. Acepte la opcion predeterminada, haga clic on Siguianta y empezara la inslalacién de Analysis Services. Como puede ver, la instalactin de Analysis Services es un proceso bastante simple. Ahora vamos ainiciar las aplicaciones de ejemplo para explorar un poco el producto. Programe Nacional de hiomnéics Pte Programsciin de 80 reat Sie SENATI Marl él prtspara ‘Acceso a la aplicacién de ejemplo para Analysis Services Desde ¢! meni Inicio, seleccione Programas | Microsoft SQL Server | Analysis Services | ‘Analysis Manager para iniciar lo que viene siendo el equivalente del Administrador comparativo de SQL Server para Analysis Services. Expanda la carpeta Analysis Services luego haga clic fen el signo de suma del nombre de su equipo. A continuaciin debe aparecer una ventana, la ‘ual muestra que Analysis Services se est ejeculando en su equipo y que esta instalado un ‘cabo OLAP llamado FoodMart 2000. [3h Ses were | _ | won ye ios Je + |e D\e ] all 20-020 Foot 2000 Gh ows sosces 2G Gites QD wraps mangoee Tutorial 3 Gh onbuaraee gy Analysis Services on the Web eg Microsott SQL Server on the Web Lo mejor que puede hacer en este momento es probar la aplicaciin de ejemplo, La manera mas sencila de proceder os seleccionar el vinculo Conceptos y tutorial de Analysis Manager que se encuentra en el panel derecho de Analysis Manager. Al seleccionar este vinculo ‘aparece el tutorial. En vez de avanzar por el tutorial, mejor para usted es simplemente probarto. Haga cc on Introduccién répida y luego veya siguiondo cada paso a medida que se presente. El tutorial dura unas cuantas horas, porlo cual tecomendamos ver una seccion a la vez. ‘Como puede ver, también se ha intagrado un tutorial sobre mineria de datos. Seria conveniente obtener una buena compronsién acerca de los cubos OLAP y de Analysis Services en general ‘antes de profundizar en la mineria de datos. Programs Nedoral de inbrnbica yoni 00 rereatacee ~~ Manual del perpante SENATI [arte Bot wor Enras ternertas Ah [eee 9 ODA) Qrimew yfoator fier! Gh Bi -a \s Microsoft SQL Server 2000 — Analysis Services This tutorial wl guide you n using 2 mulidimansianal modelta analyze your sinacs data You ge trough the tural, yull parform allthe eberatlons N hecrstary for éasvng, arocatsing several cies ard analysing Sata wa ‘nai hamagon In se scvancad seecone, jou wil 3-0 96° use come ot {he new featurer: data ming acsens, and drithrough, For nform ation about fly soleing te powar of aurosch@ Sql Server™ 2000 analyse Sarees, faust sumer Boake Gnine. Scenario: ‘You are a database admnnstrator working forthe FoodMart Corporation Foouart is 2 large grocery chain eh fsies n re United States, em, ane Canada, Wek to three sample cdbes (warketing, Human Resources (HR), Evasrse Busaoe) you wiloulg, youll setup the cernecuons You peed to gat access tO fits, cate yur cubes. and postion yoursahta nase your data mene mast atsert wy, > 1. Quick start 60 minutes) 2. Basic Functions (60 minutes) 3, advanced analysis (60 minutes) 4. Data mining (90 minutes) ‘ ao Programe Nacional de hiomnéics Pte Propramactin de 8 Seat Se SENATI Mara tpn Preguntas de repaso 1. {Qué es una tabla de dimensiones? 2. Qué es una tabla de hechos? Qué es un esquema de estrella? 4. 4Por qué es conveniente utilizar las capacidades de mineria de datos de SQL. Server? 5. ¢Cuales son los pasos para crear un almacén de datos? ‘Proprans Neconaldelnomice Programaelén de 8D rt erat Soo Merial el parante SENATI Programe Nacional e horniica Pte Propramactin de 8 Seat Se SENATI Mara tpn Capitulo 8 Programaci6n desde el lado del Servidor Objetivos: ‘A finalizar este capitulo, el participante tendra conocimientos sobre: & Tablas temporales. & Variables. & Estructuras de control de ejecucién Cursores. Introduccién Como cusiquler longuaje de programacién, Transact-SQL proporciona mecanismos para crear procedimientos gonéricos y reullizables. Entre estos procedimiontos dos de los més Importantes son la habilded de crear abjetos tomporales y la posibilidad de pasar valores ‘specifics a funciones y procedimientos genérioos. ‘Transact-SQL. soporta los objelos temporales a través de la creacién de tablas temporales y del uso de variables. Pasar valores especificos a funciones y procedimientos almacenades se reaiiza utlizando parémetos. Tablas Temporales Las tablas temporales son como las tablas normales, excepto que existen sélo mientras se ‘stan utlizando, Microsoft SQL Server las elimina automticamente cuando todos los usuarios, han torminado de uliizarias. Las tablas temporales se crean utilzando los mismos comandos que Transact-SQL. utliza para ear una tabla normal CREATE 0 SELECT INTO. La diferencia es que el nombre de fa tabla, temporal comianza con # 0 #. Ast la primera de las siguientes sentencias crea una tabla rrormal, y la segunda sentencia crea una tabla temporal. CREATE TABLE TablaNormal(laClave INT PRIMARY KEY, elValor CHAR (20) ) (CREATE TABLE #TablaTemporal (IaClave INT PRIMARY KEY, elValor CHAR (20) } La Gnica restricién al crear tablas temporales es que no pueden tener restricciones de tipo FOREIGN KEY. Se puede utiizar el resto de funcionalidades de la sentencia CREATE TABLE, ademds las tablas temporales pueden tener resticciones CHECK, valores por defecto y cualquier estructura que necesita. Las tablas tomporaies se crean siempre en la base de dalos del sistema tempdb. Dato que tempdb se vuelve acrear siempre que se arranca SOL Server, las tablas temporales no pueden sobrevivir entre sesiones, Ademas las tablas temporales siempre se destruyen cuando salen fuera de su ambilo esto es cuando nadie las utiiza. 1 émbito de una table temporal se determina por su nombre. Las tablas temporales nombradas ‘con una sola #, como #MiTabla, tenon ambi local. Las tablas temporales cuyo nombre ‘empieza con dos #, como ##MITabla, tienen dmbito global. Programe Nedoral de nornbica Programacién de 8D wt erat Soo Marval del parkpante SENATI Las tablas tomporaies locales (lamadas algunas voces tablas temporales privadas) son visibles, ‘nicamente para la conexiin que las crea, Ninguna otra conexién que crea la tabla temporal puede veriss 0 aoceder a elias, La_conexibn que crea la tabla temporal puede eliminaria en ‘aualquier momento, pero si existon aun cuando el usuario se desconecta, SOL Server eliminars todas las lables automaticamente, Las tablas temporales globales creadas con una doble # son accesibles por cualquier usuario. [No necesiia otorgar derechos para una sola tabla global temporal, cualquier usuario adquiere los privlegios automaticamente. Las tablas temporales globales pueden oliminarse explicitamente, 0 SQL Server les borraré ‘cuando se clerte la conexién del usuario que la cred y hayan Mhalizado todas les acciones sobre la tabla. Por ejemplo, si el Usuario A crea la tabla temporal ##MiTabia, ol Usuario B puede elecutar comandos entre ella. Sial Usuario A se desconecta mientras el Usuario B ests utiizando ##MiTabla, se completaré cualquier comando SQL Server que se esté ejecutando, pero el usuario B no podré realizar ningun otro comand conta la tabla, Utilizar tablas temporales Las tablas temporales se crean ullizando los mismos comandos CREATE y SELECT INTO que las tablas normale. Una vez creada la tabla en cueslion es accesible para la conexin (esto 98, para el resto de conexiones la tabla local no existe), puede ullizarse exactamente como cualquier otra tabla normal (Crear una tabla temporal focal 1. Pulke el boton Nueva Consulta en la barra de Herramientas en el Analzador de Consultas para abrir una nueva vertana de Consulta. El Analizador de Consults Abre una ventana de Consultas en blanco. 2. Escriba lo siguiente: Seen eee USE Puce 0 Select title td, tick nT #Tapiatseat ROM tatLes as romps) arrecceay [ao faacen fen) [aRvaNrparnaader GH) be [UUGTT frome in GIS 7 3. Pulse el botén Ejecutar Consulta en la barra de herramientas del Analizador de Consultas, El Analzador de Consulta crea una tabla temporal. Programe Naconal e homies Pte Programactin de BO Treat saver SENATI anual dl prtpanto 4 Selene a carpata Tab da Unuaro dem be do de tap ono] Nevogader de 8. 5. Pulse F5 para refrescar la pantalla det Navegador de Objetos, y expanda la carpeta Table de Usuario. De Gat ey Looe lesen the ; : ®-eEB)seetale ove sie awalsie ito staplanocel 5 Sues PE doo, 18 ErSyem tas ‘8 Ba veve 18 Gi SomePocetaes Dhrine } El Un Dawe Tet (x8 rov(o) azteecea) Crear una tabla temporal global 1. Sin corrar la ventana que contione la instruceién anterior, pulse el botén Nueva Consulta en la barra de herramientas del Analzador de Consults para abrir una nueva ventana de Consulta. 2. Escribirlo siguiente: Select title ad, title INTO fTebiaboeal FROM vicles we 3. Pulse el botén Ejecutar Consulta en la bam de herramiantas del Analizador de Consultas.. 4. Seleccione la carpeta Tablas de Usuario de la base de datos tempbd en e! Navagador de objetos. ‘Programa Nacional denies yoni 00 rereatacee ~~ Manual del perpante SENATI 5. Punoo FS per rtescr la penta del Navegeor de Objeloe, y expands ia carpola Tables isuario. Se te eo ay Irs arco oe [S-eOR| AREA Alo(D-\ve =F awa ge [Bracomatmarradwome x] ‘it wana 7 @O mooe Stone eseie a4, atte fo me 5 auras Pe mead © Hy dmtiasaes, pe aes ‘EiAnaliador de Consulias muestra a bis co AWTabIaGIobel Utiizar una tabla temporal focal desde la sesién actual 4. Seleccione la ventana de Consulta. 2. Escribirlo siguiente: FROM fTebisLocal Computer Phobic AND... 3 [pu121 Costing wsen Compuce... fe P7777 Ewotsonal Security: «+. [22091 te Anger the Eneny? ec Eeiquecte 2 |c3230 ontone, Leeks, and 6... 30)|Ps9999 Prolonged Date Depri Ysz | ncezza = Steaight Tax About... [ineccoenceay [Smwnwadonisrata Gi) jabs (oreo erowe inaicaly 7 Elanalzador muostra ol resultado del SELECT Programe Nacional de hiomnéics wr SENAT 3, Pulse el botén Ejecutar Consulta en la barra de herramiantas del Analizador de Consulta. El Analizador de Consultas ejecuta la sentencla SELECT. Ustizer una tabla trnporal global dou a sesin actu 4. Eserba le sguert mstucdén: ‘SELECT * FROM dbo. taba. 2, Puli. lpcutarconaule hanna humerios dalaralensor de Conautas In Fron coo. fTabiaLocat es] [eitle tajeavie al a [Fcia9s Gut ie it User Fricndly? 2 |Psis7z computer Phonie AND |p Jovisi: cooking vith Compute @ |PS777? tnetional Security: © |1ca202 Fagey dears in Ducks |Fs2091 Ts Anger che Enemy? 7 |ps2ie Lite Yithout Pear Je |rcooss Wet Etiquette @ |tc9216 onions, Leeks, and G. PceOee Secrets of Silicon V uce222 Silicon Valley Gaste 45 [ruvas2 scvaight TaLx snout tev? guehi, anyone? 45 [bvios2 The Busy Executive's... © Dido | mac-oan (oc) eRe Variables ‘Aunque las tablas temporales pueden resultar muy ciiles en ciertas situaciones cualquier clase de _programacion seria poco menos que imposibie sin las variables, que son objetos de programacién utitzados para almacenar valores tamporalment. Las vatiables so identifcan por el prefio @: por ejemplo, @mivVariable. Como les tablas, tomporales, las variables tonen dos niveles de émbito, local y global, dentificando las variables globales con una doblo @ ; @@ VERSION Existon un par de diferencias ontre las variables y les tables tomporales. Todas les variables lobales se definen por SAL Serer, es imposible definilas, suyas. ‘Programe Neconaldeinondica SS Programacisn de 8D rt erat Soo Manual del parkdpante SENATI ‘Adomés, las variables locales son incluso mas estrictas que las tablas locales: son ultiizables ‘610 dentro del lbte 0 procedimiento en el que se deciaran. Variables locale: Las variables locales se crean uliizando la sentencia DECLARE, con la siguiente sintaxis: DECLARE @Vatiable_local tipo_datos El identificador variable_local debe cumpir con las reglas normales de los identificadores de la base de datos: el tipo_dalos puede ser cualquiera de los tipos de datos del sistema excepto text, nlext o image. Se pueden crear varias variables locales con una sola instruccéin DECLARE separdndolas con comas: DECLARE @vart int, @var2 int La mayorta de los tipos de datos son escalares: es decir, contienen un Gnico valor como un ‘numero 0 una cadena. La posibidad de declarer variables de tipo Tabla es nueva en SQL. Server 2000. La siguiente linea muestra la sintaxis para creer une variable de tipo tabla: DECLARE @local_variable TABLE ((definicién_tabla)) En el ejemplo, defincién_tabla es idéntico @ una definicion CRATE TABLE normal excoptuando ‘que las unicas resticcionies permitidas son PRIMARY KEY, UNIQUE KEY, NULL y CHECK. ‘Cuando se crea una variable focal, iniclalmente tiene el valor NULL. Puede asignar un valor & una variable de las siguientes formas: ‘© Utlizando ol comando SET con una constante o expresién’ SET @miNariableChar = * Hola, mundo! ‘© Ullizando e! comando SELECT con una constante o expresién: SELECT @miVariableChar = * Hola, mundo” ‘© Ullizando el comando SELECT con otra sentencia SELECT: SELECT @miVariableChar = MAX (Edad) FROM Empleados, ‘+ Ullizando el comando INSERT INTO con una variable de tipo tabla: INSERT INTO miVariableTabla SELECT * FROM Authors Observe que en la tarcera forma (el SELECT con olro SELECT), el operador de asignacién (=) reemplaza ala segunda palabra reservada SELECT, no se repite. I Gltimo ojomplo muestra la sintaxis INSERT INTO ... SELECT del comando INSERT INTO. Puede utlizar también la sintaxis de INSERT INTO ... VALUES: INSERT INTO @miVariableTabla ‘VALUES (El Valor) Programe Nacional e homies Pte Programseién de 80 rsa Sorver SENATI Manus! partspane Variables globales Las variables glbales, identiicadas con un dable signo @ (@@ VERSION) las proporciona ‘SQL Server y el usuario no puede crearias. Existan docenas de variables globales. La mayoria, de ellas proporcionan informacién sobre el estado actual de SQL Server. Todas ellas se lstan cen la Carpeta Funciones Comunes del Navegador de objetos. Variables de Configuracién Las variables de configuraciin que se ullizan mas a menudo se muestran en la tabla siguiente Proporcionan informacion sobre los valores actuales de varias propiedades y paramelros de SQL Server. Variable Valor @@ CONNECTIONS —_E! nimero de conexiones 0 intantos de conexién desde la altima vez ue se arrancé ol servidor. @@ DATEFIRST Obtine un nimoro indicado ol dia de la semana definido como ol primer dia do la somena (Lunes = 1, Domingo =7) @@ DBTs El Uline valor insertado en una columna timestamp en la base do datos. @@ LANGID Elidentiicador de lengua loca delienguaje actualments en uso, @@ LANGUAGE Elnombre del lenquaje actualmonto en uso. @@ OPTIONS CObtiene el valor de una opcisn SET actual @@ SERVERNAME —_ Nombre del servidor lal @@ VERSION Fecha, version y tipo de procesador de la inslalacién actual Variables estadisticas Las variables ostadisticas proporcionan informacién sobre lo que ha hecho SQL Server desde Ja Gitima vez quo se arrancé. Variable Valor @@ CPU_BUSY Tempo consumido de CPU desde que se arrancé el servidor por titima vez @q@ Ine ‘Tiempo que SQL Server ha _permanacido inactive desde que se arrancé e! servidor por allima vez. @@10_BusY Tlempo que SQL Server ha gastado en operaciones de entrada y sada desde que se arrancé el servidor por ditima vez. @@TOTAL_ERRORS —Nimero de errores de lactura / escritura en disco encontrados desde (que se arrancé el servidor por iltima vez. @@ TOTAL_READ [Nimero de operaciones de lactura de disco ejacutadas por el servidor sdsde que 89 arrancs por ultima vez. @@ TOTAL_WRITE ——_Nimero de operaciones de escritura en disco ejecutadss por a servidor desde que se arrancé por utima vez. “Programe Nedovalde orale ee Programacisn de 8D rt erat Soo Merial el parante SENATI Variables del sistema Las variables de sistema en la tabla siguiente. Proporcionan informacion sobre las acciones sobre tabla mas recientes ejecutades por el servidor. Variable Valor @@ weENTITY Uttmo valor insertado en la base do datos on une columna iontidad. @@ROWCOUNT Numero de flas afectadas por dima sentencia. Utiizar variables Las vatiables pueden utilzarse en expresiones a lo largo y ancho del lenguaje Transact_SQL. En cualquier caso, no pueden utlizarse en lugar de un nombre de objeto 0 palabra reserve Asi las siguientes sentencias son correctas: DECLARE @Cat CHAR (20) SET @Cat = ' Mouse" Se ejecutaré este comando SELECT Codigo, Descripcion FROM Articulo WHERE cat = @Cat ‘Sin embargo, las siguientes dos sentencias SELECT provocarén errores: DECLARE @elComando CHAR (10), @elCaampo CHAR (10) SET @elComando = "SELECT’ SET @elCAampo = “Title! + Este comando fallaré @elcomando * FROM Titles ~-Hgual que esta instrucion SELECT @elCampo FROM Titles Declarar una variable local 4. Le siguiente instruccién utiiza una variable global: sO igri Nasal de fori Pte Programactin de BO Treat saver SENATI anual dl prtpanto Eee “crear 1a variable loeal DECLARE EvarTitle cnar (80) Cambiar el valor SET GvarTitle='£1 Linco was vendido’ Mostrar el valor 42 La variable Utiizar SELECT para asignar un valor 41. La siguiente instruccién que ulliza un SELECT Satel3i Declare @vartivie char (50), Quectype ches (20 --tilizar SELECT cou una constante SELECT evaeType-' EL priver Titulo alfabeticanence SELECT geneTitle-Rin Title) fram Titles s-hostear los valores SELECT ByaeTitie as 'Ticulo!, Gvartype a2 ‘Tivo! jbu7632 Straight Tals abour eqD leERWTiMdanbtads GI) babs [CODA Gid#Ls Brows nL, CY 7) Programs Nedoral de inbrnbica yoni 00 rereatacee ~~ Manual del perpante SENATI Usitzar una variable tabla 4. Le siguiente instruccién que ulilza una variable de tipo table: Po Declarar una varisble de vipo cable DECLARE dtablabocal TABLE Title char (100), Type char (50) —-Dtilisar INSERT INTO para crear files INSERT INTO Btabietccal) SELECT titie, Tye FROK Titles -tostear oe resultados SELECT Title, Tope FROK QTablaLocal Le Title Type 5 1_The Susy Executive's... nusthesa 7 [cooking with Compute... businesa 5 You Can Conbat Compu... business 4 |scesigne Talk Aoour ... business 3 Silicon Yaliey Gace... rod_coox “DD ints FED esraaes] ‘aun belagenn 0.0) ERMATperatr()) pubs [oonG0 larame ins.cae 7 Utiizar variables globales para mostrar informacién sobre el servidor 1. La siguiente instruccién utiiza variables globales: Src” giiemiel oe ncn iianitie co Ghersieal CELANGUAGE oe "Longueoe’ Te version yj sao-v20 iocasore 80h server... as_eaglise ssaadnner act) pike [nox [roe fn eT igri Nasal fori wr SENAT 2. Pulse el bot6n de Ejecular Consutla en la barra de herramiontas del Analzador de Consutas. Control de efecucién ‘A menos que espectique lo contrario. Transact-SQL procesa las sentencias desde el comienzo del script hasta el final, pasando por todas ellas. Esto no es siempre lo que usted necesia. ‘Aigunas veces querré que se ojecute una instruccién Gnicamente si son verdaderas ciertas, ‘condiciones. Oras veces quorré quo una instruccién so ejecuta un nimero de veces, 0 $6 repita que se cumpla alguna condicién. Los comandos de control de flujo de Transact-SQl. le proporcionan la posibiidad de controlar la s9jecucién de controlar la ejacucién de esta forma, veremos los comandos de control de fujo. Procesamiento Condicional EI primer grupo de sentencias de control de fiyjo determina si debe oecularse una sentoncia ‘baséndose en una expresion bgica. (Recuerde que una expresién gia se evalia a TRUE 0 FALSE) IF... ELSE La senlencia IF es la mis sencilla entre los comandos de control de fujo condicionales. Si le ‘expresion légica que sigue al comando IF se evalia a TRUE, se ejecutarén la sentencia 0 bloque de sentencias que lo siguen. Si la expresiin ligica se evalia a FALSE, se sata la sentencia o bloque de sentencias que los siguen. El comando opcional ELSE le permite especiicar una sentencia o grupos de sentencias @ decular s6lo si la expresién lbgica so evalda a FALSE. Por ejemplo, los siguiontes comandos do Transact SQL devolversn. Es cierto si @Prucba es vardadoro 0 ‘Es falso sino lo es IF @Prucba SELECT Es cierto’ BSE SELECT Es Falso’ case En la mayoria de los lenguajes de programacién, CASE es una forma sofisicada de la sentencia IF que le permite espectficar multiples expresiones logicas en una dnica sentencia En SQL Server, CASE es una funcién, no un comando. No se utiiza por sf mismo como IF, en ‘su ugar, se utliza como parte de una sentencia SELECT o UPDATE. Las sentoncias que inclyen CASE pueden hacerlo en una de ais dos formas sintécticas, dopendiendo de si la expresién a evaluar cambia. La forma mds simple asume que expresion légica a evaluar siempre tiene la siguiente forma: \Valor= expresion El valor puede ser tan complejo como quiera. Puede utlizar una constanta, un nombre de ‘olumna 0 una expresiin compleja o cualquier cosa que necesite. El operador de comparacién siempre es la iquaidad. La sintaxis simple de CASE e: CASE valor ‘WHEN expresién_uno THEN resultado exprestin_uno Programe Nedoral de nornbica Programacién de BD ‘on SOL Sarver Marval del parkpante WHEN expresién_dos THEN resultado _expresiin_dos WHEN expresién_n THEN resultado_expresién_n (ELSE reultado_expresi6n_else) END En esté forma del CASE se obliene séio ol resuitedo_expresién sila expresién que sigue a la palabra clave WHEN es ligicamente igual al valor especticado. Puede tener cualquler némero de ciusulas WHEN en la oxpresién. La cléusula ELSE os opcional y acta como un resultado “eomodin” y s9 elocuta solo si todas la clausulas WHEN se evalian a FALSE. Comparer un valor conira varios valores diferentes @s extremadamente comin, pero en ‘algunas ocasiones necesitara mas flexiblidad, En este caso, puede utilizar le lamada por ‘Transact-SQL sintaxis CASE de busqueda, con esta form: OSE WHEN expresién_Légica _uno THEN resultado_expresién_uno WHEN expresién_Légica _dos THEN resultado_expresién_dos WHEN expresién_Légica _n THEN resuttado_expresién_n (ELSE resultado_expresién_else) END Utlizar un CASE simple 1. Elsiguiente cédigo utiiza un case simple SELECT ouumaxe CAS Plant Pare ID ‘KEN KEN KEN KEN KEN KEN KEN ELSE 1 THEN ‘Wuts and Berries! THEN "Fruic! THEN Hite and aerrtes! 9 THEN ‘Wate and Berries! 14 THEN ‘Nate and Bercaee! 32 THEN | Fruit! as THEN ‘Fruit! Noher! END os Planecareacey FROM OaLs ORDER DY FlapeCavegocy nag: peRNaNNedrieador I) ey Jowonon revs ini,celt ari Nasal for Pte Programseién de 80 rsa Sorver SENATI Manual partspane Usitzar un CASE de bisqueda 4. Las siguientes instrucciones que utlizan un CASE de bisqueda EMS eee ELSE ‘Nether’ [Seslyendedquer/Rle WAGaeO (60) [GERMaNMaarnavade (Sl) aver [OOO] irons ING CAT Elcomando GOTO IF... ELSE y CASE controlan la ejequoion de instrucciones baséndose en los resultados de una exprestin Kogica. El comando GOTO es incondicional, Transfiere la ejecuciin directamente 2a sontencia siguiente a la etiqueta referenciada por el comando, En SQL Server, las etiquetas no son sentencias ejecutables con la siguiente sintaxis: nombre_etiqueta EI nombre etqueta debe seguir las reglas para los identiicadores. El comando GOTO en si ‘mismo tiene una sintaxis muy simple: GOTO Label_name (Cédigo Spaghetti GOTO se considera un comando maligno entre la comunidad de programadores. Es ast por razones hisiéricas: fos primeros lenguajes proporcionaban muy pocos mecanismos para ‘controlar la gjecucién, normaimente solo IF y GOTO y eso convertia el cddigo en complejo y diffcl de leer lamado aidigo Spaghetti, GOTO tiene su lugar, en cualquier caso, y es particularmente uti en el manejo de errores. Silo utiiza con cuidado, puede hacer su cédigo mas facil de entender. Simplemente asegurese de {que no utliza GOTO para realizar tareas que podrian ejecutar otros comandos de control 0 funciones de forma més limpia, Bucles I Gitimo comando de contol de fiyjo le permite hacer que una sentencia o bloque de sentencias se ejecutan hasta que cumpla determinada condicién. Bucle WHILE simple La forma més simple de! bucie WHILE espectfica una expresin i6gica y una sentencia o bloque de sentencias. Las instrucciones se repiten hasta que la expresién lbgica se evalia a ‘Programs Neconaldeinormiice Programacién de 8D wt erat Soo Marval del parkpante SENATI FALSE. Sila expresion iégica es FALSE la primera vez que se evalda la sentencia WHILE, la Instruccion o grupo de instrucciones no se ejacutard nunca. Usilizar un bucle WHILE simple 1. Las siguientes instrucciones utilzan un bucle WHILE simple SRE Tae a local variable as an inoremental counter DECLARE Qeounter ant SET Geounter = 1 WHILE feouater < 11 BECIN PRINT Geounter SET Gcounter ~ geounter + 1 Ag-020(80) (GERMANYYAcrinetraccr (GIP ube | Drews Inca 2. Pulse o! botén Ejecutar Consulta on la barra de herramiontas del Analizador de Consulias para ejecular la consulta, Bucles WHILE complejos La sintaxis en la sentencia WHILE puede realizar procesos més complejos que el mostrado en le ejemplo anterior. La clusula BREAK sale del buci; la ejecuctén continga por la sentencia que sigue a la cléusula END del bloque de sentencias WHILE, La cl4usula CONTINUE davuelve la ejacucion al comianzo del bucle ocasionando que las senlencias que le siguen en ‘1 bloque de instiucciones no se ejecutan, Ambas sentencias BREAK y CONTINUE se suelen sjecular condicionalmente, dentro de una instruccion IF. Puede utlizar BREAK y CONTINUE on fa misma sentoncia WHILE sila Ibgica do su programa lo pide. Puede utlizar también cada cléusula multiples voces dentro de un bloque de Instrucciones, aunque on cada caso 6 se ejecutaré una de ollas. Usiizar WHILE... BREAK 4. Las siguientes instrucciones utlizan un bucle WHILE. BREAK 2. Pulse el botén Ejecutar Consulta en la barra de herramientas el Analizador de Cosnultas para la ejecucién de la consulta El Analizador de Consuitas muestra los resultados de la consulta. Programe Naconal e homies oan USE Pus co. DECLARE Qeeunter inc SET Geounter = 1 WHILE geounter < 25 BEC PRINT Geounter SET Gcouater ~ feounter + 1 TF §counter > 10 BREAK np Ei Grads SY) Hecoagoe Jing020 (6.0) GERMAWWAdinsizccer (SI) pubs [O:CO.GD Craw Ini, cels 7 Usiizar WHILE... CONTINUE 4. Las siguientes instrucciones utlizan un bucle WHILE... CONTINUE, ~~ Vee a local variable as an insreental counter Programactin de 8D ‘on SL Server Manual de partpanio 2. Pulse e! botén Ejecutar Consulta en la barra de herramientas del Analizador de Consultas para ejecutar la consulta, El Analizador de Consutas muestra los resultados de la consulta. PEE Drchané Erountee int SET Usovater - 0 b == Use = local yarishle as an ancrenental counter Fe ies eee [a | nal Eis ef ess pnavaca(G) ubs [OREO Drow wh Ca Programs Nedoral de inbrnbica 8 Programacisn de 8D rt erat Soo Merial el parante SENATI Cursores de Transact-SQL Una de las caracteristicas que definen las bases de datos relacionadas es que las operaciones 'e ejecuten sobre un conjunto de fis. Un conjunto puede estar vacio, o contener una sola fla, pero aun asi se considera un conjunto. Esto es necesario y util en operaciones relacionales, pero en algunas ocasiones puede no ser conveniente para las aplicaciones. Por ejemplo, dado que no hay un modo de apuntar a una fla especiica de un conjunto, mostrar cada vez una fla al usuario puede sor dif @ incluso aungue las exlensiones al SQL esiindar proporcionadas por TransactSQL hacen el SQL mucho més programable, aun existon operaciones dificles, caras, o simplemente Imposibles de realizar sobre un conjunto base. Para manejar estas situaciones, SQL admite los cursores. Un cursor ¢s un objeto que apunta a luna fila especifica dentro un conjunto. Dependiendo de la naturaleza del cursor que cree, puede mover el cursor por el conjunto y modificar 0 bortar datos. ‘Microsoft SAL Server soporta actualments dos tipos diferentes de cursores: ‘+ cursores Transact-SQL. ‘+ cursores API interface de programacién de aplicaciones) Los cursores API se crean dentro de una aplicacién utiizando los ActiveX Data Objects de Microsoft (ADO - ActiveX de Objelos de Datos), OLE DB, Open Database Connectivity (ODBC - Conexién de bases de datos abierias), 0 DB-Library. Cada una de estas APIs admite unas funcionaldedes diferentes y ullizan diferentes siniaxis. Aqul no disculiemas ningén tipo de cursor API, silos ulliza consulle con la documentacién aproplada para la API y el lenguaje de programacién que use Los cursores Transact-SQL se crean utllzando el comando DECLARE CURSOR. Tanto el ‘objeto cursor como el conjunto de filas al que apuntan existen on ol servidor. Este se denomina tun cursor de lado del servidor. Cuando utlice un cursor de lado del servidor desde una aplicactén conectada a SQL Server por una red, cada operacién sobre ol cursor requlere un Viaje através de la red. Las biblotecas API de cursor, ademas de soportar ls cursores de lado el servidor, soportan también un cursor de lado del cliente que existe sobre el sistema de! Cente donde carga en memoria las fias para manipularias al conjunto de files a las que apunta el cursor 9¢ define por un comando SELECT. Existon algunas restricciones sobre la sentancia SELECT cuando se crea el cursor Transact-SQL. ‘+ Nopuede devolver multiples conjuntos de resultados. ‘+ Nopuede contener la cluusula INTO para crear una nueva tabla. ‘* No puede contener clausulas COMPUTE 0 COMPUTE BY utlizadas para agregar resullados. (Puede, en cualquier caso, contener funciones agregadas como AVG.) Caractoristicas de los cursores ‘Transact-SQL admite varios tos diterentes do cursores. Ordonados por las caractoristicas de cada tipo puede ser confuso, pero resulta més fécl si plonsa on cada to en términos do tres, Caracteristicas més 0 menos independientes de los cursores: su hablldad para refejar los smbios de los dalos subyacentes, su habildad para moverse a través del conjunto de flas, y ‘su habilidad para modificar el conjunto de fas. Reflejar cambios Cuando un cursor refleja los cambios realzados sobre los datos subyacentes nos referimas a «ilo con sensibiidad. Por ejemplo: suponga que crea un cursor para la sentencia: SELECT * FROM Oils WHERE Lef{OilName 1) = "8" ‘Se pueden determinar dos tipos de sensiblidad por separado cuando crea sus cursores: los ‘cambios de flas incluldos en el conjunto (la pertenencia al conjunto) y los cambios de los valores de las las subyacentes. Programe Nacional e homies wr SENAT Movimiento La segunda caracteristica del cursor es si puede o no utlizar el cursor para moverse hacia delante y hacia atrés, 0 sélo hacia adelante. Aqui se aplica el cilema proverbial de la programacién de la velocidad contra la flexiblidad. Los cursores s6lo hacia adelante (Iorward- (only) son bastante mas répidos, pero obviamente menos flexibles. Moditicacién La caractoristica final utiizada para clasifcar cursores os si las fas se pueden o no modificar & través dol cursor. Los cursores de S610 loctura son generalmento mas eftcntes pero menos foxibles. Tipos de cursor ‘Transact-SQL admit cuatro tipos diferentes de cursores: + Static + Keyset + Dynamic frohose. Cada tipo de cursor almacena diferentes combinaciones de las caracterisicas de cursor descritas en la seccion anterior. Static Un cursor estitico toma una instanténes de los datos espacifioes por su sentencla SELECT y los almacena en la base de datos tempdb. No existe sensiblided hacia los cambios de pertenencia 0 valores de los datos, y dado que cualquier modifcacién Gnicamente se reflaaria fn la copia, son siempre de s6lo lectura. Los cursores estéticos pueden, en cualquier caso, decararse como do sol lecture hacia delanto(orar-ony) o con movimiento en ambos sontidos. Keysot Un cursor de tipo Keyset (conjunto de claves) copia en tempdb sélo las columnas neceserias, para identifcar de forma Gnica cada fla. A la hora de declarar un cursor Keysel cada tabla Involucrada en la sentencia SELECT de la definiciin debe tener un indice Gnieo que defina un Conjunto de claves a copia Los cursores Keyset pueden ser modifcables 0 de sélo lectura, y desplazables en ambos santides 0 solo hacia adelante La propiedad de un cursor Keysot se fia cuando deciara ol cursor. Si la fade una fila que podria satisfacer ol ctterio de seleccién miontras que el cursor esta abierto, no se afadird al ‘onjunto. Dynamic CConceptuaimente, un cursor dinémico se comporta como si se ejacuara la sentencia SELECT cada vez que 30 hace referencia a una fla. (Lo quo ocure realmente es bastante dieronte, 070 os un Buan mado de penser en los curseree dnémicos) Los cursores dindmicos refejan los cambios tanto de petenancia como de ls valores de datos ‘subyacentes, tanto silos cambios se han realizado a través del cursor por otros usuarios. Existo una rosticlén en ls cutsores dnémicos: a senlencie SELECT uilizada para definios ‘ede contener una clausula ORDER BY soi 9! hay un indice que contene las Coumnas ‘Programs Neconaldeinomiice Programacisn de 8D rt erat Soo Merial el parante SENATI utiizadas on la cldusula ODER BY. Sideciara un cursor dinémico con una clgusula ORDER BY ‘no aftadida a un indice, SQL Server convert el cursor a un cursor de tipo Keyset. Firohose SQL Server admite una forma especialmente oplimizada de un cursor sblo lectura, sélo hacia dolante. Este tipo de cursor se daciara ullizando FAST FORWARD, poro es més conocido ‘como un cursor frehose. Los cursores firehouse son muy eficientes, pero hay dos resticciones importantes al ullizarlos. Primero, sila sentencia SELECT utllzada para definr el cursor hace referencia a la columna text, ntext o image y contiene una clausula TOP, SQL Server convierte el cursor frohose en un cursor Keysot. ‘Segundo st la sentencla SELECT que utiliza para defnir el cursor combina tablas que tiene \desencadenadores con tablas que no tienen desancadenadores, el cursor que convierte en un ‘ursor estitico. Los desencadenadores son scripts Transact-SQL ejeculados aulomaticamente por el servidor cuando se ejecutan sentencias dal Lenguaje de Manipulacén de Datos (DML) contra una tabla, Utilizar Cursores Utiizar un cursor es bastante parecido a utlizar una variable local porque usted la declara, ‘stablece su valor y la utiliza al contrario que bbs variables locales, que siompre se destuyon automaticamente cuando salen de su ambiio, debe lberar las flas ullizadas por el cursor, después destruito Crear cursores Elprimer paso al usar un cursor es crearo, Crea cursores Transact-SQL utlizando la sentencia DECLARE CURSOR. La sintaxis de la sentoncia DECLARE CURSOR es: DECLARE nombre_CURSOR Disibiidad] [movimiento] {tipo} [bloqueo] [TYPE_WARNING] FOR sentencia_seleccién [FOR UPDATE [OF nombre_columnas]] Observe que todos los pardmetros que definen las caracteristicas del cursor visiblidad, tipo, y siguientes, son opcionales. Los valores por defecto son complejos, con parémetros ‘especiicados y no especificados que intaractéan con los registros 0 visias subyaconles con las opciones de la base do dalos. En aras de la leglidad, es normalmente mejor especticar ‘explictimente cualquier pardmetro que le preoaipe de ese modo sabré exactamente lo que obtione. La visiblidad de un cursor se define con la palabra clave LOCAL 0 GLOBAL. Tiene el mismo efecto que utitzar @tabla_local o @tabla_global para declarartablas temporales. EI pardmotro movimiento acepta las palabras claves FORWARD_ONLY y SCROLL, ‘movimiento solo hacia delante o en ambos seniidos respectivamente. Programe Nacional e homies wr SENAT El parametro tipo determina el tipo de cursor a crear. Las palabras claves son STATIC, KEYSET, DYNAMIC y FAST FORWARD, I parémetio de tipo FAST FORWARD ¥ ¢i parémetro de movimianios FORWARD. ONLY son mutuamente excluyentos. El parémetto bloqueo determina si puede modiicarse una fia a través del cursor, y si otros usuarios pueden modiicarias 0 no. Si ulliza la palabra reservada READ_ONLY, no se podran realzar cambios @ ls datos subyacentes a través del cursor. Ain es posible que olfos usuarios ‘modiiquen fos datos, o modicar usted mismo los datos utizando una sentencia UPDATE. esténdar. Si especiica SCTOLL_LOCKS como pardmetto de bloqueo, las modicaciones se pueden realizar a través del cursor. Cualguler otra sentencia UPDATE, bien ejecutada desde el mismo bole 0 por oto usuario alr La atma opeién de bloqueo, OPTIMISTO, 1» permite modifica, las fas tanto a través dol ‘aursor como desde fuera de él, Esta es le opoin més flexible, poro existe siempre la Posibiided que fale una modiieackin a través del cursor sila fla ha cambiado desde que el cursor ley6 la fila. El pardmetro TYPE_WARNING indica @ SQL Server que mande un mensaje de advertencia lante si se conver el cursor desde el tno especiicedo a cualquier ‘tto tipo. Esto sucede ‘cuando deciare un tipo de cursor que no admia la sentancia SELECT especifiada La sentencia_seleccién especificada en la cléusula FOR es obbgetoria. Expecifca la fla @ incluir en el conjunio de datos del cursor. La clausula FOR UPDATE es opcional. Por defecto, ls cursores son modifcables a menos que 9 especifique el parémetro de blaqueo READ ONLY, pero de nuevo, es més seguro inch sta cléusuia para asogurarse quo obtione fos resultados que quiere. Pucde utlzar OF ‘nombre_columnas para identfcar las columnas especifias que admiton cambios. Si omito OF ‘nombro_columnas, todas las columnes de la sentoncia SELECT sorén modtfcadas. Variables cursor Transact-SQL le permite deciarar variables de tipo CURSOR. La sintaxis estindar DECLARE no crea el cursor, debe explicilamente establecer (SET) la variable al cursor DECLARE miQursor CURSOR LOCAL FAST_FORWARD FOR SELECT Name FROM Employees DECLARE @miVariableCursor CURSOR SET @miVarlableCursor = miCursor Esta sintaxis es ati cuando quiere crear variables que pueden asignarse a diferentes cursores, ‘como al crear un procedimiento generico que opera multiples conjuntos de resultados. Puode dectarar una variable cursor, y ulizarla para crear un cursor directamento: DECLARE @miVariableCursor CURSOR ‘SET @miVariableQursor CURSOR LOCAL FAST_FORWARD FOR SELECT Name FROM Employees Utlizando esta sintaxis, el cursor no tone un identifeador y s6lo se puede accede a través de la variable, Esta sintaxis es més Gti en procedimientos almacenados. Abrir un cursor ‘Al dectarar un cursor crea un objeto cursor, pero no crea el conjunto de registros que ‘manipulara @! cursor. El conjunto de cursor no se crea hasta que abre el cursor. Tras la ‘Programs Neconaldelnomaiice Programacién de BD won SOL Sarver Marval del parkpante ‘complejidad do la sentencia DECLARE CURSOR no dude de que st de la sentencia OPEN: OPEN [GLOBAL] cursor_o_variable La palabra clave GLOBAL le evita los confictos de nombre: si se deciara con la palabra clave LOCAL un cursor y olro con ia palabra clave GLOBAL con el mismo kentifcador, las referencias al cursor iin por defecto al cursor local a menos que ullice. la palabra resonada GLOBAL. Como slempro, os més caguro ser explicio si esté abriando un cursor global. Cerrar un cursor Una vez ha terminado de ullizar un cursor, deberla cerrarlo. La sentencia CLOSE tbera los recursos uliizados en mantener el conjunto de cursor, y también libera cualquier bloqueo sobre las filas si ha utiizado el parsmetro SCROLLOCKS de la senlencia DECLARE. La sintaxis del ‘comando CLOSE es pricticamente idéntica a la sentencia OPEN: ‘CLOSE [GLOBAL[ cursor_o_variable Liberar un cursor La Ultima sentancia en la secuencia de creacién de un cursor es DEALLOCATE, La sintax's es la siguiente: DEALLOCATE [GLOBAL] cursor_o_variable Pero existe una precaucién: la sentencia DEALLOCATE borra el identiicador del cursor 0 la variable cursor, pero no borra necesariamente el cursor. El cursor en si mismo no se elimina hasta que todos los Kdentificadores que lo referencian se hayan liberado o salgan fuera de su Ambo. Considere el siguiente ejemplo: ++ Crea ef cursor DECLARE miQursor CURSOR KEYSET READ_ONLY FOR SELECT * FROM Articulos ++ Crea una variable de cursor DECLARE @VariableCursor CURSOR ~~ Crea el conjunto de cursor (OPEN micursor ++ Asigna la variable al cursor ‘SET @varlableCursor = micursor += Liberar el cursor DEALLOCATE miQursor wr SENAT Después de Iberar el cursor, el dentiicador micursor deja de estar asociado con el conjunto de ‘aursor, poro dado que el conjunto de cursor ain esta referenciado por la variable @rariableCursor, e| cursor y conjunto de cursor no se liberan. A menos que explictamente libere también la variable del cursor, el cursor y conjunto de cursor conthuaran exisliendo hasta que la variable salga de su émbito. ‘Manipular filas mediante un cursor Los cursores no serdn interesntes si no pudiera hacer algo on ellos. Transact-SQl. soporta {tes comandos diferentes para trabajar con cursores: FETCH, UPDATE y DELETE. El comando FETCH recupera una fla especifica del conjunto del cursor. En su forma mas simple, ol comando FECTH tiene la sintaxt FETCH cursor_o_variable Este formato obliene la fla en la cual esté posicionado el cursor (la fla actual). Usiizar un comando FETCH simple USE Aromatherapy co. -- Create the eureor DECLARE SampleCursor CURSOR Local FOR SELECT Oilllame FROM gale - Create the cursor sec OPEN simple Cursoe a= Retrieve @ rou |the first) FETCH vinpleCursor -- Release che cursor ser CLOSE Dinplecursor En lugar de obtener una fa directamente, el comando FETCH le permite almacenar los valores obtenidos de las columnas en variables. Para almacenar los resultados del FETCH en una variable, utlice la siguiente sintaxis: FETCH cursor_o_variable INTO lista_variables ‘Propane Neconaldelnoraiice Programacién de 8D wt erat Soo Marval del parkpante SENATI La lista variables es una lsta separada por comas de identiicadores de variable. Debe \Jociarar iss variables antes de ejecutar ol comando FETCH. La lsta_variables debe inclu una Variable por cada columna de la sentencia SELECT que define el cursor, y los tpos de datos de las variables deber ser igual o compatibles con los tipos de dalos de la columna.. ‘Leer una fila en variables DECLARE simpleCucsoc CURSOR LOCAL HEYSET FOR SELECT Oliane TRON O113 DECLARE QcheNeme char |20) OPEN stmplecursoe <= Retrieve the first row into = varisble FETCH FIFST FROM eimplecuraoe INTO AtheName <- naspiay the resues PRINT RYRIM(BtheName) + ' is the first name! a Retrieve the €igch cow FETCH ABSOLUTE 5 FROM simplecursor THTO BeheName n Dispisy the resuies PRINT RYRIN(GtheMane] +‘ is the Cifch name’ CLOSE simpLecursor DEALLOCATE simplecucsar En los ojomplos anteriores hemos utlizado la sentencia FETCH para obtener la fla actual. La sintaxis do la sentencia FETCH proporciona también un numero de palabras reservadas para ‘speciicar una fla diferente. Cuando utliza una de estas palabras claves la sontencia FETCH obtendré la fla especiica y convierta esa fila en la actual ‘Tres palabras claves le permiten especiicar ura posicién absoluta en el conjunto de cursor. Las palabras reservadas FIRTS y LAST obtienen la primera y ilima fia respectvamente, mientras que ABSOLUTE n espectica una file n fas desde el comianzo (sin as positiv) 0 @ final. (si n es negativa) del conjunto del cursor. Puede expresar el valor de n como una ‘onstante (3) 0 una variable (@laFla) igi Nasal dr wr SENAT Leer filas por su posicién absoluta ‘Ademés de las DECLARE oimpleCursor CURSOR Loca BEYSET DECLARE Gehetlame cher (20 OPEN simpleCuczoz == Revrieve the firse row inco @ variable FETCH FIRST FRON simplecursor 170 Behewame == Display the resules PRINT BTAINUQcheNeme) + | is the first mene == Retrieve the titth rev FETCH ABSOLUTE § FROM simplecureor o> Display the results PRINT RTAIM(GchsNeme) + | ie the fifth none! palabras claves que le permiten recuperar una fila baséndose en su posiciin ‘absolut, la sentencia FETCH le proporciona tres palabras clave que le permiten recuperar una fila baséndose en su posiciin relativa con respecto a la fila actual. FETCH NEXT obtiene la siguiante fila, FETCH PRIOR obtiene la fia anterior, y FETCH RELATIVE 1 obligne una fla n fas desde I fia actual. Como FETCH ABSOLUTE n, FETCH RELATIVE n puede espectficar ‘l niémero de filas antes de la fla actual, sin es negativo, o después de la fla actual, sin es positiv, Leer filas por s Programe Neconal 1 posicién relativa DECLARE sumpiecursor CURSOR Loca, eEYSET FOR SELECT OiiMane FROM Dile ECARE GcheMame char (20 PEN cimpleCuccor -- Retrieve the firs vow auc @ variable FETCH FIRST FROM sinpleCucsor INTO ftheNene == Display the results PRINT RTRIMi@theNeme) + | is the first nane! a= Retrieve the next row FETCH RELATIVE 1 FROM simplecursor INTO BtheNane = pispiay the resuice PRINT RTAIN(QcheMome| ~ | is the next name’ CLOSE simplecursor DEALLOCATE. simpiecursor de ntrndies or Programacisn de 8D rt erat Soo Manual del parkdpante SENATI Preguntas de repaso zQue son tablas temporales? 2. {Qué diferencia existe entre tabla temporal Global y Local? Qué tipos de variables puede utilizar SQL Server? 4. 4Cudles son las formas de declarar una variable? 5. ,Qué estructuras de control de ejecucién utiliza SQL Server? 6 Que utilidad tienen los cursores? 7. {Que tipos de cursores Transact tiene SQL? Rigi Nasal de oS

You might also like