base de datos
TRANSCRIPT
UNIVERSIDAD TEacuteCNICA DE AMBATO
FACULTAD CIENCIAS HUMANAS Y DE LA EDUCACIOacuteN
CARRERA DE DOCENCIA EN INFORMAacuteTICA
Moacutedulo de Contenidos
Gestor de Base de Datos II
OCTAVO SEMESTRE
Lic Einstein Fabiaacuten Camacho Saltos Mg
AMBATO ndash ECUADORmarzo ndash agosto 2012
FILOSOFIacuteA DEL MOacuteDULO
La metodologiacutea a aplicarse en el moacutedulo es el ciclo de Kolb contemplando todas sus fases se pretende que los estudiantes alcancen un aprendizaje significativo para lo cual se realizaraacute una retroalimentacioacuten se explicaraacute mediante ejemplos se crearaacute un aprendizaje situado en lo cognitivo los estudiantes trabajaraacuten con ejercicios praacutecticos en el laboratorio se realizaraacuten exposiciones pruebas representacioacuten graacutefica de base de datos A continuacioacuten se detalla como se trabajaraacute con el ciclo del aprendizaje de KOLB
1- Experiencia concretaPara esta fase se realizaraacute la explicacioacuten respectiva luego se plantearaacute preguntas para que los estudiantes traten de responder2-Observacioacuten reflexivaEn esta etapa se plantearaacute ejercicios praacutecticos y que los estudiantes reflexionen en cada uno de ellos luego el profesor los resolveraacute en clases3- Conceptualizacioacuten abstractaSe propone ejercicios para que resuelvan los estudiantes y practiquen 4- Experimentacioacuten activaLos estudiantes deben realizar un pequentildeo proyecto aplicando los conocimientos adquiridos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 2
INDICE DE CONTENIDOS
Contenido Paacuteg
FILOSOFIacuteA DEL MOacuteDULO2
INTRODUCCIOacuteN 5
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON OBJETOS QUE LA COMPONEN 6
13 Estructura loacutegica7
14 Planificacioacuten ndash disentildeo8
15 Normalizacioacuten17
16 Herramientas para la normalizacioacuten19
Realizar diferentes tareas de disentildeo y planificacioacuten sobre la estructura de tablas19
21 Tabla 19
22 Tipos de datos20
23 Creacioacuten de tablas23
24 Creacioacuten de Restricciones26
25 Diagramas de bases de datos29
Aplicar las diferentes sentencias y modos en lenguaje SQL para tratamiento de la informacioacuten almacenada en las diferentes tablas de la base de datos32
31 Lenguaje de definicioacuten de datos32
32 Lenguaje de control de datos34
33 Lenguaje de manipulacioacuten de datos34
34 Caracteriacutesticas de la programacioacuten35
35 Funciones 38
Trabajar con los diferentes tipos de iacutendices conociendo las ventajas y desventajas de su uso en funcioacuten del objetivo buscado58
41 Iacutendices 58
42 Mantenimiento de iacutendices58
43 Iacutendices agrupados y no agrupados59
44 Creacioacuten de iacutendices60
45 Vistas 60
46 Creacioacuten de vistas60
Realizar tareas de administracioacuten de bases de datos mediante el uso de triggers61
51Triggers 61
52 Creacioacuten de triggers61
53 Procedimientos almacenados62
54 Trabajar con procedimientos almacenados62
BIBLIOGRAFIacuteA 63
ANEXOS 64
INTRODUCCIOacuteN
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 3
Gracias al aporte del Vicerrectorado Acadeacutemico de la Universidad Teacutecnica de Ambato en los esquemas presentados en la paacutegina web de la Institucioacuten se ha determinado los paraacutemetros del presente moacutedulo de contenidosEl moacutedulo empieza realizando una pequentildea introduccioacuten explicando conceptos y a continuacioacuten los objetos que componen una base de datos Luego explica la creacioacuten de tablas y sus relaciones entre ellos para ir avanzando a las diferentes sentencias y aplicaciones del lenguaje TRANSACT SQL para la consulta de base de dato luego se trabajara con iacutendices y finalmente con triggers para la administracioacuten de la base de datos la versioacuten de SQL server en que se haraacuten las aplicaciones es SQL SERVER 2008 EXPRESS R2 que es una versioacuten gratuita de MICROSOFT que permite realizar aplicaciones de escritorio aplicaciones web y pequentildeas aplicaciones de servidorSe trabajara con conceptos teoacutericos y praacutecticos que permitiraacuten el progreso del estudiante hasta alcanzar el dominio requerido se pretende realizar un pequentildeo sistema aplicable a una institucioacuten educativa con el propoacutesito de apoyar al sistema educativo y que el estudiante tenga una acercamiento a lo que seraacute su vida profesionalEl propoacutesito de este moacutedulo es desarrollar la capacidad de razonamiento en los estudiantes para que puedan desarrollar sistemas utilizando la menor cantidad de recursos de sistemas evitando crear aplicaciones pesadas sin no todo lo contrario crear aplicaciones livianas y raacutepidas que optimice recursos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 4
DESARROLLO DE CONTENIDOS
CAPIacuteTULO I
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON
OBJETOS QUE LA COMPONEN
11 Definicioacuten
111 Definicioacuten de base de datosUna base de datos es una entidad en la cual se pueden almacenar gran cantidad de datos de manera estructurada para luego poderlos recuperarlas posteriormente
112 EntidadEn bases de datos una entidad es la representacioacuten de un objeto o concepto del mundo real que se describe en una base de datosPor ejemplo nombres de entidades pueden ser Alumno Empleado Artiacuteculo etc1121 Entidades fuertes Una entidad fuerte es aquella que puede ser identificada uniacutevocamente sin participar en la relacioacuten Ejemplo cliente vehiacuteculo1121 Entidades deacutebiles Es aquella que no puede participar sin existir en la relacioacuten Ejemplo Factura viaje a la entidad deacutebil se le representa con doble rectaacutengulo
12 Estructura fiacutesicaUna base de datos se almacena en varios ficheros o archivos en disco Como miacutenimo existen dos archivos donde podremos guardar la base de datos
Archivo de datos Archivo de registro de transacciones
El archivo de datos o aquellos que antildeadimos como extras son los archivos que tendraacuten almacenada la informacioacutenPor otro lado tenemos el archivo de registro de transacciones Este fichero es tan importante como el anteriorEl nombre de una base de datos parte de una principal definida por el administrador y a partir de ese nombre principal sql server antildeade
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 5
terminaciones y extensiones a ese nombre principal ademaacutes como administrador puedo elegir el lugar donde se almacenaraacute la base de datosEjemplo si soy administrador de una base de datos y quiero crear una base de datos llama uta los archivos que se creariacutean son los siguientes
Archivo de datos miEmpresa_DataMDF Archivo de registro de transacciones miEmpresa_LogLDF
En caso de tener archivos extras nosotros como administradores tambieacuten podremos darles su nombre principal y la extensioacuten que suele utilizarse es NDFComo administradores tambieacuten puedo seleccionar el lugar de almacenamiento en una determinada carpeta o directorio incluso diferentes unidades fiacutesicasNo debes quedarte con la idea de que una base de datos se compone sencillamente de dos archivos es algo mucho maacutes completo que todo eso lo que representa una base de datos como entidad121 Tamantildeo de la base de datos
Al crear una base de datos con SQL server no es necesario separar una gran cantidad de memoria ya que los archivos de datos y registro crecen automaacuteticamente el administrador de la base de datos le da un tamantildeo inicial una cantidad muy pequentildea en Megabytes una vez que se utilice la base de datos y alcance el tamantildeo maacuteximo se incrementa13 Estructura loacutegicaEs el esqueleto o armazoacuten conceptual estaacute constituido por abstracciones de la realidad para enfocarse en el aacutembito conceptual sin entrar en detalles fiacutesicos Entre los elementos que conforman la estructura loacutegica de una base de datos podemos destacar131 TablasLas tablas son las unidades que almacenan los datos Como norma general se suele imponer que cada tabla almacena informacioacuten comuacuten sobre una entidad en particular (recuerda los libros) Esta norma se conoce como normalizacioacutenLa mayor parte de la actividad producida en una base de datos se produce sobre las tablas siendo las principales tareas las siguientes
Antildeadir informacioacuten Eliminar informacioacuten Modificar y actualizar informacioacuten Recoger informacioacuten y mostrarla
132 Campos y registros
Las tablas estaacuten compuestas de registros y campos Si imaginamos el disentildeo de una tabla como si de una cuadriacutecula se tratase sabemos que estaacute compuesta por varias filas y columnas Las filas corresponden a los registros mientras que las columnas seriacutean los campos Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo (columna) formariacutea una celda la cual almacena un valor
Por lo tanto un registro esta formado por varios campos y cada campo almacena un determinado valor
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 6
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
FILOSOFIacuteA DEL MOacuteDULO
La metodologiacutea a aplicarse en el moacutedulo es el ciclo de Kolb contemplando todas sus fases se pretende que los estudiantes alcancen un aprendizaje significativo para lo cual se realizaraacute una retroalimentacioacuten se explicaraacute mediante ejemplos se crearaacute un aprendizaje situado en lo cognitivo los estudiantes trabajaraacuten con ejercicios praacutecticos en el laboratorio se realizaraacuten exposiciones pruebas representacioacuten graacutefica de base de datos A continuacioacuten se detalla como se trabajaraacute con el ciclo del aprendizaje de KOLB
1- Experiencia concretaPara esta fase se realizaraacute la explicacioacuten respectiva luego se plantearaacute preguntas para que los estudiantes traten de responder2-Observacioacuten reflexivaEn esta etapa se plantearaacute ejercicios praacutecticos y que los estudiantes reflexionen en cada uno de ellos luego el profesor los resolveraacute en clases3- Conceptualizacioacuten abstractaSe propone ejercicios para que resuelvan los estudiantes y practiquen 4- Experimentacioacuten activaLos estudiantes deben realizar un pequentildeo proyecto aplicando los conocimientos adquiridos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 2
INDICE DE CONTENIDOS
Contenido Paacuteg
FILOSOFIacuteA DEL MOacuteDULO2
INTRODUCCIOacuteN 5
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON OBJETOS QUE LA COMPONEN 6
13 Estructura loacutegica7
14 Planificacioacuten ndash disentildeo8
15 Normalizacioacuten17
16 Herramientas para la normalizacioacuten19
Realizar diferentes tareas de disentildeo y planificacioacuten sobre la estructura de tablas19
21 Tabla 19
22 Tipos de datos20
23 Creacioacuten de tablas23
24 Creacioacuten de Restricciones26
25 Diagramas de bases de datos29
Aplicar las diferentes sentencias y modos en lenguaje SQL para tratamiento de la informacioacuten almacenada en las diferentes tablas de la base de datos32
31 Lenguaje de definicioacuten de datos32
32 Lenguaje de control de datos34
33 Lenguaje de manipulacioacuten de datos34
34 Caracteriacutesticas de la programacioacuten35
35 Funciones 38
Trabajar con los diferentes tipos de iacutendices conociendo las ventajas y desventajas de su uso en funcioacuten del objetivo buscado58
41 Iacutendices 58
42 Mantenimiento de iacutendices58
43 Iacutendices agrupados y no agrupados59
44 Creacioacuten de iacutendices60
45 Vistas 60
46 Creacioacuten de vistas60
Realizar tareas de administracioacuten de bases de datos mediante el uso de triggers61
51Triggers 61
52 Creacioacuten de triggers61
53 Procedimientos almacenados62
54 Trabajar con procedimientos almacenados62
BIBLIOGRAFIacuteA 63
ANEXOS 64
INTRODUCCIOacuteN
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 3
Gracias al aporte del Vicerrectorado Acadeacutemico de la Universidad Teacutecnica de Ambato en los esquemas presentados en la paacutegina web de la Institucioacuten se ha determinado los paraacutemetros del presente moacutedulo de contenidosEl moacutedulo empieza realizando una pequentildea introduccioacuten explicando conceptos y a continuacioacuten los objetos que componen una base de datos Luego explica la creacioacuten de tablas y sus relaciones entre ellos para ir avanzando a las diferentes sentencias y aplicaciones del lenguaje TRANSACT SQL para la consulta de base de dato luego se trabajara con iacutendices y finalmente con triggers para la administracioacuten de la base de datos la versioacuten de SQL server en que se haraacuten las aplicaciones es SQL SERVER 2008 EXPRESS R2 que es una versioacuten gratuita de MICROSOFT que permite realizar aplicaciones de escritorio aplicaciones web y pequentildeas aplicaciones de servidorSe trabajara con conceptos teoacutericos y praacutecticos que permitiraacuten el progreso del estudiante hasta alcanzar el dominio requerido se pretende realizar un pequentildeo sistema aplicable a una institucioacuten educativa con el propoacutesito de apoyar al sistema educativo y que el estudiante tenga una acercamiento a lo que seraacute su vida profesionalEl propoacutesito de este moacutedulo es desarrollar la capacidad de razonamiento en los estudiantes para que puedan desarrollar sistemas utilizando la menor cantidad de recursos de sistemas evitando crear aplicaciones pesadas sin no todo lo contrario crear aplicaciones livianas y raacutepidas que optimice recursos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 4
DESARROLLO DE CONTENIDOS
CAPIacuteTULO I
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON
OBJETOS QUE LA COMPONEN
11 Definicioacuten
111 Definicioacuten de base de datosUna base de datos es una entidad en la cual se pueden almacenar gran cantidad de datos de manera estructurada para luego poderlos recuperarlas posteriormente
112 EntidadEn bases de datos una entidad es la representacioacuten de un objeto o concepto del mundo real que se describe en una base de datosPor ejemplo nombres de entidades pueden ser Alumno Empleado Artiacuteculo etc1121 Entidades fuertes Una entidad fuerte es aquella que puede ser identificada uniacutevocamente sin participar en la relacioacuten Ejemplo cliente vehiacuteculo1121 Entidades deacutebiles Es aquella que no puede participar sin existir en la relacioacuten Ejemplo Factura viaje a la entidad deacutebil se le representa con doble rectaacutengulo
12 Estructura fiacutesicaUna base de datos se almacena en varios ficheros o archivos en disco Como miacutenimo existen dos archivos donde podremos guardar la base de datos
Archivo de datos Archivo de registro de transacciones
El archivo de datos o aquellos que antildeadimos como extras son los archivos que tendraacuten almacenada la informacioacutenPor otro lado tenemos el archivo de registro de transacciones Este fichero es tan importante como el anteriorEl nombre de una base de datos parte de una principal definida por el administrador y a partir de ese nombre principal sql server antildeade
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 5
terminaciones y extensiones a ese nombre principal ademaacutes como administrador puedo elegir el lugar donde se almacenaraacute la base de datosEjemplo si soy administrador de una base de datos y quiero crear una base de datos llama uta los archivos que se creariacutean son los siguientes
Archivo de datos miEmpresa_DataMDF Archivo de registro de transacciones miEmpresa_LogLDF
En caso de tener archivos extras nosotros como administradores tambieacuten podremos darles su nombre principal y la extensioacuten que suele utilizarse es NDFComo administradores tambieacuten puedo seleccionar el lugar de almacenamiento en una determinada carpeta o directorio incluso diferentes unidades fiacutesicasNo debes quedarte con la idea de que una base de datos se compone sencillamente de dos archivos es algo mucho maacutes completo que todo eso lo que representa una base de datos como entidad121 Tamantildeo de la base de datos
Al crear una base de datos con SQL server no es necesario separar una gran cantidad de memoria ya que los archivos de datos y registro crecen automaacuteticamente el administrador de la base de datos le da un tamantildeo inicial una cantidad muy pequentildea en Megabytes una vez que se utilice la base de datos y alcance el tamantildeo maacuteximo se incrementa13 Estructura loacutegicaEs el esqueleto o armazoacuten conceptual estaacute constituido por abstracciones de la realidad para enfocarse en el aacutembito conceptual sin entrar en detalles fiacutesicos Entre los elementos que conforman la estructura loacutegica de una base de datos podemos destacar131 TablasLas tablas son las unidades que almacenan los datos Como norma general se suele imponer que cada tabla almacena informacioacuten comuacuten sobre una entidad en particular (recuerda los libros) Esta norma se conoce como normalizacioacutenLa mayor parte de la actividad producida en una base de datos se produce sobre las tablas siendo las principales tareas las siguientes
Antildeadir informacioacuten Eliminar informacioacuten Modificar y actualizar informacioacuten Recoger informacioacuten y mostrarla
132 Campos y registros
Las tablas estaacuten compuestas de registros y campos Si imaginamos el disentildeo de una tabla como si de una cuadriacutecula se tratase sabemos que estaacute compuesta por varias filas y columnas Las filas corresponden a los registros mientras que las columnas seriacutean los campos Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo (columna) formariacutea una celda la cual almacena un valor
Por lo tanto un registro esta formado por varios campos y cada campo almacena un determinado valor
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 6
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
INDICE DE CONTENIDOS
Contenido Paacuteg
FILOSOFIacuteA DEL MOacuteDULO2
INTRODUCCIOacuteN 5
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON OBJETOS QUE LA COMPONEN 6
13 Estructura loacutegica7
14 Planificacioacuten ndash disentildeo8
15 Normalizacioacuten17
16 Herramientas para la normalizacioacuten19
Realizar diferentes tareas de disentildeo y planificacioacuten sobre la estructura de tablas19
21 Tabla 19
22 Tipos de datos20
23 Creacioacuten de tablas23
24 Creacioacuten de Restricciones26
25 Diagramas de bases de datos29
Aplicar las diferentes sentencias y modos en lenguaje SQL para tratamiento de la informacioacuten almacenada en las diferentes tablas de la base de datos32
31 Lenguaje de definicioacuten de datos32
32 Lenguaje de control de datos34
33 Lenguaje de manipulacioacuten de datos34
34 Caracteriacutesticas de la programacioacuten35
35 Funciones 38
Trabajar con los diferentes tipos de iacutendices conociendo las ventajas y desventajas de su uso en funcioacuten del objetivo buscado58
41 Iacutendices 58
42 Mantenimiento de iacutendices58
43 Iacutendices agrupados y no agrupados59
44 Creacioacuten de iacutendices60
45 Vistas 60
46 Creacioacuten de vistas60
Realizar tareas de administracioacuten de bases de datos mediante el uso de triggers61
51Triggers 61
52 Creacioacuten de triggers61
53 Procedimientos almacenados62
54 Trabajar con procedimientos almacenados62
BIBLIOGRAFIacuteA 63
ANEXOS 64
INTRODUCCIOacuteN
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 3
Gracias al aporte del Vicerrectorado Acadeacutemico de la Universidad Teacutecnica de Ambato en los esquemas presentados en la paacutegina web de la Institucioacuten se ha determinado los paraacutemetros del presente moacutedulo de contenidosEl moacutedulo empieza realizando una pequentildea introduccioacuten explicando conceptos y a continuacioacuten los objetos que componen una base de datos Luego explica la creacioacuten de tablas y sus relaciones entre ellos para ir avanzando a las diferentes sentencias y aplicaciones del lenguaje TRANSACT SQL para la consulta de base de dato luego se trabajara con iacutendices y finalmente con triggers para la administracioacuten de la base de datos la versioacuten de SQL server en que se haraacuten las aplicaciones es SQL SERVER 2008 EXPRESS R2 que es una versioacuten gratuita de MICROSOFT que permite realizar aplicaciones de escritorio aplicaciones web y pequentildeas aplicaciones de servidorSe trabajara con conceptos teoacutericos y praacutecticos que permitiraacuten el progreso del estudiante hasta alcanzar el dominio requerido se pretende realizar un pequentildeo sistema aplicable a una institucioacuten educativa con el propoacutesito de apoyar al sistema educativo y que el estudiante tenga una acercamiento a lo que seraacute su vida profesionalEl propoacutesito de este moacutedulo es desarrollar la capacidad de razonamiento en los estudiantes para que puedan desarrollar sistemas utilizando la menor cantidad de recursos de sistemas evitando crear aplicaciones pesadas sin no todo lo contrario crear aplicaciones livianas y raacutepidas que optimice recursos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 4
DESARROLLO DE CONTENIDOS
CAPIacuteTULO I
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON
OBJETOS QUE LA COMPONEN
11 Definicioacuten
111 Definicioacuten de base de datosUna base de datos es una entidad en la cual se pueden almacenar gran cantidad de datos de manera estructurada para luego poderlos recuperarlas posteriormente
112 EntidadEn bases de datos una entidad es la representacioacuten de un objeto o concepto del mundo real que se describe en una base de datosPor ejemplo nombres de entidades pueden ser Alumno Empleado Artiacuteculo etc1121 Entidades fuertes Una entidad fuerte es aquella que puede ser identificada uniacutevocamente sin participar en la relacioacuten Ejemplo cliente vehiacuteculo1121 Entidades deacutebiles Es aquella que no puede participar sin existir en la relacioacuten Ejemplo Factura viaje a la entidad deacutebil se le representa con doble rectaacutengulo
12 Estructura fiacutesicaUna base de datos se almacena en varios ficheros o archivos en disco Como miacutenimo existen dos archivos donde podremos guardar la base de datos
Archivo de datos Archivo de registro de transacciones
El archivo de datos o aquellos que antildeadimos como extras son los archivos que tendraacuten almacenada la informacioacutenPor otro lado tenemos el archivo de registro de transacciones Este fichero es tan importante como el anteriorEl nombre de una base de datos parte de una principal definida por el administrador y a partir de ese nombre principal sql server antildeade
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 5
terminaciones y extensiones a ese nombre principal ademaacutes como administrador puedo elegir el lugar donde se almacenaraacute la base de datosEjemplo si soy administrador de una base de datos y quiero crear una base de datos llama uta los archivos que se creariacutean son los siguientes
Archivo de datos miEmpresa_DataMDF Archivo de registro de transacciones miEmpresa_LogLDF
En caso de tener archivos extras nosotros como administradores tambieacuten podremos darles su nombre principal y la extensioacuten que suele utilizarse es NDFComo administradores tambieacuten puedo seleccionar el lugar de almacenamiento en una determinada carpeta o directorio incluso diferentes unidades fiacutesicasNo debes quedarte con la idea de que una base de datos se compone sencillamente de dos archivos es algo mucho maacutes completo que todo eso lo que representa una base de datos como entidad121 Tamantildeo de la base de datos
Al crear una base de datos con SQL server no es necesario separar una gran cantidad de memoria ya que los archivos de datos y registro crecen automaacuteticamente el administrador de la base de datos le da un tamantildeo inicial una cantidad muy pequentildea en Megabytes una vez que se utilice la base de datos y alcance el tamantildeo maacuteximo se incrementa13 Estructura loacutegicaEs el esqueleto o armazoacuten conceptual estaacute constituido por abstracciones de la realidad para enfocarse en el aacutembito conceptual sin entrar en detalles fiacutesicos Entre los elementos que conforman la estructura loacutegica de una base de datos podemos destacar131 TablasLas tablas son las unidades que almacenan los datos Como norma general se suele imponer que cada tabla almacena informacioacuten comuacuten sobre una entidad en particular (recuerda los libros) Esta norma se conoce como normalizacioacutenLa mayor parte de la actividad producida en una base de datos se produce sobre las tablas siendo las principales tareas las siguientes
Antildeadir informacioacuten Eliminar informacioacuten Modificar y actualizar informacioacuten Recoger informacioacuten y mostrarla
132 Campos y registros
Las tablas estaacuten compuestas de registros y campos Si imaginamos el disentildeo de una tabla como si de una cuadriacutecula se tratase sabemos que estaacute compuesta por varias filas y columnas Las filas corresponden a los registros mientras que las columnas seriacutean los campos Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo (columna) formariacutea una celda la cual almacena un valor
Por lo tanto un registro esta formado por varios campos y cada campo almacena un determinado valor
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 6
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Gracias al aporte del Vicerrectorado Acadeacutemico de la Universidad Teacutecnica de Ambato en los esquemas presentados en la paacutegina web de la Institucioacuten se ha determinado los paraacutemetros del presente moacutedulo de contenidosEl moacutedulo empieza realizando una pequentildea introduccioacuten explicando conceptos y a continuacioacuten los objetos que componen una base de datos Luego explica la creacioacuten de tablas y sus relaciones entre ellos para ir avanzando a las diferentes sentencias y aplicaciones del lenguaje TRANSACT SQL para la consulta de base de dato luego se trabajara con iacutendices y finalmente con triggers para la administracioacuten de la base de datos la versioacuten de SQL server en que se haraacuten las aplicaciones es SQL SERVER 2008 EXPRESS R2 que es una versioacuten gratuita de MICROSOFT que permite realizar aplicaciones de escritorio aplicaciones web y pequentildeas aplicaciones de servidorSe trabajara con conceptos teoacutericos y praacutecticos que permitiraacuten el progreso del estudiante hasta alcanzar el dominio requerido se pretende realizar un pequentildeo sistema aplicable a una institucioacuten educativa con el propoacutesito de apoyar al sistema educativo y que el estudiante tenga una acercamiento a lo que seraacute su vida profesionalEl propoacutesito de este moacutedulo es desarrollar la capacidad de razonamiento en los estudiantes para que puedan desarrollar sistemas utilizando la menor cantidad de recursos de sistemas evitando crear aplicaciones pesadas sin no todo lo contrario crear aplicaciones livianas y raacutepidas que optimice recursos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 4
DESARROLLO DE CONTENIDOS
CAPIacuteTULO I
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON
OBJETOS QUE LA COMPONEN
11 Definicioacuten
111 Definicioacuten de base de datosUna base de datos es una entidad en la cual se pueden almacenar gran cantidad de datos de manera estructurada para luego poderlos recuperarlas posteriormente
112 EntidadEn bases de datos una entidad es la representacioacuten de un objeto o concepto del mundo real que se describe en una base de datosPor ejemplo nombres de entidades pueden ser Alumno Empleado Artiacuteculo etc1121 Entidades fuertes Una entidad fuerte es aquella que puede ser identificada uniacutevocamente sin participar en la relacioacuten Ejemplo cliente vehiacuteculo1121 Entidades deacutebiles Es aquella que no puede participar sin existir en la relacioacuten Ejemplo Factura viaje a la entidad deacutebil se le representa con doble rectaacutengulo
12 Estructura fiacutesicaUna base de datos se almacena en varios ficheros o archivos en disco Como miacutenimo existen dos archivos donde podremos guardar la base de datos
Archivo de datos Archivo de registro de transacciones
El archivo de datos o aquellos que antildeadimos como extras son los archivos que tendraacuten almacenada la informacioacutenPor otro lado tenemos el archivo de registro de transacciones Este fichero es tan importante como el anteriorEl nombre de una base de datos parte de una principal definida por el administrador y a partir de ese nombre principal sql server antildeade
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 5
terminaciones y extensiones a ese nombre principal ademaacutes como administrador puedo elegir el lugar donde se almacenaraacute la base de datosEjemplo si soy administrador de una base de datos y quiero crear una base de datos llama uta los archivos que se creariacutean son los siguientes
Archivo de datos miEmpresa_DataMDF Archivo de registro de transacciones miEmpresa_LogLDF
En caso de tener archivos extras nosotros como administradores tambieacuten podremos darles su nombre principal y la extensioacuten que suele utilizarse es NDFComo administradores tambieacuten puedo seleccionar el lugar de almacenamiento en una determinada carpeta o directorio incluso diferentes unidades fiacutesicasNo debes quedarte con la idea de que una base de datos se compone sencillamente de dos archivos es algo mucho maacutes completo que todo eso lo que representa una base de datos como entidad121 Tamantildeo de la base de datos
Al crear una base de datos con SQL server no es necesario separar una gran cantidad de memoria ya que los archivos de datos y registro crecen automaacuteticamente el administrador de la base de datos le da un tamantildeo inicial una cantidad muy pequentildea en Megabytes una vez que se utilice la base de datos y alcance el tamantildeo maacuteximo se incrementa13 Estructura loacutegicaEs el esqueleto o armazoacuten conceptual estaacute constituido por abstracciones de la realidad para enfocarse en el aacutembito conceptual sin entrar en detalles fiacutesicos Entre los elementos que conforman la estructura loacutegica de una base de datos podemos destacar131 TablasLas tablas son las unidades que almacenan los datos Como norma general se suele imponer que cada tabla almacena informacioacuten comuacuten sobre una entidad en particular (recuerda los libros) Esta norma se conoce como normalizacioacutenLa mayor parte de la actividad producida en una base de datos se produce sobre las tablas siendo las principales tareas las siguientes
Antildeadir informacioacuten Eliminar informacioacuten Modificar y actualizar informacioacuten Recoger informacioacuten y mostrarla
132 Campos y registros
Las tablas estaacuten compuestas de registros y campos Si imaginamos el disentildeo de una tabla como si de una cuadriacutecula se tratase sabemos que estaacute compuesta por varias filas y columnas Las filas corresponden a los registros mientras que las columnas seriacutean los campos Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo (columna) formariacutea una celda la cual almacena un valor
Por lo tanto un registro esta formado por varios campos y cada campo almacena un determinado valor
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 6
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
DESARROLLO DE CONTENIDOS
CAPIacuteTULO I
IDENTIFICAR LA ESTRUCTURA DE UNA BASE DE DATOS CON
OBJETOS QUE LA COMPONEN
11 Definicioacuten
111 Definicioacuten de base de datosUna base de datos es una entidad en la cual se pueden almacenar gran cantidad de datos de manera estructurada para luego poderlos recuperarlas posteriormente
112 EntidadEn bases de datos una entidad es la representacioacuten de un objeto o concepto del mundo real que se describe en una base de datosPor ejemplo nombres de entidades pueden ser Alumno Empleado Artiacuteculo etc1121 Entidades fuertes Una entidad fuerte es aquella que puede ser identificada uniacutevocamente sin participar en la relacioacuten Ejemplo cliente vehiacuteculo1121 Entidades deacutebiles Es aquella que no puede participar sin existir en la relacioacuten Ejemplo Factura viaje a la entidad deacutebil se le representa con doble rectaacutengulo
12 Estructura fiacutesicaUna base de datos se almacena en varios ficheros o archivos en disco Como miacutenimo existen dos archivos donde podremos guardar la base de datos
Archivo de datos Archivo de registro de transacciones
El archivo de datos o aquellos que antildeadimos como extras son los archivos que tendraacuten almacenada la informacioacutenPor otro lado tenemos el archivo de registro de transacciones Este fichero es tan importante como el anteriorEl nombre de una base de datos parte de una principal definida por el administrador y a partir de ese nombre principal sql server antildeade
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 5
terminaciones y extensiones a ese nombre principal ademaacutes como administrador puedo elegir el lugar donde se almacenaraacute la base de datosEjemplo si soy administrador de una base de datos y quiero crear una base de datos llama uta los archivos que se creariacutean son los siguientes
Archivo de datos miEmpresa_DataMDF Archivo de registro de transacciones miEmpresa_LogLDF
En caso de tener archivos extras nosotros como administradores tambieacuten podremos darles su nombre principal y la extensioacuten que suele utilizarse es NDFComo administradores tambieacuten puedo seleccionar el lugar de almacenamiento en una determinada carpeta o directorio incluso diferentes unidades fiacutesicasNo debes quedarte con la idea de que una base de datos se compone sencillamente de dos archivos es algo mucho maacutes completo que todo eso lo que representa una base de datos como entidad121 Tamantildeo de la base de datos
Al crear una base de datos con SQL server no es necesario separar una gran cantidad de memoria ya que los archivos de datos y registro crecen automaacuteticamente el administrador de la base de datos le da un tamantildeo inicial una cantidad muy pequentildea en Megabytes una vez que se utilice la base de datos y alcance el tamantildeo maacuteximo se incrementa13 Estructura loacutegicaEs el esqueleto o armazoacuten conceptual estaacute constituido por abstracciones de la realidad para enfocarse en el aacutembito conceptual sin entrar en detalles fiacutesicos Entre los elementos que conforman la estructura loacutegica de una base de datos podemos destacar131 TablasLas tablas son las unidades que almacenan los datos Como norma general se suele imponer que cada tabla almacena informacioacuten comuacuten sobre una entidad en particular (recuerda los libros) Esta norma se conoce como normalizacioacutenLa mayor parte de la actividad producida en una base de datos se produce sobre las tablas siendo las principales tareas las siguientes
Antildeadir informacioacuten Eliminar informacioacuten Modificar y actualizar informacioacuten Recoger informacioacuten y mostrarla
132 Campos y registros
Las tablas estaacuten compuestas de registros y campos Si imaginamos el disentildeo de una tabla como si de una cuadriacutecula se tratase sabemos que estaacute compuesta por varias filas y columnas Las filas corresponden a los registros mientras que las columnas seriacutean los campos Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo (columna) formariacutea una celda la cual almacena un valor
Por lo tanto un registro esta formado por varios campos y cada campo almacena un determinado valor
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 6
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
terminaciones y extensiones a ese nombre principal ademaacutes como administrador puedo elegir el lugar donde se almacenaraacute la base de datosEjemplo si soy administrador de una base de datos y quiero crear una base de datos llama uta los archivos que se creariacutean son los siguientes
Archivo de datos miEmpresa_DataMDF Archivo de registro de transacciones miEmpresa_LogLDF
En caso de tener archivos extras nosotros como administradores tambieacuten podremos darles su nombre principal y la extensioacuten que suele utilizarse es NDFComo administradores tambieacuten puedo seleccionar el lugar de almacenamiento en una determinada carpeta o directorio incluso diferentes unidades fiacutesicasNo debes quedarte con la idea de que una base de datos se compone sencillamente de dos archivos es algo mucho maacutes completo que todo eso lo que representa una base de datos como entidad121 Tamantildeo de la base de datos
Al crear una base de datos con SQL server no es necesario separar una gran cantidad de memoria ya que los archivos de datos y registro crecen automaacuteticamente el administrador de la base de datos le da un tamantildeo inicial una cantidad muy pequentildea en Megabytes una vez que se utilice la base de datos y alcance el tamantildeo maacuteximo se incrementa13 Estructura loacutegicaEs el esqueleto o armazoacuten conceptual estaacute constituido por abstracciones de la realidad para enfocarse en el aacutembito conceptual sin entrar en detalles fiacutesicos Entre los elementos que conforman la estructura loacutegica de una base de datos podemos destacar131 TablasLas tablas son las unidades que almacenan los datos Como norma general se suele imponer que cada tabla almacena informacioacuten comuacuten sobre una entidad en particular (recuerda los libros) Esta norma se conoce como normalizacioacutenLa mayor parte de la actividad producida en una base de datos se produce sobre las tablas siendo las principales tareas las siguientes
Antildeadir informacioacuten Eliminar informacioacuten Modificar y actualizar informacioacuten Recoger informacioacuten y mostrarla
132 Campos y registros
Las tablas estaacuten compuestas de registros y campos Si imaginamos el disentildeo de una tabla como si de una cuadriacutecula se tratase sabemos que estaacute compuesta por varias filas y columnas Las filas corresponden a los registros mientras que las columnas seriacutean los campos Y cada una de las celdas que se forman de enlazar un registro (fila) con un campo (columna) formariacutea una celda la cual almacena un valor
Por lo tanto un registro esta formado por varios campos y cada campo almacena un determinado valor
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 6
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
133 IacutendicesUn iacutendice es un conjunto de valores clave el iacutendice guarda el elemento que desea indexar y la posicioacuten en la base de datosLos valores claves de los iacutendices pueden almacenar el contenido de una o varias columnas de una tabla134 VistasEs un conjunto de registros determinados de una o varias tablas se trabaja sobre ella como si fuera una tabla pero no lo es una vista no almacena datos si no que los extrae y permite trabajar con datos de varias tablas como si fuera una sola135 SQLSignifica lenguaje de consulta estructurado permite el acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones14 Planificacioacuten ndash disentildeo141- Identificar el objetivo de la base de datosConsiste en un diaacutelogo intenso para averiguar expliacutecitamente que es lo que quiere el cliente142 Revisioacuten datos existentesUna gran herramienta para iniciar una aplicacioacuten es ver documetacioacuten sobre los datos existentes Hojas de caacutelculo albaranes facturas documentacioacuten en generalUna forma que ayuda mucho en la primera parte del desarrollo es mirar las necesidades del cliente iniciando por el final Por ejemplo si analizamos un informe de ventas que nos proporcione el cliente podemos ver mucha informacioacuten incluso la forma de relacionar las tablas Sabremos tambieacuten si estos datos hay que agruparlos por ejemplo por vendedor o por poblacioacuten Esto nos ayudaraacute a saber queacute campos y tablas necesitaremos para conseguir el objetivo final que se muestra en el informe del clienteCuanta maacutes informacioacuten se pueda recabar maacutes faacutecil seraacute dar los primeros pasos y acercarse desde el principio al disentildeo maacutes correcto posible Para evitar un trabajo suplementario y correcciones innecesarias hazlo bien la primera vez143 Modelado de la base de datos1431 Paso al SGBDLlave principal Es un campo o a una combinacioacuten de campos que identifica de forma uacutenica a cada fila de una tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 7
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Llave foraacutenea Identifica una columna o grupo de columnas que se refiere a una columna o grupo de columnas en otra tablaRelaciones uno a unoEn una relacioacuten uno a uno una fila de la tabla A no puede tener maacutes de una fila coincidente en la tabla B y viceversa Se crea una relacioacuten uno a uno si las dos columnas relacionadas son claves principales Relaciones uno a variosUna relacioacuten uno a varios es el tipo maacutes habitual de relacioacuten En este tipo de relacioacuten una fila de la tabla A puede corresponderse con muchas filas de la tabla B pero una fila de la tabla B soacutelo puede corresponderse con otra de la tabla A Por ejemplo en las tablas (editoriales) y (tiacutetulos) se da una relacioacuten uno a varios una editorial publica muchos tiacutetulos pero a cada tiacutetulo le corresponde soacutelo una editorialEn una relacioacuten uno a varios solamente una de las columnas relacionadas es la clave principal o tiene una restriccioacuten uniqueRelaciones Varios a VariosEn una relacioacuten varios a varios una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa Este tipo de relaciones se crea definiendo una tercera tabla denominada tabla de unioacuten cuya clave principal esteacute constituida por las claves externas de las tablas A y B Por ejemplo entre las tablas (autores) y (tiacutetulos) existiriacutea una relacioacuten varios a varios definida por una relacioacuten uno a varios entre cada una de ellas y la tabla (tiacutetuloautor) La clave principal de la tabla es la combinacioacuten de la columna au_id (la clave principal de la tabla autores) y la columna title_id (la clave principal de la tabla tiacutetulos)1432 Modelo entidad relacioacuten
1433 EjerciciosSupongamos que queremos disentildear una base de datos para una biblioteca y hemos conocido que eacutesta funciona de la siguiente formaEn la biblioteca se encuentra como es natural una serie de libros que los empleados solicitan a las editoriales Cuando un libro se recibe se le da de alta construyeacutendole una ficha para buacutesqueda por autor y otra ficha para buacutesqueda por tema En ambas fichas aparecen el tiacutetulo del libro el nombre del autor y su nacionalidad la editorial a la que pertenece la publicacioacuten el tema sobre el que trata el ISBN y la estanteriacutea de la biblioteca en la que se encuentra Un empleado puede solicitar un libro escribiendo una carta de
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 8
Entidades
Relaciones
Conectores
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
peticioacuten a la editorial correspondiente La direccioacuten a la que se a de dirigir la carta se encuentra en el archivo de editoriales Para acceder a los libros de la biblioteca es necesario la posesioacuten de un carnet que acredita a los distintos usuarios Este carnet se confecciona a cada persona la primera vez que intenta retirar un libro Cada usuario puede tener retirado un libro en un momento determinadoEn la biblioteca les gustariacutea disponer de un listado que se lanzariacutea al final de cada diacutea y en el que apareceriacutea para cada libro que se encuentra retirado el tiacutetulo el ISBN el autor y el nuacutemero de carnet nombre y la ceacutedula del usuario que lo mantiene retiradoCuando un usuario intente retirar un libro ha de presentar su carnet para que se tome nota de la retirada Si el libro que desea ha sido retirado por otro usuario se llama a eacuteste por teleacutefono indicaacutendole que hay otro usuario que desea el libro para que lo devuelva en caso de que no lo esteacute utilizandoMensualmente se confecciona un inventario actualizado donde se indica para cada libro el nombre el autor y el lugar de la biblioteca donde se encuentra
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 9telefononombrecedula
carnet
USUARIO
1
m 1
editado
DireccioacutenNombre
EDITORIAL
n
NACIONALIDNOMB
CODAUTO
AUTOR
TEMA
TITULO
ISBN
LIBRO Situado en
nuacutemerorororo
lugarnestanteria
ESTANTERIA
1
escrito
escrito
m
1
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Problema 2 Artiacuteculos y encargosUna base de datos para una pequentildea empresa debe contener informacioacuten acerca de clientes artiacuteculos y pedidos Hasta el momento se registran los siguientes datos en documentos variosbull Para cada cliente Nuacutemero de cliente (uacutenico) Direcciones de enviacuteo (varias por cliente) Saldo Liacutemite de creacutedito (depende del cliente pero en ninguacuten caso debe superar los 3000000 pts) Descuentobull Para cada artiacuteculo Nuacutemero de artiacuteculo (uacutenico) Faacutebricas que lo distribuyen Existencias de ese artiacuteculo en cada faacutebrica Descripcioacuten del artiacuteculobull Para cada pedido Cada pedido tiene una cabecera y el cuerpo del pedido La cabecera estaacute formada por el nuacutemero de cliente direccioacuten de enviacuteo y fecha del pedido El cuerpo del pedido son varias liacuteneas en cada liacutenea se especifican el nuacutemero del artiacuteculo pedido y la cantidadAdemaacutes se ha determinado que se debe almacenar la informacioacuten de las faacutebricas Sin embargo dado el uso de distribuidores se usaraacute Nuacutemero de la faacutebrica (uacutenico) y Teleacutefono de contacto Y se desean ver cuaacutentos artiacuteculos (en total) provee la faacutebrica Tambieacuten por informacioacuten estrateacutegica se podriacutea incluir informacioacuten de faacutebricas alternativas respecto de las que ya fabrican artiacuteculos para esta empresaNota Una direccioacuten se entenderaacute como Nordm Calle Comuna y Ciudad Una fecha incluye horaSe pide hacer el diagrama ER para la base de datos que represente esta informacioacuten
Problema 2 () Sistema de ventas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 10
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Le contratan para hacer una BD que permita apoyar la gestioacuten de un sistema de ventas La empresa necesita llevar un control de proveedores clientes productos y ventasUn proveedor tiene un RUT nombre direccioacuten teleacutefono y paacutegina web Un cliente tambieacuten tiene RUT nombre direccioacuten pero puede tener varios teleacutefonos de contacto La direccioacuten se entiende por calle nuacutemero comuna y ciudadUn producto tiene un id uacutenico nombre precio actual stock y nombre del proveedor Ademaacutes seorganizan en categoriacuteas y cada producto va soacutelo en una categoriacutea Una categoriacutea tiene id nombre y descripcioacutenPor razones de contabilidad se debe registrar la informacioacuten de cada venta con un id fecha cliente descuento y monto final Ademaacutes se debe guardar el precio al momento de la venta la cantidad vendida y el monto total por el producto
Problema 3 CarreterasDisentildear un esquema ER que recoja la organizacioacuten de una base de datos para contener la informacioacuten sobre todas las carreteras del paiacutes sabiendo que se deben cumplir las siguientes especificaciones- Las carreteras estaacuten divididas en varias categoriacuteas (locales comerciales regionales nacionalesautoviacuteas etc)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 11
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
- Las carreteras se dividen en tramos Un tramo siempre pertenece a una uacutenica carretera y no puede cambiar de carretera- Un tramo puede pasar por varias comunas interesando conocer el Km de la carretera y la comuna donde empieza el tramo y en donde termina- Para los tramos que suponen principio o final de carretera interesa saber si es que la carreteraconcluye fiacutesicamente o es que confluye en otra carretera En este caso interesa conocer con queacutecarretera confluye y en queacute kiloacutemetro tramo y comunaProblema 4 Sistema de vuelosObtener el diagrama ER para un sistema de control de vuelos adaptado a las siguientes reglas degestioacuten (indicar las entidades interrelaciones etc que se deducen de cada una de las reglas)a) De cada aeropuerto se conoce su coacutedigo nombre ciudad y paiacutesb) En cada aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de un avioacutendetermina su capacidad es decir el nuacutemero de plazasc) En cada aeropuerto existe una coleccioacuten de programas de vuelo En cada programa de vuelo se indica el nuacutemero de vuelo liacutenea aeacuterea y diacuteas de la semana en que existe dicho vuelod) Cada programa de vuelo despega de un aeropuerto y aterriza en otroe) Los nuacutemeros de vuelo son uacutenicos para todo el mundof) En cada aeropuerto hay muacuteltiples aterrizajes y despegues Todos los aeropuertos contemplados estaacuten en activo es decir tienen alguacuten aterrizaje y alguacuten despegueg) Cada vuelo realizado pertenece a un cierto programa de vuelo Para cada vuelo se quiere conocer su fecha plazas vaciacuteas y el modelo de avioacuten utilizadoh) Algunos programas de vuelo incorporan escalas teacutecnicas intermedias entre los aeropuertos de salida y de llegada Se entiende por escala teacutecnica a un aterrizaje y despegue consecutivos sin altas oacute bajas de pasajerosi) De cada vuelo se quieren conocer las escalas teacutecnicas ordenadas asignaacutendole a cada una un nuacutemero de ordenPor ejemplo el programa de vuelo 555 de Iberia con vuelos los lunes y jueves despega de Barajas-Madrid-Espantildea y aterriza en Caudell-Sydney-Australia teniendo las siguientes escalas teacutecnicas 1- Los Pradintildeos-Sao Paulo-Brasil 2-El Emperador-Santiago-Chile y 3-Saint Kitts-Auckland-Nueva Zelanda1048576 iquestQue cambios se produciraacuten en el caso anterior si en las escalas pudiesen bajar o subir pasajerosExplicar coacutemo se podriacutea representar esta nueva situacioacutenProblema 5 () OlimpiacuteadasLas sedes oliacutempicas se dividen en complejos deportivos Los complejos deportivos se subdividen en aquellos en los que se desarrolla un uacutenico deporte y en los polideportivos Los complejos polideportivos tienen aacutereas designadas para cada deporte con un indicador de localizacioacuten (ejemplo centro esquina- NE etc) Un complejo tiene una localizacioacuten un jefe de organizacioacuten individual y un aacuterea total ocupada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 12
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Los dos tipos de complejos (deporte uacutenico y polideportivo) tendraacuten diferentes tipos de informacioacuten Para cada tipo de sede se conservaraacute el nuacutemero de complejos junto con su presupuesto aproximadoCada complejo celebra una serie de eventos (ejemplo la pista del estadio puede celebrar muchascarreras distintas) Para cada evento estaacute prevista una fecha duracioacuten nuacutemero de participantes nuacutemero de comisarios Una lista de todos los comisarios se conservaraacute junto con la lista de los eventos en los que esteacute involucrado cada comisario ya sea cumpliendo la tarea de juez u observador Tanto para cada evento como para el mantenimiento se necesitaraacute cierto equipamiento (ejemplo arcos peacutertigas barras paralelas etc)Problema 6 Educando SAEn la Empresa Educando SA se lleva control de sus Bienes y Servicios El intereacutes primario es poder hacer que los Bienes se manejen de forma raacutepida y con el menor grado de error Para esto quien maneja la seccioacuten de Bienes y Suministros plantea las siguientes condiciones del negocio para la construccioacuten de una base de datos10485761048576La Seccioacuten estaacute dividida en tres (3) aacutereas COMPRAS ALMACEN INVENTARIO10485761048576El aacuterea de Compras funciona de la siguiente formao Recibe las solicitudes de compras de las diferentes aacutereas de la empresao Cada solicitud tiene un responsableo Cada solicitud es autorizada por el jefe del aacuterea y posteriormente por el DirectorFinancieroo Quien realiza una solicitud puede ser responsable de uno o varios centros de costos conla salvedad de que eacutel como empleado solo estaacute adscrito a unoo De la solicitud se debe diligenciar la siguiente informacioacuten Nuacutemero de la solicitud (consecutivo) Fecha Responsable (nombre y ceacutedula) Centro de Costos Rubro presupuestal del cual se descargaraacute la compra En cada solicitud se pueden discriminar uno o muchos iacutetems con la siguiente informacioacuten iacutetem nombre del bien cantidad solicitada unidad de medida del bien valor unitario y valor total Cada solicitud debe ser totalizadao Cada bien es identificado por un coacutedigo universal que es uacutenico y es de caraacutecter devolutivo (suministro) o un bien inmuebleo Una vez diligenciada la solicitud es remitida al aacuterea de compras para realizar sucorrespondiente cotizacioacuteno Las cotizaciones son realizadas con uno o varios proveedores de los bienes solicitadoso Una vez la cotizacioacuten definitiva estaacute lista se crea una orden contractual que maneja lasiguiente informacioacuten Nuacutemero de la orden contractual nit y nombre del proveedor al cualse le va a realizar la compra fecha de la orden monto total de la orden fecha de entrega Cada orden puede tener asociado uno o varios iacutetems de la solicitud o solicitudes que van a ser despachadas Cada iacutetem tiene la siguiente informacioacuten nombre del bien cantidad solicitada cantidad despachada unidad de medida del bien valor unitario y valor total
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 13
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
o La orden de compra es aprobada por el Director Financiero para que sea enviada alproveedor elegido10485761048576El aacuterea de Almaceacuten funciona de la siguiente formao Su funcioacuten principal es recepcionar los bienes que llegan de los proveedores ydistribuirlos a las correspondientes aacutereas que realizaron las solicitudes de compraso Cuando llega un proveedor mercanciacutea este hace una entrega fiacutesica de los bienes loscuales son comparados con la factura que este entrega y con la orden de compracorrespondiente Si esta accioacuten es correcta se registra una entrada de almaceacuten por cadafactura relacionada con la siguiente informacioacuten Nuacutemero de Entrada Fecha Nuacutemero defactura Proveedor Total Bienes Valor Total (los totales deben coincidir con los de lafactura) Adjunto a esta se discriminan los iacutetems recibidos con la siguiente informacioacutennombre del bien cantidad entregadao Cuando el almaceacuten decide despachar los bienes a las diferentes aacutereas solicitantesregistra cada una de las entregas en Salidas de Almaceacuten con la siguiente informacioacutenNuacutemero de Salida Empleado responsable del bien a entregar fecha de salida fecha deentrega Por cada entrega se detalla cada uno de los iacutetems con la siguiente informacioacutennombre del bien cantidad entregadao Una entrada de almaceacuten puede generar muchas salidas de almaceacuten por ejemplo Pueden ingresar 500 pacas de papel higieacutenico pero como se debe repartir entrevarias aacutereas cada una requiere de una salida de almaceacuten10485761048576El aacuterea de inventarios funciona de la siguiente formao Es la encargada de administrar y controlar la ubicacioacuten de los bienes dentro de laempresa por esto antes de que el bien salga del almaceacuten debe ser codificado a traveacutesde un coacutedigo uacutenico que lo haga identificable dentro de la empresao La ubicacioacuten del bien se identifica por la siguiente informacioacuten responsable del bienfecha de entrega direccioacuten del bien (ubicacioacuten)Disentildear modelo ER para la base de datosProblema 7 Torneo de Tenis Grand SlamEl sistema debe memorizar todos los encuentros que se han desarrollado desde que existe el torneo asiacute como las siguientes caracteriacutesticas de estosDescripcioacutenEl Grand Slam se compone de cuatro torneos anuales que se celebran en Gran Bretantildea Estados Unidos Francia y Australia En cada paiacutes se pueden
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 14
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
desarrollar en distintos lugares (p ej en EE UU Puede desarrollarse en Forest Hill o en Flashing Meadows)Cada partido tiene asociado un premio de consolacioacuten para el perdedor que dependeraacute de la fase en que se encuentre el torneo (p ej el perdedor de octavos de final puede ganar 5000 doacutelares) El ganador de a final recibiraacute el premio correspondiente al torneoCada torneo tiene cinco modalidades Individual masculino individual femenino dobles masculino dobles femenino y dobles mixtosTambieacuten hay que tener en cuenta la nacionalidad de un jugador de forma que acuteeste puede ser apaacutetrida o tener varias nacionalidadesResultados a considerarEl sistema debe dar respuesta a las siguientes preguntas1 Dado un antildeo y un torneo composicioacuten y resultado de los partidos2 Lista de aacuterbitros que participaron en el torneo3 Ganancias percibidas en premios por un jugador a lo largo del torneo4 Lista de entrenadores que han entrenado a un jugador a lo largo del torneo y fechas en las que lo hizo Ejemplos de acceso a la base de datos1 Connors gano Gerulaitis en Roland Garros en 1979 en cuartos de final en individuales masculinos por6-3 4-67-5 6-02 El sentildeor Wilkinson arbitro ese partido3 Alemania ha ganado dos veces las individuales masculinas de Wimbledon Borg ha ganado 2000000de doacutelares a lo largo de su participacioacuten en el Grand Slam4 El ganado de Roland Garros de 1987 ganoacute 20000 doacutelares5 Noah ha jugado cuatro veces en dobles mixtos con MandlikovaProblema 8Se desea crear un sitio web con informacioacuten referente a las peliacuteculas en cartel en las salas de un dudoso cine cercano a la plaza de armasDe cada peliacutecula se almacena una ficha con su tiacutetulo de distribucioacuten su tiacutetulo original su geacutenero el idioma origina si tiene subtiacutetulos en espantildeol o no los paises de origen el antildeo de la produccioacuten la url del sitio web de la peliacutecula la duracioacuten (en horas y minutos) la calificacioacuten (Apta todo puacuteblico+9 antildeos +15 antildeos+18 antildeos) fecha de estreno en Santiago un resumen y un identificador de la peliacutecula De cada peliacutecula interesa conocer la lista de directores y el reparto es decir para cada actor que trabaja el nombre de todos los personajes que interpretaAdemaacutes interesa disponer de informacioacuten sobre los directores y actores que trabajan en cada peliacutecula De ambos se conoce su nombre (que lo identifica) y su nacionalidad Ademaacutes se desea conocer la cantidad de peliacuteculas en las que dirigieron o actuaron Tenga en cuenta que hay personas que cumplen los dos rolesLos cines pueden tener maacutes de una sala y cada semana cada uno de los cines enviacutea la cartelera para dicha semana indicando de detalle de las funciones Para cada funcioacuten se conoce el diacutea de la semana y la hora de comienzo y obviamente la sala y la peliacutecula que exhibe De cada sala se sabe el nombre un nuacutemero que la identifica dentro del cine y la cantidad de butacas que posee De cada cine se conoce el nombre que lo identifica su direccioacuten y teleacutefono para consultas
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 15
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Algunos cines cuentan con promociones Estas promociones dependen de la funcioacuten (Ej De lunes a jueves antes de las 18 50 de descuento en la sala tal del cine tal para la peliacutecula cualLa funcioacuten del lunes a las 14 para la peliacutecula tal en la sala cual no se cobra a los escolares con tuacutenica ) De cada promocioacuten se conoce una descripcioacuten y el descuento que aplicaAdemaacutes del resumen de la peliacutecula que se incluye en la ficha interesa mostrar la opinioacuten de las personas que vieron la peliacutecula De cada opinioacuten se conoce el nombre de la persona que la realiza su edad le fecha en que registroacute su opinioacuten la calificacioacuten que le dio a la peliacutecula (Obra Maestra Muy BuenaBuena Regular Mala) y el comentario propiamente dicho A cada opinioacuten se le asigna un nuacutemero que la identifica respecto de la peliacutecula sobre la cual opina
15 Normalizacioacuten151 Primera forma normalUna tabla estaacute en Primera Forma Normal si
Todos los atributos son atoacutemicos Un atributo es atoacutemico si los elementos del dominio son indivisibles miacutenimos
La tabla contiene una llave primaria uacutenica La llave primaria no contiene atributos nulos No debe existir variacioacuten en el nuacutemero de columnas Los Campos no llave deben identificarse por la llave (Dependencia
Funcional) Debe Existir una independencia del orden tanto de las filas como de las
columnas es decir si los datos cambian de orden no deben cambiar sus significados
Una tabla no puede tener muacuteltiples valores en cada columna Los datos son atoacutemicos (Si a cada valor de X le pertenece un valor de Y y viceversa)Esta forma normal elimina los valores repetidos dentro de una BD
152 Segunda Forma Normal (2FN)
Dependencia Funcional Una relacioacuten estaacute en 2FN si estaacute en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal Es decir que no existen dependencias parciales (Todos los atributos que no son clave principal deben depender uacutenicamente de la clave principal)
En otras palabras podriacuteamos decir que la segunda forma normal estaacute basada en el concepto de dependencia completamente funcional Una dependencia funcional es completamente funcional si al eliminar los atributos A de X significa que la dependencia no es mantenida esto es que Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados
de X y la dependencia todaviacutea se mantiene esto es
Por ejemplo DNI ID_PROYECTO HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto sabemos cuaacutentas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 16
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
HORAS_TRABAJO mantienen la dependencia Sin embargo DNI ID_PROYECTO NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia
153 Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave
Un ejemplo de este concepto seriacutea que una dependencia funcional X-gtY en un esquema de relacioacuten R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R donde se mantiene X-gtZ y Z-gtY
Por ejemplo la dependencia SSN-gtDMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva viacutea DNUMBER porque las dependencias SSNrarrDNUMBER y DNUMBERrarrDMGRSSN son mantenidas y DNUMBER no es un subconjunto de la clave de EMP_DEPT Intuitivamente podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT
Formalmente un esquema de relacion estaacute en 3 Forma Normal Elmasri-Navathe[2] si para toda dependencia funcional se cumple al menos una de las siguientes condiciones
es superllave o clave
es atributo primo de esto es si es miembro de alguna clave en
Ademaacutes el esquema debe cumplir necesariamente
Ejemplo
Id estudiante Ci Nombres Apellidos Curso Materia Descripicoacuten01 1803327418 Fransico
FabianCamacho Saltos
4 En Ingeacutes
02 10152465 Carlos Banabeti
Ruales Camacho
5 ES Espantildeol
03
1 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 17
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
2 forma normal
Id estudiante
Ci Pnombre snombre Apellido paterno
Apellido materno
Curso Materia Descripicoacuten
01 1803327418 Fransisco Fabiaacuten Camacho
Saltos 4 En Ingeacutes
02 10152465 Carlos Benabeti Ruales Camacho 5 ES Espantildeol03
Id Curso Curso01 Primero02 SegundoId Materia Materia Descripcioacuten01 En Ingleacutes02 MT Matemaacutetica
3 era forma normal
Iddescripcion DescripcioacutenIngleacutesMatemaacutetica
Dada la siguiente tabla normalizarlaIDcliente Ceacutedula Nombres Direccioacuten Proveedor Producto
16 Herramientas para la normalizacioacuten
A continuacioacuten se mencionan algunas herramientas para normalizar una base de datos mediante un proceso automatizado
CAPIacuteTULO IIRealizar diferentes tareas de disentildeo y planificacioacuten sobre la
estructura de tablas
21 Tabla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 18
Id Materia Materia01 En02 MT
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Es un conjunto de datos ordenados en filas y columnas
22 Tipos de datossql_variant Puede usarse en columnas paraacutemetros variables y valores devueltos de funciones definidas por el usuariosql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datosxml Capaz de almacenar documentos XML oacute fragmentos XML que es posible utilizar tanto en variables como en campos de tablas y que a diferencia de otros tipos de datos ofrece meacutetodos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 19
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 20
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
23 Creacioacuten de tablasAntes de aprender sobre la creacioacuten de tablas es necesario conocer los pasos para crear una base de datos en sql server 2008Para crear una base de datos en SQL Server 2008 debemos seguir los siguientes pasos1- Ingresar a SQLServer
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 21
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
2- En la ventana que nos aparece realizamos clic derecho en donde dice database
3- Nos aparece el siguiente menuacute hacemos clic donde dice New Database
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 22
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
4- Nos aparece la siguiente ventana
En donde dice Database Name le damos un nombre a la base de datos
5- Luego hacemos clic en
Nos aparece la siguiente ventana
Aquiacute tenemos dos opciones In percent nos permite que si sobrepasa el tamantildeo de la base de datos crezca en porcentajeIn Megabytes nos permite hacer que la base de datos crezca de 1 Megabyte en 1 megabyte si sobrepasa el tamantildeo y listoAhora para crear una tabla seguimos los siguientes pasos1- Hacemos clic en donde dice database buscamos el nombre de nuestra base de datos en la seccioacuten tables realizamos clic derecho con el botoacuten secundario del mouse
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 23
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Nos aparece el siguiente menuacute
Hacemos clic en New Table
Y en donde dice Column Name vamos poniendo los campos de las bases de datos con su respectivo tipoAl final hacemos clic en donde estaacute el iacutecono de un diskette nos aparece una ventana pidiendo el nombre de la tabla le asignamos un nombre y realizamos clic en el botoacuten ok24 Creacioacuten de RestriccionesUna restriccioacuten es una condicioacuten que obliga el cumplimiento de ciertas condiciones en la base de datos Algunas no son determinadas por los usuarios sino que son inherentemente definidas por el simple hecho de que la base de datos sea relacional Algunas otras restricciones las puede definir el usuario por ejemplo usar un campo con valores enteros entre 1 y 10
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 24
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Las restricciones proveen un meacutetodo de implementar reglas en la base de datos Las restricciones restringen los datos que pueden ser almacenados en las tablas Usualmente se definen usando expresiones que dan como resultado un valor booleano indicando si los datos satisfacen la restriccioacuten o noLas restricciones no son parte formal del modelo relacional pero son incluidas porque juegan el rol de organizar mejor los datos Las restricciones son muy discutidas junto con los conceptos relacionalesPueden crearse los siguientes tipos de restricciones Las restricciones unique y primary key exigen que no haya dos filas en una tabla con los mismos valores en las columnas especificadas Ademaacutes la restriccioacuten primary key requiere que no haya valores nulos en ninguna fila de la columna
241 Crear una restriccioacuten PRIMARY KEYPara crear una restriccioacuten Primary Key realizamos clic en el campo donde
queremos crear la restriccioacuten y luego realizamos clic en el iacutecono 242 Crear una restriccioacuten UNIQUEPara crear una restriccioacuten UNIQUE realizamos clic en el campo donde queremos crear dicha restriccioacuten y luego escogemos el menuacute Table Designe y luego en IndexesKeys
Nos aparece la siguiente ventana en donde dice Type escogemos Unique Key
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 25
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Realizamos clic en close y guardamos la tabla
La integridad de referencia ( references ) exige que los datos insertados en columnas especiacuteficas ya tengan datos coincidentes en la tabla y columnas especificadas Las restricciones check limitan los valores de datos insertados en las columnas
243 Agregar una restriccioacuten CHECKRealizamos clic derecho dentro del explorador de objetos en la seccioacuten tables buscamos el nombre de la tabla y buscamos constraints realizamos clic derecho con el botoacuten secundario del mouse y escogemos New Constraint
Nos apareced la siguiente ventana
|
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 26
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Realizamos clic en este botoacuten para poder editar la expresioacuten que queremos que tenga restricciones
En la ventana que nos aparece ponemos la expresioacuten deseada y realizamos clic en el botoacuten Ok
Para poder editar la tabla y verificar los cambios realizados buscamos en el explorador de objetos el nombre de la tabla realizamos clic derecho y escogemos la opcioacuten Edit Top 200 Rows
Y procedemos a ingresar datos para probarTambieacuten se puede imponer la integridad de datos restringiendo el uso de valores nulos en una columna (las palabras clave null o not null ) y proporcionando valores predeterminados para columnas (la claacuteusula default )
25 Diagramas de bases de datosLos diagramas de bases de datos se utiliza para visualizar las tablas graacuteficamente y para poder establecer las relaciones
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 27
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Para crear un diagrama hacemos clic en el explorador de objetos hacemos clic en el nombre de la base de datos y escogemos Database Diagrams hacemos clic derecho escogemos new Database Diagrams
Nos aparece el siguiente mensaje realizamos un clic dentro del botoacuten Yes
Volvemos hacer clic derechos y volvemos a escoger New Data Base Diagram
Aparece la siguiente ventana en pantalla
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 28
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Seleccionamos todas y escogemos AddNos aparece la siguiente ventana
En el caso de tener una relacioacuten muchos a muchos debemos romper la relacioacuten con una tercera tabla para esto desde el mismo Database Diagram hacemos clic derecho en un lugar en blanco y escogemos new table llenos las columnas con los campos y tipos de datos respectivosDebemos tomar en cuenta que en las tablas a donde va la relacioacuten tiene que tener su respectiva llave foraacutenea y para poder establecer la relacioacuten
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 29
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
arrastramos desde el campo principal hacia la llave foraacutenea es decir de la tabla padre a la hijaQuedando las relaciones asiacute
Finalmente cerramos la base de datos nos aparece la siguiente ventana
pidiendo guardar el Database Diagram le demos un nombre y realizamos clic
en el botoacuten OK
252 Ejercicios
Los diagramas del ejercicio 1 y 2 del capiacutetulo anterior pasar al modelo
relacional en SQLSERVER 2008
Los ejercicios 5 y 6 los ejercicios de la prueba pasarlos a sql server
Transformar el siguiente modelo entidad relacioacuten al modelo relacional
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 30
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
CAPIacuteTULO III
Aplicar las diferentes sentencias y modos en lenguaje SQL
para tratamiento de la informacioacuten almacenada en las
diferentes tablas de la base de datos
31 Lenguaje de definicioacuten de datosLas sentencias DDL son CREATE ALTER y DROP Siempre se usan estas
sentencias junto con el tipo de objeto y el nombre del objeto
CREATE
Crea una base de datos o un objeto
Sintaxis
Create database nombre on grupo_base de datos filegroup
Ejemplo
USE mastergoIF DB_ID (Ncalificaciones) IS NULL BEGIN create database calificaciones on primary( name = calificaciones filename = Ccalificacionescalificacionesmdf
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 31
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
size = 3 Mb maxsize = unlimited )
log on ( name = calificacione_log filename = cCalificacionescalificacionesldf size = 1 Mb maxsize = unlimited ) ENDElseBegin print La base ya existeEndGo
Uso de create para crear una tabla
Sintaxis
CREATE TABLE table_name ( lt column_definition gt | lt table_constraint gt [ n ] ) Ejemplos
Use calificacionesgoCreate table alumno
( codalumno char(3) NOT NULL PRIMARY KEY cedula varchar(11) NOT NULL UNIQUE nombre varchar(30) NULL apellido varchar (30) NULL )Go
UseALTERModifica la estructura de una base de datos o de un objetoSintaxisAlter Objeto Modify propiedaduse mastergoALTER DATABASE notas SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE notas MODIFY NAME = calificacionesGOALTER DATABASE calificaciones
SET MULTI_USERGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 32
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
use calificacionesAlter table alumno add direccion varchar(30)go use calificacionesgoalter table alumno alter column nombre varchar(40)go
DROPElimina una base de datos o un objetoLos permisos necesarios para ejecutar estas sentencias sonPertenecer al roles sysadmin o dbcreator y db_owner o a db_ddladminRoles de Servidor Descripcioacuten
Sysadmin Puede realizar cualquier actividad en SQL
Server
Dbcreator Puede crear modificar y borrar una base de
datos
Rol de base de datos Descripcioacuten
db_owner Tiene todos los permisos en la base de datos
db_ddladmin Puede usar todas las sentencias DDL pero no
usar GRANT REVOKE o DENY
Es recomendable no utilizar diferentes cuentas para ejecutar sentencias DDL ya que el performance de SQL Server se ve degradado por eso es mucho mejor si todos los objetos tienen el mismo owner si en cambio se tienen objetos con diferentes owners como por ejemplo el de una vista y una tabla SQL Server debe de validar los permisos para ambos antes de que el usuario pueda acceder a la vista32 Lenguaje de control de datosDespueacutes de utilizar las sentencias DDL para crear objetos la siguiente tarea es asegurarlos Las sentencias DCL asignan permisos a usuarios en especiacutefico o a roles de bases de datos
GRANTAsigna permisos a usuarios o roles para poder acceder a una base de datos o ejecutar sentencias SQLDENYEvita que un usuario o role ingrese a una base de datos o alguno de sus objetos o de ejecutar una o varias sentencias SQLREVOKE
33 Lenguaje de manipulacioacuten de datosAhora que hemos creado objetos mediante sentecias DDL y asignado permisos sobre estos objetos con sentencias DCL ahora vamos a ver como trabajar con estos objetos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 33
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
SELECTDespliega informacioacuten de una o varias tablasUPDATEModificar uno o maacutes registros de una tablaDELETEEliminar uno o maacutes registros de una tablaPor default solo los miembros de sysadmin o dbcreator db_owner db_datawriter o db_datareader pueden ejecutar sentencias DML pero como se vio con las sentencias DCL estos permisos puede ser otorgados a usuarios en especiacutefico
INSERT INTO Me permite ingresar datos en una tabla
UNION Para unir tablas34 Caracteriacutesticas de la programacioacuten
Estructuras de control en Transact SQLEstructura condicional IFLa estuctura condicional IF permite evaluar una expresion booleana (resultado SI - NO) y ejecutar las operaciones contenidas en el bloque formado por BEGIN END
IF (ltexpresiongt) BEGIN
END
ELSE IF (ltexpresiongt) BEGIN
ENDELSE
BEGIN
END
Ejemplo de la estructura condicional IF
DECLARE Web varchar(100) diminutivo varchar(3)
SET diminutivo = DJK
IF diminutivo = DJK
BEGIN PRINT wwwdevjokercom
END ELSE
BEGIN PRINT Otra Web (peor)
END
La estructura IF admite el uso de subconsultas
DECLARE coPais intdescripcion varchar(255)set coPais = 5
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 34
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
set descripcion = EspantildeaIF
EXISTS(SELECT FROM PAISES WHERE CO_PAIS = coPais)
BEGINUPDATE PAISES
SET DESCRIPCION = descripcionWHERE CO_PAIS = coPais
ENDELSE
BEGININSERT INTO PAISES
(CO_PAIS DESCRIPCION) VALUES(coPais descripcion)
END
Estructura condicional CASELa estructura condicional CASE permite evaluar una expresion y devolver un valor u otroLa sintaxis general de case es
CASE ltexpresiongt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltvalor_expresiongt THEN ltvalor_devueltogt ELSE ltvalor_devueltogt -- Valor por defecto
END
Ejemplo de CASE DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE diminutivo WHEN DJK THEN wwwdevjokercom WHEN ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
Otra sintaxis de CASE nos permite evaluar diferentes expresiones
CASE WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt WHEN ltexpresiongt = ltvalor_expresiongt THEN ltvalor_devueltogt
ELSE ltvalor_devueltogt -- Valor por defecto
END
El mismo ejemplo aplicando esta sintaxis DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN wwwdevjokercom WHEN diminutivo = ALM THEN wwwaleamediacom
ELSE wwwdevjokercom END)
PRINT Web
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 35
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Otro aspecto muy interesante de CASE es que permite el uso de subconsultas DECLARE Web varchar(100)
diminutivo varchar(3) SET diminutivo = DJK
SET Web = (CASE
WHEN diminutivo = DJK THEN (SELECT web FROM WEBS WHERE id=1) WHEN diminutivo = ALM THEN (SELECT web FROM WEBS WHERE id=2)
ELSE wwwdevjokercom END)
PRINT Web
Bucle WHILE
El bucle WHILE se repite mientras expresion se evalue como verdaderoEs el uacutenico tipo de bucle del que dispone Transact SQL
WHILE ltexpresiongt BEGIN END
Un ejemplo del bucle WHILE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1
PRINT Iteracion del bucle + cast(contador AS varchar) END
Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
DECLARE contador int SET contador = 0
WHILE (contador lt 100) BEGIN
SET contador = contador + 1IF (contador 2 = 0)
CONTINUE PRINT Iteracion del bucle + cast(contador AS varchar)
END
El bucle se dejaraacute de repetir con la instruccioacuten BREAK
DECLARE contador int SET contador = 0 WHILE (1 = 1)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 36
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
BEGIN SET contador = contador + 1
IF (contador 50 = 0) BREAK
PRINT Iteracion del bucle + cast(contador AS varchar) END
Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
DECLARE coRecibo int WHILE EXISTS (SELECT FROM RECIBOS
WHERE PENDIENTE = S)-- Ojo la subconsulta se ejecuta -- una vez por cada iteracion
-- del bucle BEGIN
SET coRecibo = (SELECT TOP 1 CO_RECIBO FROM RECIBOS WHERE PENDIENTE = S)
UPDATE RECIBOS SET PENDIENTE = N
WHERE CO_RECIBO = coRecibo END
Estructura GOTO
La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de erroresActualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
DECLARE divisor int dividendo int resultado int SET dividendo = 100 SET divisor = 0
SET resultado = dividendodivisor
IF ERROR gt 0 GOTO error
PRINT No hay error
RETURNerror
PRINT Se ha producido una division por cero
35 Funciones351 Sum La funcioacuten sum() retorna la suma de los valores que contiene el
campo especificado Si queremos saber la cantidad total de libros que tenemos
disponibles para la venta debemos sumar todos los valores del campo
cantidad
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 37
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Sintaxis
Sum (valores a sumar)
Ejemplo
select sum(cantidad) from libros
352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se
puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
Count (Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT101) WITH NOWAITSELECT COUNT(PRICE) as CuentaFROM T1 RAISERROR(Contar los valores Distinto con COUNT101) WITH NOWAITSELECT COUNT(DISTINCT PRICE) as Cuenta_DistintaFROM T1
353 COUNTBIG
Igual que COUNT pero regresa un BIGINT
Sintaxis
CountBig( Valores a contar)
Ejemplo
RAISERROR(Contar los valores con COUNT_BIG Regrasa un BIGINT101) WITH NOWAITSELECT COUNT_BIG(PRICE) as Cuenta_BIGINTFROM T1354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintosSintaxisAVG(Valores)
Ejemplo
RAISERROR(El promedio101) WITH NOWAITSELECT AVG(PRICE) as PromedioFROM T1 RAISERROR(El promedio por categoria101) WITH NOWAITSELECT CATEGORY
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 38
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
AVG(DISTINCT PRICE) as Promedio_por_CategoriaFROM T1GROUP BY CATEGORY
354 Min
Regresa el valor miacutenimo de todos los valores del SELECT
Sintaxis
Min (Valores)
Ejemplo
RAISERROR(El valor minimo en la tabla101) WITH NOWAITSELECT MIN(PRICE) as MinimoFROM T1
355 MAX
Regresa el Valor maacuteximo de todos los valores del SELECT
Ejemplo
RAISERROR(El valor Maximo en la tabla101) WITH NOWAITSELECT MAX(PRICE) as MaximoFROM T1
356 STDEV
Regresa la desviacioacuten estaacutendar de una muestra de todos los valores del SELECT
Sintaxis
Stdev(valores)
Ejemplo
RAISERROR(Calcular la desviacioacuten estandar de los valores en la tabla101) WITH NOWAITSELECT STDEV(PRICE) as DesviacioacutenEstandarFROM T1
357 STDEVP
Regresa la desviacioacuten estaacutendar de todos los valores del SELECT
Sintaxis
Stdevp(valores)
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 39
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
RAISERROR(Calcular la desviacioacuten estandar P de los valores en la tabla101) WITH NOWAITSELECT STDEVP(PRICE) as DesviacioacutenEstandarPFROM T1
357 VAR
Regresa la variacioacuten de una muestra de todos los valores del SELECT
Sintaxis
Var(valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten de los valores en la tabla101) WITH NOWAITSELECT VAR(PRICE) as VariacioacutenFROM T1
358 VARP
Regresa la variacioacuten de todos los valores del SELECT
Sintaxis
Varp (Valores)
Ejemplo
RAISERROR(Calcular la Variacioacuten P de los valores en la tabla101) WITH NOWAITSELECT VARP(PRICE) as VariacioacutenPFROM T1
359 GROUPINGUsado con el GROUP BY y ROLLUP se puede ver el nivel de los resultadosEjemploRAISERROR(Usar GROUPING para agrupar categoriacuteas 101) WITH NOWAITRAISERROR(El ROLLUP nos da el Total de todos los valores101) WITH NOWAITSELECT SUM(PRICE) as PRECIO GROUPING(Category) as CategoriacuteaFROM T1GROUP BY CATEGORYWITH ROLLUP
3510 CHECKSUM AGGRegresa la suma de verificacioacuten de todos los valores del SELECTEjemploRAISERROR(El todos los valores en la tabla101) WITH NOWAITSELECT CHECKSUM_AGG(cast(PRICE as int)) as CHECKSUMAGGFROM T1
3511 FUNCIONES DE CADENA
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 40
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
ASCII (Transact-SQL)
Devuelve el valor de coacutedigo ASCII del caraacutecter situado maacutes a la izquierda de una expresioacuten de caracteres
SintaxisASCII ( character_expression )EjemploSET TEXTSIZE 0SET NOCOUNT ON-- Create the variables for the current character string position -- and for the character stringDECLARE position int string char(15)-- Initialize the variablesSET position = 1SET string = Du monde entierWHILE position lt= DATALENGTH(string) BEGIN SELECT ASCII(SUBSTRING(string position 1)) CHAR(ASCII(SUBSTRING(string position 1))) SET position = position + 1 ENDSET NOCOUNT OFFGO
LEFT (Transact-SQL)
Devuelve la parte izquierda de una cadena de caracteres con el nuacutemero de caracteres especificado SintaxisLEFT ( character_expression integer_expression )Ejemplos
USE AdventureWorks2012GOSELECT LEFT(Name 5) FROM ProductionProductORDER BY ProductIDGO
LEN (Transact-SQL)
Devuelve el nuacutemero de caracteres de la expresioacuten de cadena especificada excluidos los espacios en blanco finales
SintaxisLEN ( string_expression )
Ejemplo
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 41
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
GOSELECT LEN(FirstName) AS Length FirstName LastName FROM SalesvIndividualCustomerWHERE CountryRegionName = AustraliaGO
LOWER (Transact-SQL)
Devuelve una expresioacuten de caracteres despueacutes de convertir en minuacutesculas los datos de caracteres en mayuacutesculas
SintaxixLOWER ( character_expression )
UPPER (Transact-SQL)
Devuelve una expresioacuten de caracteres con datos de caracteres en minuacutesculas convertidos a mayuacutesculas
SintaxisUPPER ( character_expression )Ejemplos de UPPER y LOWER
USE AdventureWorks2012GOSELECT UPPER(RTRIM(LastName)) + + FirstName AS NameFROM PersonPersonORDER BY LastNameGO
LTRIM (Transact-SQL)
Devuelve una expresioacuten de caracteres tras quitar todos los espacios iniciales en blanco
SintaxisLTRIM ( character_expression )EjemplosDECLARE string_to_trim varchar(60)SET string_to_trim = Five spaces are at the beginning of this stringSELECT Here is the string without the leading spaces + LTRIM(string_to_trim)GO
RTRIM (Transact-SQL)
Devuelve una cadena de caracteres despueacutes de truncar todos los espacios en blanco finales
Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 42
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
RTRIM ( character_expression )
Ejemplos
DECLARE string_to_trim varchar(60)SET string_to_trim = Four spaces are after the period in this sentence SELECT string_to_trim + Next stringSELECT RTRIM(string_to_trim) + Next stringGO
SUBSTRING (Transact-SQL)
Devuelve parte de una expresioacuten de caracteres binaria de texto
SUBSTRING ( expression start length )EjemplosUSE AdventureWorks2012GOSELECT LastName SUBSTRING(FirstName 1 1) AS InitialFROM PersonPersonWHERE LastName like BarlORDER BY LastName
3512 FUNCIONES DE FECHA Y HORA
Funciones de fecha y hora del sistema
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
SYSDATETIME SYSDATETIME () Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que se estaacute
ejecutando la
instancia de SQL
ServerEl ajuste de
zona horaria no estaacute
incluido
datetime2(7) No
determinist
a
SYSDATETIMEOFFSE
T
SYSDATETIMEOFFSET ( ) Devuelve un valor
datetimeoffset(7)
que contiene la fecha
y hora del equipo en
el que la instancia de
SQL Server se estaacute
ejecutandoEl ajuste
de zona horaria estaacute
datetimeoffset
(7)
No
determinist
a
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 43
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
incluido
SYSUTCDATETIME SYSUTCDATETIME ( ) Devuelve un valor
datetime2(7) que
contiene la fecha y
hora del equipo en el
que la instancia de
SQL Server se estaacute
ejecutandoLa fecha
y hora se devuelven
como hora universal
coordinada (UTC)
datetime2(7) No
determinist
a
Funciones de fecha y hora del sistema de precisioacuten baja
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
CURRENT_TIMESTAM
P
CURRENT_TIMESTAM
P
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETDATE GETDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoEl ajuste de zona horaria no
estaacute incluido
datetime No
determinista
GETUTCDATE GETUTCDATE ( ) Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se estaacute
ejecutandoLa fecha y hora se devuelven
como una hora universal coordinada
(UTC)
datetime No
determinista
Funciones que obtienen partes de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminism
o
DATENAM
E
DATENAME ( datepart date ) Devuelve una cadena de caracteres que
representa el datepart especificado de la
fecha especificada
nvarchar No
determinista
DATEPART DATEPART ( datepart date ) Devuelve un entero que representa el
datepart especificado del date
int No
determinista
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 44
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
especificado
DAY DAY ( date ) Devuelve un entero que representa la
parte del diacutea de date especificado
int Determinista
MONTH MONTH ( date ) Devuelve un entero que representa la
parte del mes de un date especificado
int Determinista
YEAR YEAR ( date ) Devuelve un entero que representa la
parte del antildeo de un date especificado
int Determiniacutestico
Funciones que obtienen valores de fecha y hora de sus partes
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEFROMPARTS DATEFROMPARTS ( year
month day )
Devuelve un valor
de tipo date para
el antildeo mes y diacutea
especificados
date Determiniacutestico
DATETIME2FROMPART
S
DATETIME2FROMPARTS (
year month day hour minute
seconds fractions precision )
Devuelve un valor
datetime2 para la
fecha y la hora
especificadas y
con la precisioacuten
indicada
datetime
2(precision)
Determiniacutestico
DATETIMEFROMPARTS DATETIMEFROMPARTS ( year
month day hour minute seconds
milliseconds )
Devuelve un valor
datetime para la
fecha y la hora
especificadas
datetime Determiniacutestico
DATETIMEOFFSETFRO
MPARTS
DATETIMEOFFSETFROMPART
S ( year month day hour minute
seconds fractions hour_offset
minute_offset precision )
Devuelve un valor
datetimeoffset
para la fecha y la
hora
especificadas y
con los
desplazamientos y
la precisioacuten
indicados
datetime(precision) Determiniacutestico
SMALLDATETIMEFROM
PARTS
SMALLDATETIMEFROMPART
S ( year month day hour minute )
Devuelve un valor
smalldatetime
para la fecha y la
hora
especificadas
smalldatetime Determiniacutestico
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 45
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
TIMEFROMPARTS TIMEFROMPARTS ( hour
minute seconds fractions
precision )
Devuelve un valor
time para la hora
especificada y con
la precisioacuten
indicada
time(precision) Determiniacutestico
Funciones que obtienen diferencias de fecha y hora
Funcioacuten Sintaxis Valor devuelto Tipo de datos devuelto
Determinismo
DATEDIF
F
DATEDIFF ( datepart
startdate enddate )
Devuelve el nuacutemero de liacutemites
datepart de fecha y hora entre dos
fechas especificadas
int Determinista
Funciones que modifican valores de fecha y horaFuncioacuten Sintaxis Valor devuelto Tipo de datos
devueltoDeterminismo
DATEADD DATEADD (datepart
number date )
Devuelve un nuevo valor
datetime agregando un
intervalo al datepart
especificado del date
indicado
El tipo de datos del
argumento date
Determiniacutestico
EOMONTH EOMONTH ( start_date
[ month_to_add ] )
Devuelve el uacuteltimo diacutea
del mes que contiene la
fecha especificada con
un desplazamiento
opcional
El tipo de valor
devuelto es start_date
o datetime2(7)
Determiniacutestico
SWITCHOFFSET SWITCHOFFSET
(DATETIMEOFFSET
time_zone)
SWITCH OFFSET
cambia el ajuste de zona
horaria de un valor
DATETIMEOFFSET y
conserva el valor UTC
datetimeoffset con la
precisioacuten fraccionaria
de
DATETIMEOFFSET
Determinista
TODATETIMEOFFSET TODATETIMEOFFSET
(expression time_zone)
TODATETIMEOFFSET
transforma un valor
datetime2 en un valor
datetimeoffsetEl valor
datetime2 se interpreta en
la hora local para el valor
time_zone especificado
datetimeoffset con la
precisioacuten fraccionaria
del argumento
datetime
Determinista
3513 Funciones de conversion de unidades
CAST y CONVERT (Transact-SQL)Convierte una expresioacuten de un tipo de datos en otro en SQL Server 2012Sintaxis
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 46
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
CAST ( expression AS data_type [ ( length ) ] )SintaxisCONVERT ( data_type [ ( length ) ] expression [ style ] )
Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0SQL Server admite el formato de fecha en estilo aacuterabe mediante el algoritmo kuwaitiacute
Sin el siglo (aa) (1) Con el siglo (aaaa) Estaacutendar Entradasalida (3)
- 0 oacute 100 (12) Predeterminado mes dd aaaa hhmiAM (o PM)
1 101 EE UU mmddaaaa
2 102 ANSI aammdd
3 103 BritaacutenicoFranceacutes ddmmaaaa
4 104 Alemaacuten ddmmaa
5 105 Italiano dd-mm-aa
6 106(1) - dd mes aa
7 107(1) - Mes dd aa
8 108 - hhmiss
- 9 oacute 109 (12) Valor predeterminado + mes dd aaaa hhmissmmmam (o p
10 110 EE UU mm-dd-aa
11 111 JAPOacuteN aammdd
12 112 ISO Aammddaaaammdd
- 13 oacute 113 (12) Europeo predeterminado + dd mes aaaa hhmissmmm(24h)
14 114 - hhmissmmm(24h)
- 20 oacute 120 (2) ODBC canoacutenico aaaa-mm-dd hhmiss(24h)
- 21 oacute 121 (2) ODBC canoacutenico (con aaaa-mm-dd hhmissmmm(24h)
- 126 (4) ISO8601 aaaa-mm-ddThhmissmmm (sin
- 127(6 7) ISO8601 con zona horaria Z aaaa-mm-ddThhmissmmmZ(sin espacios)
- 130 (12) Hijri (5) dd mes aaaa hhmissmmmam
- 131 (2) Hijri (5) ddmmaa hhmissmmmam
Estos valores de estilo devuelven resultados no deterministasIncluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo)
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 47
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Los valores predeterminados (style0 o 100 9 o 109 13 o 113 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa)
Entrada cuando se convierte en datetime salida cuando se convierte en datos de caracteres
Disentildeado para usarse con XMLPara convertir datos datetime o smalldatetime en datos de caracteres el formato de salida es el descrito en la tabla anterior
Solo se admite en la conversioacuten de datos de caracteres a datetime o smalldatetimeCuando se convierten datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime el componente de hora no especificado se establece en 000000000 y el componente de fecha no especificado se establece en 1900-01-01
El indicador opcional de zona horaria Z se usa para facilitar la asignacioacuten de valores XML de tipo datetime que contienen informacioacuten de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horariaZ es el indicador para la zona horaria UTC-0Las otras zonas horarias se indican con un desplazamiento de HHMM en sentido + o -Por ejemplo 2006-12-12T234512-0800
Cuando se convierten datos de caracteres de tipo smalldatetime los estilos que incluyen segundos o milisegundos muestran ceros en dichas posicionesPuede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varcharCuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora se anexa un ajuste de zona horaria al resultado
Estilos float y realCuando expression es float o real style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Un maacuteximo de 6 diacutegitosUtiliacutecelo en notacioacuten cientiacutefica
cuando proceda
1 Siempre 8 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
2 Siempre 16 diacutegitosUtiliacutecelo siempre en notacioacuten cientiacutefica
126 128 129 Se incluye por razones heredadas y podriacutea quedar desusado en
una versioacuten futura
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 48
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Estilos money y smallmoneyCuando expression es money o smallmoneystyle puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0
Valor Resultado
0 (valor
predeterminado)
Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 423598
1 Separadores de millar cada tres diacutegitos a la izquierda del separador decimal y dos
diacutegitos a la derecha del separador decimal por ejemplo 351092
2 Sin separadores de millar cada tres diacutegitos a la izquierda del separador decimal y
cuatro diacutegitos a la derecha del separador decimal por ejemplo 42359819
126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)
Estilos xmlCuando expression es xml style puede ser uno de los valores que se muestran en la tabla siguienteOtros valores se procesan como 0Valor Resultado
0 (valor
predeterminado)
Utiliza el comportamiento de anaacutelisis predeterminado que descarta los espacios en blanco
insignificantes y no permite un subconjunto DTD interno
1 Conserva los espacios en blanco insignificantesEsta configuracioacuten establece el control
xmlspace predeterminado de modo que se comporte igual que si se hubiera especificado
xmlspace=preserve
2 Habilita el procesamiento limitado de subconjuntos DTD internos
Si estaacute habilitado el servidor puede utilizar la siguiente informacioacuten proporcionada en un
subconjunto DTD interno para realizar operaciones de anaacutelisis que no se validan
Se aplican los valores predeterminados de los atributos
Las referencias a entidades internas se resuelven y se ampliacutean
Se comprobaraacute la correccioacuten sintaacutectica del modelo de contenido DTD
El analizador pasaraacute por alto los subconjuntos DTD externosTampoco evaluacutea la declaracioacuten
XML para ver si el atributo standalone estaacute establecido en yes o no pero analiza la instancia
XML como si se tratase de un documento independiente
3 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los
subconjuntos DTD internos
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 49
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Estilos binariosCuando expression es binary(n) varbinary(n) char(n) o varchar(n) style puede ser uno de los valores que se muestran en la tabla siguienteLos valores de estilos que no se enumeran en la tabla devuelven un error
Valor Salida
0
(predeterminado)
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCIICada
caraacutecter o byte se convierte con una proporcioacuten 11
Si data_type es un tipo binario los caracteres 0x se agregan a la izquierda del
resultado
1 2 Si data_type es un tipo binario la expresioacuten debe ser de caracteresexpression se
debe componer de un nuacutemero par de diacutegitos hexadecimales (0 1 2 3 4 5 6 7 8 9
A B C D E F a b c d e f)Si style se establece en 1 los caracteres 0x deben ser
los dos primeros caracteres de la expresioacutenSi la expresioacuten contiene un nuacutemero
impar de caracteres o si alguno de los caracteres no es vaacutelido se produce un error
Si la longitud de la expresioacuten convertida es mayor que la longitud de data_type el
resultado se truncaraacute a la derecha
Los data_types de longitud fija que sean mayores que el resultado convertido
tendraacuten ceros agregados a la derecha del resultado
Si data_type es un tipo de caracteres la expresioacuten debe ser binariaCada caraacutecter
binario se convierte en dos caracteres hexadecimalesSi la longitud de la expresioacuten
convertida es mayor que la longitud de data_type se truncaraacute a la derecha
Si data_type es un tipo de caracteres de tamantildeo fijo y la longitud del resultado
convertido es menor que la longitud de data_type los espacios se agregan a la
derecha de la expresioacuten convertida para mantener un nuacutemero par de diacutegitos
hexadecimales
Los caracteres 0x se agregaraacuten a la izquierda del resultado convertido para style 1
Conversiones impliacutecitas
Las conversiones impliacutecitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERTLas conversiones expliacutecitas son aquellas conversiones que requieren la especificacioacuten de las funciones CAST o CONVERTEn la siguiente ilustracioacuten se muestran todas las conversiones de tipos de datos expliacutecitas e impliacutecitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerIncluyen xml bigint y
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 50
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
sql_variantNo existe una conversioacuten impliacutecita en la asignacioacuten del tipo de datos sql_variant pero siacute hay una conversioacuten impliacutecita en sql_variant
Al convertir entre datetimeoffset y los tipos de caracteres char varchar nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener diacutegitos dobles para HH y MM por ejemplo -0800
Tipos de datos de valor grandeLos tipos de datos de valor grande tienen el mismo comportamiento de conversioacuten impliacutecito y expliacutecito que sus equivalentes maacutes pequentildeos especialmente los tipos de datos varchar nvarchar y varbinaryNo obstante se deben tener en cuenta las siguientes directrices
La conversioacuten de datos image en varbinary(max) y viceversa es una conversioacuten impliacutecita al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max)
La conversioacuten de tipos de datos de valor grande como varchar(max) en un tipo de datos equivalente maacutes pequentildeo como varchar es una conversioacuten impliacutecita aunque se produciraacute truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos maacutes pequentildeo
La conversioacuten de varchar nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma impliacutecita
La conversioacuten del tipo de datos sql_variant en los tipos de datos de valor grande es una conversioacuten expliacutecita
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant
xml Data Type
Cuando se convierte de forma expliacutecita o impliacutecita el tipo de datos xml en un tipo de datos de cadena o binario el contenido del tipo de datos xml se serializa en funcioacuten de un conjunto de reglasPara obtener informacioacuten sobre estas reglas vea Definir la serializacioacuten de datos XMLPara obtener informacioacuten sobre la conversioacuten de otros tipos de datos al tipo de datos xml vea Crear instancias de datos XML
Tipos de datos text e image
No se admite la conversioacuten automaacutetica de los tipos de datos text e imagePuede convertir expliacutecitamente datos text en datos de caracteres y datos image en binary o varbinary pero la longitud maacutexima es de 8000 bytesSi intenta una conversioacuten incorrecta como la de una expresioacuten de caracteres que incluye letras en un tipo int SQL Server devuelve un mensaje de error
Intercalacioacuten de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra la salida tiene la misma intercalacioacuten y etiqueta de intercalacioacuten que la entradaSi la entrada no es una cadena de caracteres la
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 51
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
salida tiene la intercalacioacuten predeterminada de la base de datos y una etiqueta de intercalacioacuten coaccionable-predeterminadaPara obtener maacutes informacioacuten
Para asignar otra intercalacioacuten a la salida aplique la claacuteusula COLLATE a la expresioacuten de resultado de las funciones CAST o CONVERTPor ejemploSELECT CAST(abc AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultadosAl convertir expresiones de caracteres o binarias (char nchar nvarchar varchar binary o varbinary) en una expresioacuten de un tipo de datos diferente los datos se pueden truncar se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostradoLas conversiones en char varchar nchar nvarchar binary y varbinary se truncan excepto aquellas que se muestran en la siguiente tablaDe tipo de datos En tipo de datos Resultado
int smallint o tinyint char
varchar
nchar E
nvarchar E
money smallmoney numeric decimal float o real char E
varchar E
nchar E
nvarchar E
= Resultado demasiado corto para ser mostradoE = Error devuelto porque el resultado es demasiado corto para ser mostrado
SQL Server garantiza que solo las conversiones circulares las conversiones que convierten un tipo de datos en otro y despueacutes vuelven a convertirlo en el tipo de datos original devolveraacuten los mismos valores en versiones diferentesEn el siguiente ejemplo se muestra una conversioacuten circular
DECLARE myval decimal (5 2)SET myval = 19357SELECT CAST(CAST(myval AS varbinary(20)) AS decimal(105))-- Or using CONVERTSELECT CONVERT(decimal(105) CONVERT(varbinary(20) myval))
En el siguiente ejemplo se muestra una expresioacuten resultante demasiado corta para ser mostrada
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 52
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
USE AdventureWorks2012GOSELECT pFirstName pLastName SUBSTRING(pTitle 1 25) AS Title CAST(eSickLeaveHours AS char(1)) AS [Sick Leave]FROM HumanResourcesEmployee e JOIN PersonPerson p ON eBusinessEntityID = pBusinessEntityIDWHERE NOT eBusinessEntityID gt5
Al convertir tipos de datos que difieren en los decimales algunas veces el valor resultante se trunca y otras se redondeaEn la siguiente tabla se muestra el comportamiento
De En Comportamiento
numeric numeric Redondeo
numeric int Truncar
numeric money Redondear
money int Redondear
money numeric Redondeo
float int Truncamiento
float numeric Redondeo
La conversioacuten de los valores float que utilizan la notacioacuten cientiacutefica a decimal o numeric se
restringe uacutenicamente a los valores con una precisioacuten de 17 diacutegitosCualquier valor con una
precisioacuten mayor de 17 se redondea a cero
float datetim
e
Redondeo
datetim
e
int Redondeo
Por ejemplo el resultado de la siguiente conversioacuten es 10
SELECT CAST(106496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen el valor se redondeaPor ejemplo el resultado de la siguiente conversioacuten es $103497
SELECT CAST(103496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos char nchar varchar o nvarchar no numeacutericos en los tipos de datos int float
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 53
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
numeric o decimalSQL Server tambieacuten devuelve un error cuando se convierte una cadena vaciacutea ( ) en los tipos de datos numeric o decimal
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores-- Use CASTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CAST(ListPrice AS int) LIKE 3GO
-- Use CONVERTUSE AdventureWorks2012GOSELECT SUBSTRING(Name 1 30) AS ProductName ListPriceFROM ProductionProductWHERE CONVERT(int ListPrice) LIKE 3GO
USE AdventureWorks2012GOSELECT CAST(ROUND(SalesYTDCommissionPCT 0) AS int) AS ComputedFROM SalesSalesPerson WHERE CommissionPCT = 0GO
En el siguiente ejemplo se concatenan expresiones no binarias que no son de caracteres mediante CAST
USE AdventureWorks2012GOSELECT The list price is + CAST(ListPrice AS varchar(12)) AS ListPriceFROM ProductionProductWHERE ListPrice BETWEEN 35000 AND 40000GO
En el siguiente ejemplo se utiliza CAST en la lista de seleccioacuten para convertir la columna Name en una columna de tipo char(10)
USE AdventureWorks2012GOSELECT DISTINCT CAST(pName AS char(10)) AS Name sUnitPriceFROM SalesSalesOrderDetail AS s JOIN ProductionProduct AS p ON sProductID = pProductIDWHERE Name LIKE Long-Sleeve Logo Jersey MGO
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 54
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
En el siguiente ejemplo se convierte la columna SalesYTD de tipo money en una de tipo int y a continuacioacuten en una de tipo char(20) para que se pueda utilizar con la claacuteusula LIKE
USE AdventureWorks2012GOSELECT pFirstName pLastName sSalesYTD sBusinessEntityIDFROM PersonPerson AS p JOIN SalesSalesPerson AS s ON pBusinessEntityID = sBusinessEntityIDWHERE CAST(CAST(sSalesYTD AS int) AS char(20)) LIKE 2GO
En el ejemplo siguiente se muestra la fecha y la hora actuales se utiliza CAST para cambiarlas a un tipo de datos de caraacutecter y a continuacioacuten se utiliza CONVERT para mostrar la fecha y la hora en el formato ISO 8901
SELECT GETDATE() AS UnconvertedDateTime CAST(GETDATE() AS nvarchar(30)) AS UsingCast CONVERT(nvarchar(30) GETDATE() 126) AS UsingConvertTo_ISO8601 GO
El siguiente ejemplo es lo opuesto aproximadamente del ejemplo anteriorEn el ejemplo se muestra la fecha y la hora como datos de caraacutecter se utiliza CAST para cambiar los datos de caraacutecter al tipo de datos datetime y a continuacioacuten se utiliza CONVERT para cambiar los datos de caraacutecter al tipo de datos datetime
SELECT 2006-04-25T155059997 AS UnconvertedText CAST(2006-04-25T155059997 AS datetime) AS UsingCast CONVERT(datetime 2006-04-25T155059997 126) AS UsingConvertFrom_ISO8601 GO
Ejercicios1- Utilizando Sql crearse una base de datos llamad producto dentro de esa
base crearse 3 tablas y relacionarlas como se muestra en la figura utilizando
Transact SQL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 55
ProductosProveedores Vende
Son vendidos
m n
m
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
2- Utilizando sentencias SQL ingresar tres datos en cada una de las
tablas
3- Mostrar todos los datos de la tabla proveedores
4- Mostrar todos los datos de la tabla productos cuyo precio sea mayor
a 300
5- Mostrar todos los productos de nombre arroz trigo avena
6- Mostrar los productos agrupados por nombre cuyo promedio del
precio sea mayor a 24
7- Unir la tabla proveedores y clientes
8- Mostrar la tabla proveedores y clientes cuyos nombres sean iguales
9- Insertar un campo en la tabla proveedores
10- Borrar una fila de la tabla clientes
11- Actualizar una fila de la tabla clientes
12- Borrar la tabla proveedores
CAPIacuteTULO IV
Trabajar con los diferentes tipos de iacutendices conociendo las
ventajas y desventajas de su uso en funcioacuten del objetivo
buscado
41 Iacutendices
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 56
Clientes
n
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
El iacutendice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones permitiendo un raacutepido acceso a los registros de una tabla en una base de datos Al aumentar draacutesticamente la velocidad de acceso se suelen usar sobre aquellos campos sobre los cuales se hacen frecuentes buacutesquedas
42 Mantenimiento de iacutendices
Una vez creados los iacutendices debe mantenerlos para asegurar que su rendimiento sea oacuteptimo Con el tiempo los datos se fragmentan La fragmentacioacuten de los datos debe administrarse en funcioacuten del entorno de la organizacioacuten
SQL Server proporciona el Asistente para optimizacioacuten de iacutendices que hace un seguimiento automaacutetico del uso de los iacutendices y ayuda a mantener y crear iacutendices con un rendimiento oacuteptimo
Tambieacuten puede utilizar diversas opciones y herramientas como ayuda para volver a generar los iacutendices y comprobar su optimizacioacuten
Coacutemo se produce la fragmentacioacuten La fragmentacioacuten se produce al modificar los datos Por ejemplo cuando se agregan o se eliminan filas de una tabla o cuando cambian los valores de las columnas indizadas SQL Server ajusta las paacuteginas de iacutendice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados Este ajuste de las paacuteginas de iacutendice se conoce como divisioacuten de paacuteginas El proceso de divisioacuten aumenta el tamantildeo de la tabla y el tiempo necesario para procesar las consultas
Meacutetodos para administrar la fragmentacioacuten En SQL Server hay dos meacutetodos para administrar la fragmentacioacuten El primero consiste en quitar y volver a crear un iacutendice agrupado y especificar un valor con la opcioacuten FILLFACTOR El segundo consiste en volver a generar un iacutendice y especificar un valor de FILLFACTOR
Los valores de FILLFACTOR estaacuten comprendidos entre el 1 y el 100 por cien
El valor de FILLFACTOR predeterminado es 0 Este valor llena las paacuteginas de iacutendice del nivel de hoja al 100 por cien y deja sitio para el tamantildeo maacuteximo de una entrada de iacutendice en las paacuteginas de iacutendice no situadas en el nivel de hoja No puede especificar expliacutecitamente un valor de FILLFACTOR = 0
El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure
La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por uacuteltima vez y otra informacioacuten del iacutendice
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 57
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
El valor de FILLFACTOR se especifica en porcentajes El porcentaje determina cuaacutento deben llenarse las paacuteginas del nivel de hoja Por ejemplo un valor de FILLFACTOR de 65 llena un 65 por ciento de cada paacutegina del nivel de hoja y deja libre un 35 por ciento del espacio de paacutegina para nuevas filas El tamantildeo de la fila influye en el nuacutemero de filas que caben en la paacutegina para el porcentaje de FILLFACTOR especificado
Utilice la opcioacuten FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un iacutendice agrupado se modifican con frecuencia
43 Iacutendices agrupados y no agrupadosIacutendices agrupadosUn INDICE AGRUPADO es similar a una guiacutea telefoacutenica los registros con el mismo valor de campo se agrupan juntos Un iacutendice agrupado determina la secuencia de almacenamiento de los registros en una tabla
Se utilizan para campos por los que se realizan busquedas con frecuencia o se accede siguiendo un ordenUna tabla soacutelo puede tener UN iacutendice agrupadoEl tamantildeo medio de un iacutendice agrupado es aproximadamente el 5 del tamantildeo de la tablaPara crear un iacutendice agrupado utilizar la siguiente sintaxisCreate clustered index [nombre] on [tabla] ([campos])Iacutendices no agrupados
Un INDICE NO AGRUPADO es como el iacutendice de un libro los datos se almacenan en un lugar diferente al del iacutendice los punteros indican el lugar de almacenamiento de los elementos indizados en la tablaUn iacutendice no agrupado se emplea cuando se realizan distintos tipos de busquedas frecuentemente con campos en los que los datos son uacutenicosUna tabla puede tener hasta 249 iacutendices no agrupados
Si no se especifica un tipo de iacutendice de modo predeterminado seraacute no agrupado
Los campos de tipo text ntext e image no se pueden indizar
Para crear un iacutendice no agrupado basta con omitir la palabra reservada clustered
44 Creacioacuten de iacutendices
La sintaxis para crear un iacutendice es la siguienteCREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON ltobjectgt ( column_name [ ASC | DESC ] [ n ] )
[ WITH ltbackward_compatible_index_optiongt [ n ] ]
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 58
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
[ ON filegroup_name | default ]
EjemploCREATE INDEX IX_ProductVendor_VendorID ON PurchasingProductVendor (BusinessEntityID)
45 Vistas
Una vista es una alternativa para mostrar datos de varias tablas Una vista es como una tabla virtual que almacena una consulta Los datos accesibles a traveacutes de la vista no estaacuten almacenados en la base de datos como un objeto
Entonces una vista almacena una consulta como un objeto para utilizarse posteriormente Las tablas consultadas en una vista se llaman tablas base En general se puede dar un nombre a cualquier consulta y almacenarla como una vista
46 Creacioacuten de vistas
Para crear una vista se utiliza la siguiente sintaxis
create view [nombre] as hellip
Ejemplo
Create view provclie
As select clientenombre proveedornombre
from proveedor cliente
Ejercicios
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 59
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Utilizando sentencias sql crear la base de datos correspondiente al
diagrama de la figura
Crear un iacutendice agrupado para cada tabla
Crear un iacutendice no agrupado para cada tabla
Crer una vista que incluya el nombre la direccioacuten y el teleacutefono del profesor
Crear una vista que contenga los datos de la tabla departamento y curso
CAPIacuteTULO V
Realizar tareas de administracioacuten de bases de datos mediante
el uso de triggers
51TriggersUn trigger (o disparador) en una Base de datos es un procedimiento que se ejecuta cuando se cumple una condicioacuten establecida al realizar una operacioacuten Dependiendo de la base de datos los triggers pueden ser de insercioacuten (INSERT) actualizacioacuten (UPDATE) o borrado (DELETE)
52 Creacioacuten de triggersLa sintaxis para crear un trigger es la siguienteCREATE TRIGGER [ schema_name ]trigger_name
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 60
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
ON table | view [ WITH ltdml_trigger_optiongt [ n ] ] FOR | AFTER | INSTEAD OF [ INSERT ] [ ] [ UPDATE ] [ ] [ DELETE ] [ NOT FOR REPLICATION ] AS sql_statement [ ] [ n ] | EXTERNAL NAME ltmethod specifier [ ] gt EjemploCREATE TRIGGER dboMovimientosDelete ON dboMovimientosFOR DELETEASBEGINmdash No retorna el mensaje de cantidad de registros afectadosSET NOCOUNT ON UPDATE dboArticulosSET STOCK = STOCK ndash TPARCIALFROM dboArticulos AINNER JOIN( SELECT ARTICULO_IDSUM(CASE WHEN TIPO=rsquoIrsquo THEN CANTIDAD ELSE -CANTIDAD END)AS PARCIAL FROM DELETEDGROUP BY ARTICULO_ID) TONAID = TARTICULO_IDEND53 Procedimientos almacenadosUn procedimiento almacenado (stored procedure en ingleacutes) es un programa (o procedimiento) el cual es almacenado fiacutesicamente en una base de datos Su implementacioacuten variacutea de un gestor de bases de datos a otro La ventaja de un procedimiento almacenado es que al ser ejecutado en respuesta a una peticioacuten de usuario es ejecutado directamente en el motor de bases de datos el cual usualmente corre en un servidor separado Como tal posee acceso directo a los datos que necesita manipular y soacutelo necesita enviar sus resultados de regreso al usuario deshacieacutendose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes54 Trabajar con procedimientos almacenadosUSE AdventureWorks2012GOCREATE PROCEDURE HumanResourcesuspGetEmployeesTest2 LastName nvarchar(50) FirstName nvarchar(50) AS SET NOCOUNT ON SELECT FirstName LastName Department FROM HumanResourcesvEmployeeDepartmentHistory WHERE FirstName = FirstName AND LastName = LastName AND EndDate IS NULL
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 61
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
GO
Crear una tabla con los campos nuacutemero cuadrado y cubo el momento que
inserto un nuacutemero automaacuteticamente debe calcular el cuadrado y el cubo
Crear una tabla alumno y respaldo el momento que se borre una fila de la
tabla alumno automaacuteticamente debe pasarse a la tabla respaldo
BIBLIOGRAFIacuteA GABILLAUD Jeacuterome 2009 SQL Server 2008 SQL Transact SQL
Ediciones ENI Pags 109189225229239Este libro sobre SQL Server estaacute dirigido tanto a estudiantes de informaacutetica que deseen aprender el lenguaje SQL con SQL Server como a informaacuteticos que deseen actualizar sus competencias en SQL Server 2008 para comprender y controlar las funciones que complementan a esta nueva versioacuten
HOTEK Mike 2009 SQL Server 2008 Microsoft SQL Server 2008 Grupo Anayala Comercial Pags 12-2056-89145-204
Este libro es una guiacutea paso a paso para crear aplicaciones con SQL Server 2008 Trata en profundidad sus temas esenciales con ejemplos de coacutedigo que fomentan el dominio iacutentegro de las teacutecnicas Microsoft Consiga la orientacioacuten praacutectica que necesita para crear soluciones de bases de datos que solucionen problemas reales en el mundo profesional CHARTE Francisco 2009 SQL Server 2008 Anaya Multimedia Pags
57125213-256Esta guiacutea estaacute dirigida a los usuarios que comienzan a trabajar con SQL Server 2008 Con ella podraacute desde instalar SQL Server 2008 hasta publicar sus bases de datos para hacerlas accesibles a traveacutes de Internet pasando por el disentildeo de informes o creacioacuten de procedimientos almacenados Los primeros capiacutetulos se centran en las tareas de administracioacuten del servidor y la creacioacuten de bases de datos tablas vistas e iacutendices
COLES Michael 2008 Pro t-Sql 2008 Springer ndash Verlag New York Pags 3-40 80-132Este libro tiene teacutecnicas avanzadas abarcando todo lo que debe saber un administrador de base de datos SQL SERVER
PEREZ Ceacutesar 2009 Domine Microsoft SQL ndash Server 2008 Ra- Ma Pags 10-56 60-90En este libro se presenta un anaacutelisis profundo de la base de datos Microsoft SQL Server 2008 en su versioacuten Enterprise Edition Se comienza tratando la instalacioacuten del programa la introduccioacuten del trabajo en los distintos entornos de la base de datos y el desarrollo amplio del modelo entidad-relacioacuten a traveacutes de Transact SQL que se trata detalladamente
ANEXOS
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 62
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-
Videos Tutoriales Textos complementarios Paacuteginas de internet
MOacuteDULO DE CONTENIDOS DE GESTOR DE BASE DE DATOS II 63
- 121 Tamantildeo de la base de datos
- 132 Campos y registros
- Relaciones uno a uno
- Relaciones uno a varios
- Relaciones Varios a Varios
-
- 152 Segunda Forma Normal (2FN)
- 153 Tercera Forma Normal (3FN)
- La estructura IF admite el uso de subconsultas
- Estructura condicional CASE
-
- Ejemplo de CASE
- El mismo ejemplo aplicando esta sintaxis
- Otro aspecto muy interesante de CASE es que permite el uso de subconsultas
-
- Bucle WHILE
-
- El bucle WHILE se repite mientras expresion se evalue como verdadero
- Es el uacutenico tipo de bucle del que dispone Transact SQL
- Un ejemplo del bucle WHILE
- Podemos pasar a la siguiente iteracioacuten del bucle utilizando CONTINUE
- El bucle se dejaraacute de repetir con la instruccioacuten BREAK
- Tambieacuten podemos utilizar el bucle WHILE conuntamente con subconsultas
-
- Estructura GOTO
-
- La sentencia goto nos permite desviar el flujo de ejecucioacuten hacia una etiqueta Fueacute muy utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema ERROR para el control de errores
- Actualmente se desaconseja el uso GOTO recomendandose el uso de TRY - CATCH para la gestion de errores
-
- 352 Count Regresa la cuneta de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para solamente contar los valores distintos
- Count (Valores a contar)
- 353 COUNTBIG
- 354 AVG Regresa el promedio de todos los valores del SELECT Tambieacuten se puede usar la opcioacuten DISTINCT para calcular el promedio de los valores distintos
- Sintaxis
- AVG(Valores)
- 354 Min
- 355 MAX
- 356 STDEV
- 357 STDEVP
- 357 VAR
- 358 VARP
- 359 GROUPING
- 3510 CHECKSUM AGG
-
- ASCII (Transact-SQL)
- LEFT (Transact-SQL)
- LEN (Transact-SQL)
- LOWER (Transact-SQL)
- UPPER (Transact-SQL)
- LTRIM (Transact-SQL)
- RTRIM (Transact-SQL)
- SUBSTRING (Transact-SQL)
-
- Funciones de fecha y hora del sistema de precisioacuten baja
- Funciones que obtienen partes de fecha y hora
- Funciones que obtienen valores de fecha y hora de sus partes
- Funciones que obtienen diferencias de fecha y hora
- Funciones que modifican valores de fecha y hora
-
- 3513 Funciones de conversion de unidades
- CAST y CONVERT (Transact-SQL)
-
- Estilos de fecha y hora
- Estilos float y real
- Estilos money y smallmoney
- Estilos xml
- Estilos binarios
- Conversiones impliacutecitas
- Tipos de datos de valor grande
- xml Data Type
- Tipos de datos text e image
- Intercalacioacuten de salida
- Truncar y redondear resultados
- Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
-
- Coacutemo se produce la fragmentacioacuten
- Meacutetodos para administrar la fragmentacioacuten
-