Sq l Server Manual

download Sq l Server Manual

of 96

Transcript of Sq l Server Manual

  • 7/22/2019 Sq l Server Manual

    1/96

    SQLSERVER 2005

  • 7/22/2019 Sq l Server Manual

    2/96

    Instalacin de SQLSERVER 2005

    INSTALACIN DEL SQL SERVER 2005SQL Server 2005 Express

    Para la instalacin del SQL, se tomara el primerarchivo llamado SQLExpress.EXE, se lo ejecuta ysaldr la siguiente pantalla:

    Se espera unos minutos, hasta que extraiga losprogramas de instalacin. Luego aparecer lasiguientepantalladonde se debeaceptar laclave ypresionar

    Next>

    Drac----2

  • 7/22/2019 Sq l Server Manual

    3/96

    Instalacin de SQLSERVER 2005

    Una vez verificado los requisitos de instalacinse presiona el botn Next>.Y se verificara laconfiguracin.

    Aparecer esta pantalla y se presiona el botnNext>

    Drac----3

  • 7/22/2019 Sq l Server Manual

    4/96

    Instalacin de SQLSERVER 2005

    Volvemos apresionarNext>

    Luego aparecer esta pantalla:

    Drac----4

  • 7/22/2019 Sq l Server Manual

    5/96

    Instalacin de SQLSERVER 2005

    Se deber colocar o dejar como est el nombre y lacompaa, es mejor dejarlo as y damosNext>

    Drac----5

  • 7/22/2019 Sq l Server Manual

    6/96

    Instalacin de SQLSERVER 2005

    Se deber seleccionar las caractersticas de loscomponentes que se desee instalar. Para esto delclic a la X rojas y selecciones todos loscomponentes

    Y quedara as como se muestra en la siguientepantalla

    Drac----6

  • 7/22/2019 Sq l Server Manual

    7/96

    Instalacin de SQLSERVER 2005

    Puede instalar una instancia predeterminada oespecificar una instancia con nombre. Esto serefiere al cualquier nombre que le pueda dar paraluego identificarla.

    Luego presinamosNext>

    Drac----7

  • 7/22/2019 Sq l Server Manual

    8/96

    Instalacin de SQLSERVER 2005

    Una vez seleccionada la opcin Mixed, ingresamosla clave o password, utilice claves mayor a 8dgitos, esto para no tener problemas deseguridad, y presionamos Next>

    En esta siguiente pantalla solamente damos Next yno seleccionamos ninguna opcin:

    Drac----8

  • 7/22/2019 Sq l Server Manual

    9/96

    Instalacin de SQLSERVER 2005

    En la siguiente pantalla se indicara los programasque van hacer instalados y damos Next>

    Esta pantalla nos indicara los programas que seinstalaron en caso que haya errores es mejorcorregirlos y volver a instalar, damosNext>

    Drac----9

  • 7/22/2019 Sq l Server Manual

    10/96

    Instalacin de SQLSERVER 2005

    En esta pantalla nos indicara que ha finalizado laconfiguracin e instalacin de los programas yproceder la verificacin cuando le demos Finish

    Con esta instalacin se termina la ejecucin del

    primer archivo.

    Drac----10

  • 7/22/2019 Sq l Server Manual

    11/96

    Instalacin de SQLSERVER 2005

    A continuacin se ejecutara el siguiente archivoSQLServer2005_SSManagementSEE, luego de ejecutarel programa aparecer la siguiente pantalla

    En la siguiente pantalla se indicara que seinstalara el SQL SERVER MANAGEMENT STUDIO EXPRESSCTP. Y presiona el botnNext>

    Drac----11

  • 7/22/2019 Sq l Server Manual

    12/96

    Instalacin de SQLSERVER 2005

    Aceptamos la licencia y presionamosNext>.

    Se nos pedir registrar para esta instalacin denuevo el nombre, luego de modificado presionamosNext>.

    Drac----12

  • 7/22/2019 Sq l Server Manual

    13/96

    Instalacin de SQLSERVER 2005

    Luego presentara la siguiente pantalla con lascaractersticas de los programas a instalarse en

    caso de que aparezcan con X, se deber seleccionartodos los componentes, para nuestro caso noapareci ninguna X. Luego se realizar lo indicadopresionamosNext>.

    Drac----13

  • 7/22/2019 Sq l Server Manual

    14/96

    Instalacin de SQLSERVER 2005

    Esta pantalla le indicara que proceder con lainstalacin, cuando estemos preparados damosInstall.

    Una vez instalado aparecer la siguiente pantalla,

    y podemos usar el producto.

    Drac----14

  • 7/22/2019 Sq l Server Manual

    15/96

    Instalacin de SQLSERVER 2005

    Introduccin a

    Base de Datos

    Conceptos bsicos

    En el sentido ms amplio, se podra considerar que una base dedatos es simplemente un conjunto de informacin.

    En un computador, esta informacin normalmente ser bsicamenteuna serie de fichas.

    Por ejemplo, una base de datos muy sencilla podra ser unaagenda de direcciones en la que anotemos datos de nuestrosamigos. Tendramos una ficha para cada uno de estos amigos. Encada ficha, a su vez, existir una serie de apartados, como elnombre, la direccin, el telfono, etc.

    Esto nos permite introducir dos primeros conceptos queutilizaremos: cada una de estas fichas recibe el nombre deregistro, y cada uno de los apartados que componen las

    fichas se llama campo.

    El conjunto de las fichas (registros) forma un bloque deinformacin, que llamaremos tabla, y que se suele representarescribiendo cada ficha (registro) en una fila y cada apartado(campo) en una columna, as:

    NOMBRE DIRECCION CIUDAD TELEFONOPABLO CANO AV.UNO Y CALLE D GUAYAQUIL 2232424JESUS ABRIL CALLE DOS Y TERCERA MANTA 3423664JUAN BORJA ALAJUELA Y GARCIA

    MORENOPORTOVIEJO 30330303

    Pero en la prctica, una base de datos real suele estarformada por ms de una tabla. Por ejemplo, la base de datos queutiliza una empresa normal para su gestin deber almacenardatos sobre clientes, proveedores, artculos, facturas, etc.Cada uno de estos bloques de datos ser una tabla, y estastablas estarn relacionadas entre s (por ejemplo: un artculoser suministrado por un cierto proveedor, y ese artculoaparecer en ciertas facturas, cada una de las cualescorresponder a un cierto cliente).

    Drac----15

  • 7/22/2019 Sq l Server Manual

    16/96

    Instalacin de SQLSERVER 2005

    Todo este conjunto de informacin que forman las tablas y lasrelaciones entre ellas (y alguna cosa ms que ya veremos) sernuestra base de datos. En concreto, se tratar de lo que seconoce como una base de datos relacional.

    En este texto veremos las nociones bsicas de cmo se crea y semaneja una base de datos: cmo disear las tablas y lasrelaciones, cmo introducir los datos y como buscar informacinen la base de datos.

    Terminologa Bsica

    En Bases De Datos

    Es obvio que entre el computador, tratando con bits, y elusuario final, tratando con abstracciones tales como sueldos,horas trabajadas, etc., hay bastantes niveles de abstraccin. Labase de datos fsica reside permanentemente en un almacenamientosecundario (Discos duros y cintas principalmente). Podemosvisualizar a la base de datos fsica a s misma con variosniveles de abstraccin, como por ejemplo, partiendo por aquellosarchivos y registros en un lenguaje de programacin como VisualBasic, Java o C+, pasando a travs de los archivos y registroslgicos soportados por el Sistema Operativo, hasta llegar a losbits y las direcciones fsicas en los dispositivos dealmacenamiento.

    La base de datos conceptual es una abstraccin del mundo realrespecto a una empresa.El SABD provee un DDL para especificar el modelo conceptual atravs del modelo fsico. El DDL es un lenguaje de alto nivelque nos permite describir la base de datos conceptual entrminos de un modelo de datos.

    Una vista o subes quema es un modelo abstracto de una porcin deuna BDD. Algunos (si no todos) los SABD proveen habilidades paradeclarar vistas y para expresar consultas y operaciones sobrelas vistas. Por ende, una vista es una pequea BDD conceptual, yest definida al mismo nivel de abstraccin que la BDDconceptual.

    Introduccin alModelamiento de Datos

    Sistema de Administracin de Bases de datos(S.A.B.D. o D.B.M.S.)

    Drac----16

  • 7/22/2019 Sq l Server Manual

    17/96

    Instalacin de SQLSERVER 2005

    El mayor rol de un SABD es permitir al usuario interactuar conlos datos en trminos abstractos distintos a los que utiliza elcomputador para almacenarlos. En este sentido, el SABD actacomo un intrprete de un lenguaje de programacin de muy altonivel, permitiendo al usuario especificar qu se debe hacer conmuy poco o nada de conocimiento de los detallados algoritmos orepresentaciones de los datos usados por el sistema. As, en elcaso de los SABD hay menos relacin entre los datos como los veel usuario y la representacin de esos arreglos en memoria.

    Los SABD son unos de los software ms complejos que se handesarrollado. Pensando en esos trminos, consideremos que unusuario de una BDD tiene muy pocos (si no ningn) conocimientosde programacin y desea obtener cierta informacin especfica dede la base de datos, podra el mismo formular las consultas a laBDD de la siguiente forma:Cuntos sueldos son mayores a $300.000?IMPRIMIR NOMBRESDONDE SUELDO > 300000;

    La siguiente figura muestra lo que realiza el SABD cuando se leentrega una consulta.

    Al realizar una consulta directamente desde un intrprete de SQL(SQL+, MS-QUERY, ISQL, etc.) ocurre lo siguiente:

    Primero es manejada por el procesador de consultas (este es un

    tipo de compilador de consultas, pero que en vez de generar

    Drac----17

  • 7/22/2019 Sq l Server Manual

    18/96

    Instalacin de SQLSERVER 2005

    cdigo objeto o lenguaje de mquina, genera una serie decomandos que son 'pasados' a las dems partes del SABD). Como elprocesador de consultas necesita conocer la estructura de laBDD, accesa la informacin que est en la definicin de la BDD.

    La consulta procesada es entregada a una serie de rutinas(manejador de la BDD). Uno de los roles del manejador de la BDDes traducir la consulta en trminos tales que el administradorde archivos la comprenda, esto es, en operaciones con archivosgeneralmente (Lea del archivo "X" los registros entre el "A y elT", y devulvame los campos "Z, W y Q").

    El manejador de archivos puede ser el sistema de archivosprovisto por el Sistema Operativo o un sistema de archivos queconozca la forma particular en que los datos estn almacenados(Oracle, SQLServer, MS-Access, etc.).

    La transformacin de las consultas en operaciones debe ser loms trivial posible, ya que la BDD puede ser representada enforma de estructuras muy complejas. El propsito de estasestructuras es hacer el acceso y manipulacin de la BDD lo msrpido y simple posible.

    El manejador de la base de datos cumple una serie de tareas,entre las cuales podemos destacar:

    1. Seguridad:No toda la informacin puede ser vista por todos losusuarios. Para este propsito, se deben identificar con unnombre de usuario y una contrasea, adems de que cadausuario puede accesar la informacin a las que se les depermiso.

    2. Integridad:Ciertas clusulas de reservas de integridad (propiedadesrequeridas por los datos) pueden ser chequeadas por elSABD. Es muy recomendable realizar algunos chequeos cuandoel usuario realiza ciertas operaciones sobre los datos enel DML, tales como insertar, eliminarlos o modificarlos(por ejemplo, no eliminar a un deudor si an posee deudasin cancelar, no poder modificar el estado de un deudor sino ha cancelado la primera cuota, etc.).

    3. Sincronizacin:A menudo tendremos muchos usuarios accesando los datos en unaBDD simultneamente. El SABD provee cierta proteccin acercade inconsistencias producto de dos simultneas sobre un datopor ejemplo, dos personas modificando simultneamente elmonto de la deuda de cierto deudor. Si el SABD no secuencia

    Drac----18

  • 7/22/2019 Sq l Server Manual

    19/96

    Instalacin de SQLSERVER 2005

    dichas transacciones, podramos estar cobrando el doble delvalor adeudado al deudor.

    Mientras un usuario de una seccin puede tener algunosconocimientos acerca de programacin, pudiendo efectuarconsultas sencillas a la base de datos:

    DESPLIEGUE MONTO DESDE LA TABLA SUELDOS

    Su jefe no necesariamente puede tener conocimiento deprogramacin, as que el simplemente quiere ejecutar losiguiente para obtener la misma informacin:

    EJECUTE SUELDOS

    Programas como "SUELDOS" son almacenados permanentemente y estndisponibles para los usuarios son llamados Programas deaplicacin. El responsable de la creacin de estos programas sellama Programador de Aplicaciones, que es un profesional queescribe y mantiene programas. El camino que utilizan estosprogramas es el descrito en la figura anterior como "Programas".Este programa es escrito una vez, y es compilado por elprocesador de consultas y almacenado en el sistema de archivosmanejado por el SABD. La versin compilada del programa esinvocada a travs de comandos y no necesita pasar por las fasesde compilacin y optimizacin, como lo hacen las consultasdirectas.

    Hay un camino indicado en la figura como "Esquema", en el cualla descripcin de la BDD se modifica a s misma. Esto es elprograma DDL (Data definition Language - Lenguaje de descripcinde datos) que describe a la BDD es modificado y recompilado enuna nueva descripcin que reemplaza a la anterior. Estaoperacin es muy poco frecuente, pero una de las msimportantes, y una persona solamente la puede ejecutar: elAdministrador de la BDD, el cual tiene "permisos" para modificarla BDD en toda su extensin. Algunas de las responsabilidadesdel Administrador de la BDD son:

    La creacin de la descripcin original de la estructura de laBDD y la forma en que se reflejarn en los archivos de la BDDfsica.

    El otorgar a los distintos usuarios los permisos para accesarla BDD o partes de la misma.

    Las modificaciones en la descripcin de la BDD o susrelaciones con la BDD fsica.

    El realizar respaldos peridicos a la BDD y reparar los

    posibles daos en la BDD debido a fallos del hardware.

    Drac----19

  • 7/22/2019 Sq l Server Manual

    20/96

    Instalacin de SQLSERVER 2005

    Modelos de Datos

    Un modelo de datos define las reglas por las cuales los datosson estructurados. Esta estructuracin, sin embargo, no da unainterpretacin completa acerca del significado de los datos, yla forma en que sern usados.

    Modelo Lgico

    Recibe como entrada el esquema conceptual y da como resultado unesquema lgico, que es una descripcin de la estructura de labase de datos que puede procesar el software DBMS.

    Modelo Fsico

    Recibe como entrada el esquema lgico y da como resultado unesquema fsico, que es una descripcin de la implementacin deuna base de datos en la memoria secundaria, describe lasestructuras de almacenamiento y los mtodos usados para tener unacceso efectivo a los datos.

    MODELO CONCEPTUAL

    Conjunto de conceptos y de reglas destinados a representar deforma global los aspectos lgicos de los diferentes tipos dedatos existentes en la realidad que est siendo analizada; ha depermitir reflejar el contenido semntico de los datos existentesen el sistema, pero no sus propiedades que respondan acaractersticas de tipo fsico (modo de almacenamiento, caminosde acceso, etc...)

    MODELO ENTIDAD RELACION

    Es la abstraccin de la realidad mediante un modelo utilizandopara esto entidades y atributos, ayudados mediante las reglassemnticas del lenguaje para su mayor integridad y exactitud, sebasa en una relacin, una tabla bidimensional. Los renglones dela tabla representan los registros y las columnas muestran losatributos de la entidad.

    El modelo entidad relacin es un diagrama, que como su nombre loindica, est compuesto de dos partes principales que son lasentidades y las relaciones entre stas. Este diagrama es elresultado del anlisis que se realiza para cada sistema deinformacin que se desea desarrollar.

    Drac----20

  • 7/22/2019 Sq l Server Manual

    21/96

    Instalacin de SQLSERVER 2005

    Las reglas semnticas son criterios que existen acerca delcomportamiento de los valores que pueden tomar los atributos odominios, con el fin de darles consistencia a la informacin.

    ENTIDAD

    Una entidad es una cosa o un objeto con significado real oimaginado, acerca de la cual existe la necesidad de informacin

    que se va a conocer o a mantener, de un conjunto de datoshomogneos, con atributos y caractersticas especiales.

    Representacin Grfica

    Una entidad se representa con un rectngulo con esquinasredondeadas dentro del cual se escribe el nombre correspondientepara su identificacin. El nombre se muestra en SINGULAR enletras MAYSCULAS, y sin ABREVIATURAS, adems debe ser el querepresente un tipo o clase de elemento,NO UNA INSTANCIA.

    Un ejemplo de clase es alumno y una instancia es Juanito, por

    tanto la entidad debe ser ALUMNO.

    Reglas para definir una entidad

    CUALQUIER OBJETO SLO PUEDE SER REPRESENTADO POR UNAENTIDAD. Es decir, las entidades son mutuamente

    exclusivas en todos los casos.

    Cada ENTIDAD debe ser identificada de forma nica. Esdecir, cada instancia (aparicin) de una ENTIDAD debeencontrarse separada e identificable claramente detodas las dems instancias de ese tipo de entidad.

    Conceptualmente las entidades y relaciones individuales sondistintas pero, desde la ptica de las bases de datos, ladiferencia debe expresarse en trminos de atributos.

    Drac----21

    ALUMNO

  • 7/22/2019 Sq l Server Manual

    22/96

    Instalacin de SQLSERVER 2005

    Para realizar tales distinciones o diferencias se debe asignaruna llave primaria en cada conjunto de entidades.

    La llave Primaria es el conjunto de uno o ms atributos(atributos primos), que tomados colectivamente no permitenidentificar de manera nica una entidad en el conjunto deentidades y una relacin en el conjunto de relaciones.

    Existen dos tipos de entidades por su naturaleza:

    Entidades fuertes: Son entidades que no dependen de laexistencia de ninguna otra.

    Entidades dbiles: Son entidades que dependen de otraentidad para su existencia, es decir, que sus atributos noles permiten identificarse de manera autnoma por tantoheredan atributos primos.

    Entidades de referencia: Son aquellas que por sunaturaleza son fuertes y ayudan a la integridad de losdatos para ser referenciadas por las llaves forneas,se caracterizan por qu no se pueden modificar, insertar yborrar, si no se es el propietario de la tabla.

    Atributos: Describen una entidad, la cualifica,identifica, clasifica.

    Representacin de los atributos:

    (#) Atributo Primo.

    (*) Atributo obligatorio o requerido.

    (o) Atributo opcional o norequerido.

    (u) Atributo no primo conunicidad.

    (&) Atributo de foraneidad ode enlace.

    (c) Atributo con dominio dedatos.

    Drac----22

  • 7/22/2019 Sq l Server Manual

    23/96

    Instalacin de SQLSERVER 2005

    Un primer ejemplo

    Vamos ver un primer ejemplo, que nos ayudar a llevar a laprctica todo esto y a introducir el modelo Entidad-Relacin.

    Supondremos que nos proponen el siguiente problema:

    Se desea informatizar un centro de estudios de pequeo tamao.Interesa controlar exclusivamente los asuntos acadmicos: qualumnos tenemos, qu cursos/asignaturas han realizado, quprofesores tenemos en plantilla, quin ha impartido cada uno de

    los cursos, etc.

    Estas seran las indicaciones que nos dara el cliente (o quenosotros pensaramos, si lo realizamos para nosotros mismos).

    Ahora tendramos que pensar si vemos que falta algo (y preguntaral cliente, si procede, cosas como si desea guardar la direcciny dems datos postales de los alumnos y de los profesores, o siquiere saber la nota que cada alumno obtuvo en cada curso) oincluso si sobra algo (porque resulte demasiado difcil dellevar a cabo

    Pasamos a desglosar en bloques de informacin. De momentotodava no hablaremos de tablas, sino de entidades (un nombrems ambiguo pero msAdecuado) y de relaciones entre estas entidades.

    En nuestro caso, las cosas (entidades) que tenemos sonbsicamente stas:

    .Alumnos

    .Cursos

    .Profesores

    Y las relaciones que hay entre estas entidades son:

    .Los profesores IMPARTEN cursos.

    .Los alumnos ASISTEN a cursos.

    (Indirectamente, los alumnos y los profesores tambin estnrelacionados: un alumno ha asistido a un curso que ha impartidoun cierto profesor; esta relacin ya queda reflejada a partir delas otras dos, as que no es necesario detallarla).

    Aun comentaremos algo ms sobre las relaciones. Unacaracterstica importante de las relaciones es sucardinalidad: por ejemplo, en la relacin de que los alumnosasisten a los cursos, es importante si a cada curso slo puede

    Drac----23

  • 7/22/2019 Sq l Server Manual

    24/96

    Instalacin de SQLSERVER 2005

    asistir un alumno o varios, y si un alumno puede asistir a unsolo curso o a varios.

    Tendremos cuatro posibilidades:

    1. Que cada alumno asista uno y solo uno de los cursos (seexpresa como 1:1 -uno a uno-)

    2. Que cada alumno pueda asistir a muchos cursos, pero encada curso slo puede haber un alumno (1:M -uno amuchos-)

    3. Que cada alumno pueda asistir a un nico curso, peropueda haber varios alumnos en un curso (M:1 -muchos auno-).

    4. Que cada alumno pueda asistir a varios cursos, y en cadacurso pueda haber varios alumnos (M:M -muchos a muchos-)

    En nuestro caso, la relacin asistir es una relacin demuchos a muchos (M:M).

    Podramos preguntarnos la cardinalidad de la otra relacin (losprofesores imparten cursos). En este caso, cada profesor puedeimpartir varios cursos, y supondremos que cada curso esimpartido por un nico profesor (estoy dando por supuesto que seconsidera distinto un curso de Bases de Datos impartido en unafecha y otro de la misma temtica pero impartido en fechadistinta). Se tratara de una relacin de uno a muchos 1:M.

    Una observacin: en las relaciones es importante el sentido enel que se leen. Por ejemplo, la relacin los profesoresimparten cursos es una relacin 1:M (uno a muchos), mientrasque la relacin opuestalos cursos sonimpartidos porprofesores es unarelacin M:1 (muchos auno).

    Estas relaciones quehemos comentado sonrelaciones binarias(entre dosentidades).

    Este es un modelo que nospermitir dibujar lasentidades y lasrelaciones que existen entre ellas. Nosotros usaremos el modeloEntidad-Relacin Extendido (EER, de aqu en adelante).

    Drac----24

  • 7/22/2019 Sq l Server Manual

    25/96

    Instalacin de SQLSERVER 2005

    En esta notacin se representan las entidades como un rectnguloy las relaciones binarias como un rombo partido por la mitad. Sila relacin es 1:M, una de las mitades (la que corresponde almuchos) deber estar sombreada, y si es M:M, todo el romboestar sombreado.

    Diagrama del Ejemplo

    As desencillo:tenemos 3entidades

    (profesores, cursos, alumnos) y dos relaciones (impartir, entreprofesores y alumnos, 1:M, y asistir, entre alumnos y cursos,M:M).

    Realmente, ya a este nivel se suele indicar los apartados quehay en cada entidad (lo que sern los campos de nuestrastablas). A estos apartados les llamaremos atributos, y serepresentan como pequeas elipses que salen de las entidades.

    Vamos a pensar primero qu atributos nos podra interesar paranuestras entidades:

    Alumnos:

    .CI (Cedula de Identidad)

    .Nombre

    .Direccin

    .Ciudad

    .Telfono

    .Fecha de nacimiento

    .Fecha de alta en el centro

    Drac----25

  • 7/22/2019 Sq l Server Manual

    26/96

    Instalacin de SQLSERVER 2005

    .Fotografa

    Profesores:

    .CI

    .Nombre

    .Direccin

    .Ciudad

    .Telfono

    .Conocimientos

    .Sueldo

    .Cuenta bancaria

    Cursos:

    .Nombre del curso

    .Fecha de comienzo

    .Duracin (horas)

    .Costo (monto)

    .Nmero mximo de alumnos

    Lo que s vamos a pensar ya es cul de esos datos nos permitirdistinguir una ficha de otra. Esto se hace porque podemos tenerdos alumnos con el mismo nombre, pero claramente son personasdistintas, y debemos saber qu cursos ha realizado cada uno deellos sin posibilidad de confusin, para no dar a uno el diplomaque corresponda a otro, ni cobrarle un dinero de otro.

    En el caso de los alumnos, no son datos nicos los siguientes:el nombre (puede repetirse, incluso con apellidos), la direccin(dos hermanos o dos amigos pueden vivir en la misma casa), eltelfono (ocurre lo mismo), la fecha de nacimiento (tambinpodemos encontrar dos alumnos que hayan nacido el mismo da),etc. Lo que realmente distinguir a un alumno de otro es sunmero de CI o pasaporte, que s es nico. Pues bien, este datoque puede distinguir una persona de otra (o en general una ficha

    -registro- de otra) es lo que llamaremos la clave.

    Drac----26

  • 7/22/2019 Sq l Server Manual

    27/96

    Instalacin de SQLSERVER 2005

    Puede ocurrir que no exista nada que nos sirva claramente comoclave, como es el caso de los cursos: no es nico el nombre(podemos impartir ms de un curso con el mismo contenido), ni lafecha de comienzo (varios cursos pueden comenzar el mismo da),ni la duracin, ni el importe, ni el nmero mximo de alumnos.En estos casos se suele aadir algo arbitrario, un cdigo, quenos permita distinguir un curso de otro (en general una ficha-registro- de otra). En nuestro caso, incluiramos un nuevoatributo, llamado Cdigo de curso.

    Un ltimo comentario antes de ver cmo quedara nuestro diagrama

    EER con sus atributos. Puede ocurrir que nuestra entidad tengavarios atributos nicos, todos los cuales puedan servir comoclave. Entonces escogemos una de ellas como clave principal, yel resto sern claves alternativas, que no llegaremos a usarcomo claves. En el diagrama, el atributo que vaya a utilizarsecomo clave principal aparecer subrayado.

    Ahora ya s. Nuestro diagrama quedara as (no incluyo todos losatributos que habamos pensado, slo algunos como ejemplo, quees con los que trabajaremos a partir de ahora)

    Convirtiendo el diseo a tablas

    Mtodo general

    Drac----27

  • 7/22/2019 Sq l Server Manual

    28/96

    Instalacin de SQLSERVER 2005

    Posiblemente la mayor ventaja del modelo EER es que laconversin a tablas es casi inmediata:

    En principio, cada entidad corresponder a una tabla, ylos atributos de la entidad darn lugar a los campos de latabla.

    Las relaciones de uno a muchos (1:M) se reflejarnponiendo la clave del uno en la tabla de los muchos.Me explico: si un profesor imparte muchos cursos (y cadacurso es impartido por un nico profesor), lo que haremos es

    poner el cdigo del profesor (su CI) en la ficha de cadacurso que imparte.

    Las relaciones de muchos a muchos (M:M) aparecern comouna nueva tabla, en la que cada registro estar formadopor las claves de las tablas que se relacionan. En nuestrocaso, la relacin de muchos a muchos entre alumnos ycursos se convertir en una nueva tabla, en la que cadaregistro contiene dos campos: el cdigo del curso al quese asiste y el CI del alumno que ha asistido.

    Las relaciones de uno a uno muchas veces son debidas aun fallo de diseo, y corresponden a datos que deberanestar en una misma tabla. Por ejemplo, si suponemos quecada persona tendr una nica direccin postal, y cadadireccin corresponde a una nica persona, entonces eldato de la direccin postal deber ser uno ms de la tablaque almacena todos los datos de esa persona. Estasimplificacin que hemos hecho no es del todo cierta: aveces las relaciones 1:1 debern reflejarse como una nuevatabla.

    Convirtiendo a tablas nuestro ejemplo.

    As, en nuestro caso, obtendramos las siguientes tablas (con suscampos, limitndonos a los atributos que hemos incluido en elltimo diagrama):

    Alumnos:

    CI (clave)

    Nombre

    Drac----28

  • 7/22/2019 Sq l Server Manual

    29/96

    Instalacin de SQLSERVER 2005

    Tlf

    Profesores:

    CI (clave)

    Nombre

    Direcc

    Cursos:

    Cdigo (clave)

    Nombre del curso

    Fecha de comienzo

    CI del profesor

    Asistir:

    Cdigo del curso

    CI del alumno

    Ya slo falta una cosa. Hay que decidir los tipos de datos de loscampos y tambin los tamaos de los campos. Esto es porque alordenador habr que darle toda la informacin muy cuadriculada,para que podamos guardar toda la informacin que nos interesa perosin desperdiciar demasiado espacio.

    Los tipos de datos existentes pueden variar de un sistema de basesde datos a otro, as que vamos a limitarnos (por ahora) a hacer unaprimera aproximacin, acercndonos al caso de nuestros campos:

    El nombre de un alumno, de un profesor o de un curso,estar formado bsicamente por letras. Todos los sistemasde bases de datos tendrn un tipo de datos adecuado paraalmacenar series de letras (que podrn incluir alguna cifranumrica o algn otro smbolo). Ser un tipo llamadoTexto, Alfanumrico, Carcter o algo similar. Encuanto al tamao, nos puede bastar con unas 40 letras(insisto: no debemos quedarnos cortos, pero si nosexcedemos, estaremos desperdiciando espacio).

    Drac----29

  • 7/22/2019 Sq l Server Manual

    30/96

    Instalacin de SQLSERVER 2005

    La direccin tendr tambin letras, nmeros y algn otrosmbolo, de modo que tambin ser tipo Texto, y unas 50letras de tamao puede estar bien.

    El CI del alumno o delprofesor contendr cifras numricas,pero posiblemente tambin alguna letra, de modo que nosinteresar que tambin este dato sea de tipo Texto, yentre 10 y 15 letras de tamao (dependiendo de si vamos aescribir puntos en los millares, guin antes de la letra,etc.).

    El telfono del alumno slo contendr cifras. Tendremos untipo de dato Numrico, que nos puede servir en este casoy que ser imprescindible en el caso de que queramos haceroperaciones aritmticas con los datos almacenados en uncampo. En el caso del telfono, no necesitamos haceroperaciones, y tambin es posible que nos interese escribirparntesis, guiones o espacio, de modo que quiz sea msinteresante dejarlo como tipo Texto, de unas 12-15letras. Adems, es frecuente que se ignoren (no semuestran ni se guardan) los ceros a la izquierda de unaexpresin numrica, y esto es algo que no deberemospermitir con un telfono, que podra tener un prefijoprovincial o internacional que comience por 0 (lo mismoocurre con los cdigos postales).

    Para la fecha de inicio de un curso, casi todos lossistemas de bases de datos nos permitirn utilizar un tipode datos llamado Fecha.

    El cdigo de un curso queda a nuestra eleccin: si queremosque est formado slo por nmeros, sera tipo de datosNumrico; si queremos que pueda contener letras u otrossmbolos, debera ser de tipo Texto.

    Algunos sistemas de bases de datos van ms all y permitenun tipo Autonumrico, que es un dato numrico que vaincrementndose automticamente (en el primer registro queintroduzcamos ser un 1, en el segundo un 2, y assucesivamente), para que no tengamos ni siquiera que pensarqu cdigo queremos para cada registro (hay gente a quienesto le parece muy cmodo y otros que lo considerandemasiado rgido).

    Tipos de datos existentes.

    Drac----30

  • 7/22/2019 Sq l Server Manual

    31/96

    Instalacin de SQLSERVER 2005

    En general, los tipos de datos habituales, que encontraremos encasi cualquier sistema de bases de datos, son los siguientes:

    Texto (text,nchar,nvarchar,ntext), cuando nuestro campodeba almacenar letras y quizs algn otro tipo de smbolosde puntuacin y/o cifras numricas. Deberemos indicar lacantidad de letras (o en general, de caracteres) para lasque queremos dejar espacio (no deberamos quedarnos cortos,para que nos quepa toda la informacin que nos interesa,pero tampoco hay que dejar mucho espacio de ms, oestaramos desperdiciando una parte de la capacidad denuestros sistemas de almacenamiento sin necesidad).

    Numrico(int, Money, smallint, smallmoney, real, float,decimal), cuando nuestro campo vaya a guardar cantidadesnumricas, especialmente si ms adelante necesitaremosrealizar operaciones aritmticas con estas cantidadesnumricas, si se va guardar la informacin en la baseusaremos nmero entero largo o nmero real de dobleprecisin, etc.

    Fecha, para almacenar fechas (y, en ocasiones, tambinhoras). Se utiliza para que las comparaciones y las

    ordenaciones sean correctas (por ejemplo, si escribimos lasfechas 12/01/2000 y 31/10/1975 como texto, el ordenadorconsiderara que la primera es menor -anterior- a lasegunda, lo cual es claramente incorrecto).

    Aqu un cuadro de tipos de datos usados en SQLSERVER 2005

    Bigint Binario Bit char cursor

    datetime Decimal Float image Int

    Money Nchar ntext nvarchar real

    smalldatetime Smallint Smallmoney text timestamp

    Tinyint Varbinary Varchar uniqueidentifier

    Drac----31

  • 7/22/2019 Sq l Server Manual

    32/96

    Instalacin de SQLSERVER 2005

    Problemas que hemos evitado con nuestro diseo.

    Cuando uno piensa directamente en tablas, puede sentirse tentadoa crear una nica tabla para los cursos (o casi), que contuvieraesta informacin (por ejemplo):

    .Nombre del curso

    .Duracin

    .Fecha de comienzo

    .Alumno1

    .NotaAlumno1

    .Alumno2

    .NotaAlumno2

    .Alumno3

    .NotaAlumno3

    .Alumno4

    .NotaAlumno4

    .Alumno5

    .NotaAlumno5

    Esto es tan grave (mucho) como frecuente (he visto erroressimilares en los datos manipulados por conocidos programas decontabilidad). Hemos dejado espacio para 5 alumnos en cada curso.Veamos los problemas que esto puede provocar:

    Si en algn curso hay menos de 5 alumnos, estamosdesperdiciando el espacio que habamos reservado para losdems.

    Si necesitamos que entren ms de 5 alumnos a un mismo curso,estamos desbordando lo que habamos previsto y tenemos queempezar a hacer parches (dos fichas para el mismo curso?).

    Si queremos buscar qu cursos ha realizado un cierto alumno,tendremos que recorrer todos los registros, mirando si su

    nombre aparece en los campos (atributos) alumno1, alumno2,

    Drac----32

  • 7/22/2019 Sq l Server Manual

    33/96

    Instalacin de SQLSERVER 2005

    alumno3, alumno4 o alumno5. Y se complica todava ms si envez de una simple bsqueda queremos obtener un listado queincluya varios datos.

    En nuestro diagrama podemos ver que nuestra base de datos permiteque un curso tenga 1 alumno, 50 alumnos o incluso ninguno, y enningn caso estaremos desperdiciando espacio. Para buscar losalumnos que han asistido a un cierto curso o incluso para crear unlistado con esta informacin, slo tendremos que recorrer la tablaAsistir.

    Problemas que an tiene nuestro diseo.

    Hemos evitado algunos errores frecuentes, pero nuestra base dedatos todava no es todo lo buena que debera.

    Por ejemplo, si miramos el primer estudio que hemos hecho de losatributos que nos interesara almacenar, vemos que entre un alumnoy un profesor hay muchos datos en comn: ambos tienen un nombre, unDNI, una direccin, un telfono, una ciudad Y de hecho, si uno denuestros profesores fuese a su vez alumno de otro curso, tendramossus datos por duplicado, con todos los problemas y riesgos que esto

    conlleva (problemas de espacio desperdiciado y riesgos de que sicambia alguno de sus datos no nos acordemos de cambiarlo en todaslas tablas en las que aparece, y esto dara lugar a inconsistenciasen nuestros datos).

    Esto se debe a que no hemos profundizado todo lo que deberamos. Enrealidad, tanto alumnos como profesores son personas. Esto es loque se conocen como una generalizacin, y se suele resolvercreando una tabla que contendra todos los datos que son comunes alas personas, y conservando en las tablas de alumnos y deprofesores slo los datos que realmente son exclusivos de cada

    uno de ellos (adems del CI, que nos permitira enlazar los datosque un alumno tiene por ser alumno con los que tiene por serpersona).

    Normalizacin de Bases de Datos

    Se explican los conceptos de la normalizacin de bases de datos,mismos que son necesarios para un buen diseo de una base de datos.

    Normalizacin de Bases de Datos

    Drac----33

  • 7/22/2019 Sq l Server Manual

    34/96

    Instalacin de SQLSERVER 2005

    Qu es la normalizacin?

    La normalizacin es el proceso mediante el cual se transformandatos complejos a un conjunto de estructuras de datos mspequeas, que adems de ser ms simples y ms estables, son msfciles de mantener. Tambin se puede entender la normalizacincomo una serie de reglas que sirven para ayudar a losdiseadores de bases de datos a desarrollar un esquema queminimice los problemas de lgica. Cada regla est basada en laque le antecede. La normalizacin se adopt porque el viejo

    estilo de poner todos los datos en un solo lugar, como unarchivo o una tabla de la base de datos, era ineficiente yconduca a errores de lgica cuando se trataban de manipular losdatos.

    La normalizacin tambin hace las cosas fciles de entender. Losseres humanos tenemos la tendencia de simplificar las cosas almximo. Lo hacemos con casi todo, desde los animales hasta conlos automviles. Vemos una imagen de gran tamao y la hacemosms simple agrupando cosas similares juntas. Las guas que la

    normalizacin provee crean el marco de referencia parasimplificar una estructura de datos compleja.

    Otra ventaja de la normalizacin de base de datos es el consumode espacio. Una base de datos normalizada ocupa menos espacio endisco que una no normalizada. Hay menos repeticin de datos, loque tiene como consecuencia un mucho menor uso de espacio endisco.

    El proceso de normalizacin tiene un nombre y una serie dereglas para cada fase. Esto puede parecer un poco confuso al

    principio, pero poco a poco se va entendiendo el proceso, ascomo las razones para hacerlo de esta manera.

    Grados de normalizacin

    Existen bsicamente tres niveles de normalizacin: Primera FormaNormal (1NF), Segunda Forma Normal (2NF) y Tercera Forma Normal(3NF). Cada una de estas formas tiene sus propias reglas.

    Cuando una base de datos se conforma a un nivel, se considera

    normalizada a esa forma de normalizacin. No siempre es una

    Drac----34

  • 7/22/2019 Sq l Server Manual

    35/96

    Instalacin de SQLSERVER 2005

    buena idea tener una base de datos conformada en el nivel msalto de normalizacin, puede llevar a un nivel de complejidadque pudiera ser evitado si estuviera en un nivel ms bajo denormalizacin.

    En la tabla siguiente se describe brevemente en qu consistecada una de las reglas, y posteriormente se explican con msdetalle.

    Regla DescripcinPrimera FormaNormal (1FN)

    Incluye la eliminacin de todos losgrupos repetidos

    Segunda FormaNormal (2FN)

    Asegura que todas las columnas queno son llave sean completamentedependientes de la llave primaria(PK)

    Tercera Forma Normal(3FN)

    Elimina cualquier dependenciatransitiva. Una dependenciatransitiva es aquella en la cuallas columnas que no son llave sondependientes de otras columnas quetampoco son llave.

    Primera Forma Normal

    La regla de la Primera Forma Normal establece que las columnasrepetidas deben eliminarse y colocarse en tablas separadas.

    Poner la base de datos en la Primera Forma Normal resuelve elproblema de los encabezados de columna mltiples. Muy a menudo,los diseadores de bases de datos inexpertos harn algo similara la tabla no normalizada. Una y otra vez, crearn columnas que

    representen los mismos datos.

    La normalizacin ayuda a clarificar la base de datos y aorganizarla en partes ms pequeas y ms fciles de entender. Enlugar de tener que entender una tabla gigantesca y monolticaque tiene muchos diferentes aspectos, slo tenemos que entenderlos objetos pequeos y ms tangibles, as como las relacionesque guardan con otros objetos tambin pequeos.

    Segunda Forma Normal

    La regla de la Segunda Forma Normal establece que todas lasdependencias parciales se deben eliminar y separar dentro de sus

    Drac----35

  • 7/22/2019 Sq l Server Manual

    36/96

    Instalacin de SQLSERVER 2005

    propias tablas. Una dependencia parcial es un trmino quedescribe a aquellos datos que no dependen de la llave primariade la tabla para identificarlos.

    Una vez alcanzado el nivel de la Segunda Forma Normal, secontrolan la mayora de los problemas de lgica. Podemosinsertar un registro sin un exceso de datos en la mayora de lastablas.

    Tercera Forma Normal

    Una tabla est normalizada en esta forma si todas las columnas

    que no son llave son funcionalmente dependientes por completo dela llave primaria y no hay dependencias transitivas. Comentamosanteriormente que una dependencia transitiva es aquella en lacual existen columnas que no son llave que dependen de otrascolumnas que tampoco son llave.

    Cuando las tablas estn en la Tercera Forma Normal se previenenerrores de lgica cuando se insertan o borran registros. Cadacolumna en una tabla est identificada de manera nica por la

    llave primaria, y no debe haber datos repetidos. Esto provee unesquema limpio y elegante, que es fcil de trabajar y expandir.

    Un dato sin normalizar no cumple con ninguna regla denormalizacin. Para explicar con un ejemplo en qu consiste cadauna de las reglas, vamos a considerar los datos de la siguientetabla.

    Al examinar estos registros, podemos darnos cuenta que contienen ungrupo repetido para NUM_ITEM, DESC_ITEM, CANT y PRECIO. La 1FNprohbe los grupos repetidos, por lo tanto tenemos que convertir ala primera forma normal. Los pasos a seguir son:

    Tenemos que eliminar los grupos repetidos.

    Drac----36

  • 7/22/2019 Sq l Server Manual

    37/96

    Instalacin de SQLSERVER 2005

    Tenemos que crear una nueva tabla con la PK de latabla base y el grupo repetido.

    Los registros quedan ahora conformados en dos tablas que llamamosORDENES yARTICULOS_ORDENES

    ORDENES

    ARTICULOS_ORDENES

    Ahora procederemos a aplicar la segunda formal normal, es decir,tenemos que eliminar cualquier columna no llave que no dependa dela llave primaria de la tabla. Los pasos a seguir son:

    Determinar cules columnas que no son llave nodependen de la llave primaria de la tabla.

    Eliminar esas columnas de la tabla base.

    Crear una segunda tabla con esas columnas y la(s)columna(s) de la PK de la cual dependen.

    La tabla ORDENES est en 2FN. Cualquier valor nico de ID_ORDENdetermina un slo valor para cada columna. Por lo tanto, todas lascolumnas son dependientes de la llave primaria ID_ORDEN.

    Por su parte, la tablaARTICULOS_ORDENES no se encuentra en 2FN yaque las columnas PRECIO y DESC_ITEMson dependientes deNUM_ITEM,pero no son dependientes de ID_ORDEN. Lo que haremos a continuacines eliminar estas columnas de la tabla ARTICULOS_ORDENES y crearuna tablaARTICULOS con dichas columnas y la llave primaria de laque dependen.

    Las tablas quedan ahora de la siguiente manera.

    ARTICULOS_ORDENES

    Drac----37

  • 7/22/2019 Sq l Server Manual

    38/96

    Instalacin de SQLSERVER 2005

    ARTICULOS

    La tercera forma normal nos dice que tenemos que eliminar cualquiercolumna no llave que sea dependiente de otra columna no llave. Lospasos a seguir son:

    Determinar las columnas que son dependientes de otracolumna no llave.

    Eliminar esas columnas de la tabla base.

    Crear una segunda tabla con esas columnas y con la

    columna no llave de la cual son dependientes.

    Al observar las tablas que hemos creado, nos damos cuenta que tantola tabla ARTICULOS, como la tabla ARTICULOS_ORDENES se encuentranen 3FN. Sin embargo la tabla ORDENES no lo est, ya queNOM_CLIENTEy ESTADO son dependientes de ID_CLIENTE, y esta columna no es lallave primaria.

    Para normalizar esta tabla, moveremos las columnas no llave y lacolumna llave de la cual dependen dentro de una nueva tablaCLIENTES. Las nuevas tablas CLIENTES y ORDENES se muestran acontinuacin.

    ORDENES

    CLIENTES

    Drac----38

  • 7/22/2019 Sq l Server Manual

    39/96

    Instalacin de SQLSERVER 2005

    Qu tan lejos debe llevar la normalizacin?

    La siguiente decisin es qu tan lejos debe llevar lanormalizacin? La normalizacin es una ciencia subjetiva.Determinar las necesidades de simplificacin depende de nosotros.Si nuestra base de datos va a proveer informacin a un solo usuariopara un propsito simple y existen pocas posibilidades deexpansin, normalizar los datos hasta la 3FN quiz sea algoexagerado. Las reglas de normalizacin existen como guas paracrear tablas que sean fciles de manejar, as como flexibles yeficientes. A veces puede ocurrir que normalizar los datos hasta elnivel ms alto no tenga sentido.

    Se estn dividiendo tablas slo para seguir las reglas o estasdivisiones son en verdad prcticas?.

    stas son el tipo de cosas que nosotros como diseadores de la basede datos, necesitamos decidir, y la experiencia y el sentido comnnos pueden auxiliar para tomar la decisin correcta. Lanormalizacin no es una ciencia exacta, ms bien subjetiva.

    Existen seis niveles ms de normalizacin que no se han discutidoaqu. Ellos son Forma Normal Boyce-Codd, Cuarta Forma Normal (4NF),

    Quinta Forma Normal (5NF) o Forma Normal de Proyeccin-Unin, FormaNormal de Proyeccin-Unin Fuerte, Forma Normal de Proyeccin-UninExtra Fuerte y Forma Normal de Clave de Dominio. Estas formas denormalizacin pueden llevar las cosas ms all de lo quenecesitamos. stas existen para hacer una base de datos realmenterelacional. Tienen que ver principalmente con dependenciasmltiples y claves relacionales.

    En resumen

    La normalizacin es una tcnica que se utiliza para crearrelaciones lgicas apropiadas entre tablas de una base de datos.Ayuda a prevenir errores lgicos en la manipulacin de datos. Lanormalizacin facilita tambin agregar nuevas columnas sin romperel esquema actual ni las relaciones.

    Existen varios niveles de normalizacin: Primera Forma Normal,Segunda Forma Normal, Tercera Forma Normal, Forma Normal Boyce-Codd, Cuarta Forma Normal, Quinta Forma Normal o Forma Normal de

    Proyeccin-Unin, Forma Normal de Proyeccin-Unin Fuerte, Forma

    Drac----39

  • 7/22/2019 Sq l Server Manual

    40/96

    Instalacin de SQLSERVER 2005

    Normal de Proyeccin-Unin Extra Fuerte y Forma Normal de Clave deDominio. Cada nuevo nivel o forma nos acerca ms a hacer una basede datos verdaderamente relacional.

    Se discutieron las primeras tres formas. stas proveen suficientenivel de normalizacin para cumplir con las necesidades de lamayora de las bases de datos. Normalizar demasiado puede conducira tener una base de datos ineficiente y hacer a su esquemademasiado complejo para trabajar. Un balance apropiado de sentidocomn y prctico puede ayudarnos a decidir cundo normalizar.

    Drac----40

  • 7/22/2019 Sq l Server Manual

    41/96

    Instalacin de SQLSERVER 2005

    GUIA DEL SQLSERVER 2005

    Selecciona la opcin donde se puede ejecutar el SQLSERVER 2005,puede encontrarlo como indica la figura:

    Y doble clic a la opcin SQL Server Management Studio Express,luego de ello aparecern las siguientes pantallas.

    Para este caso aparecerla siguiente pantalla,de acuerdo a la

    configuracin que se diera en la instalacin. Y procedemos aconectarnos a la base local indicada anteriormente.

    Drac----41

  • 7/22/2019 Sq l Server Manual

    42/96

    Instalacin de SQLSERVER 2005

    Esta es la pantalla que le aparecer y es la principal.

    En esta gua no s explicar los estndares de opciones deFila, Edit., etc., nos concentraremos en la seccin deObject Explorer.

    Una que se abra todas las opciones aparecer desplagado de

    la siguiente manera:

    Drac----42

  • 7/22/2019 Sq l Server Manual

    43/96

    Instalacin de SQLSERVER 2005

    Databases.- Dondese alojaran todaslas bases dedatos creadas olas del sistema.

    Security. Carpetadonde estarn lospermisos y

    usuarios para elacceso alservidor, o lasbases.

    Server Object.Esta opcin nospermitirrespaldar lasbases de datoscreadas ytambin poderrestaurarlas.

    Replication. Estaopcin nospermitirreplicar lainformacin de labase y un sistemaingresado debases de datos.

    Management. Esta opcin nos permitir revisar los log delos servidores y monitorear las bases.

    New Query. Esta nos permite que sedespliegue la venta donde se ejecutarlas sentencias o ordenes a la base dedatos, tambin se podrn ejecutar los

    escript.

    Drac----43

  • 7/22/2019 Sq l Server Manual

    44/96

    Instalacin de SQLSERVER 2005

    Saldr la siguiente pantalla:

    A continuacin se indica algunas de las opciones deleditor, que nos permitir trabajar sobre los objetos de labase, realizando cualquier tipo de trabajo de acuerdo a susnecesidades.

    Connect: Nos permite conectarnos a algn servidor requerido

    Disconnect: Permite la desconexin al servidor.

    Available Databases: Indica la base de datos en uso

    Drac----44

  • 7/22/2019 Sq l Server Manual

    45/96

    Instalacin de SQLSERVER 2005

    Execute:Ejecutar cualquier lnea que se encuentra en eleditor o sombreada, esto refirindonos a las sentenciasTRANSACT SQL.

    Drac----45

  • 7/22/2019 Sq l Server Manual

    46/96

    Instalacin de SQLSERVER 2005

    TRANSACT SQL

    DEL SQL SERVER 2005

    Ejemplos y Sintaxis

    Es el lenguaje SQL que emplea SQL Server 2005, cuando se ejecutauna instruccin SQL simple se est empleando Transact, se puedeforzar a que utilice el estndar SQL-92, que realmente es lo mismopero con menor funcionalidad.

    USE

    Cambia el contexto de la base de datos al de la base de datosespecificada.

    Sintaxis

    USE {baseDatos}

    GO

    Indica a las herramientas de Microsoft SQL Server el final de unlote de instrucciones Transact-SQL. Permite ejecutar varias

    instrucciones por separado una a continuacin de la otra.

    Sintaxis

    GO

    Ejemplo:

    USE pubsGO

    DECLARE @NmbrAuthors int

    Drac----46

  • 7/22/2019 Sq l Server Manual

    47/96

    Instalacin de SQLSERVER 2005

    SELECT @NmbrAuthors = COUNT(*)FROM authorsPRINT 'The number of authors as of ' +

    CAST(GETDATE() AS char(20)) + ' is ' +CAST(@NmbrAuthors AS char (10))

    GO

    PRINT

    Devuelve al cliente un mensaje definido por el usuario.

    Observaciones

    Para imprimir un mensaje de error definido por el usuario cuando setiene el nmero de error que se puede obtener con @@ERROR, utiliceRAISERROR en lugar de PRINT.

    Ejemplos

    Impresin ejecutada condicionalmente (IF EXISTS)

    Este ejemplo utiliza la instruccin PRINT para devolver un mensaje condicionalmente.

    IF EXISTS (SELECT zip FROM authors WHERE zip = '94705')PRINT 'Berkeley author'

    Crear y mostrar una cadena

    Este ejemplo convierte el resultado de la funcin GETDATE al tipode datos varchar y le concatena texto literal que devuelve PRINT.

    PRINT 'This message was printed on ' +

    RTRIM(CONVERT(varchar(30), GETDATE())) + '.'

    EXECUTE - EXEC

    Ejecuta una funcin definida por el usuario y que devuelve valoresescalares, un procedimiento del sistema, un procedimientoalmacenado definido por el usuario o un procedimiento almacenadoextendido. Admite tambin la ejecucin de una cadena de caracteresen un proceso por lotes Transact-SQL.

    Para llamar a una funcin, utilice la sintaxis que se describe paraEXECUTE stored_procedure.

    Drac----47

  • 7/22/2019 Sq l Server Manual

    48/96

    Instalacin de SQLSERVER 2005

    Utilizar EXECUTE con una variable de procedimiento almacenado

    El ejemplo siguiente crea una variable que representa un nombre deprocedimiento almacenado.

    DECLARE @proc_name varchar(30)SET @proc_name = 'sp_who'EXEC @proc_name

    El procedimiento almacenado proc_calculate_taxes se puede ejecutarcon muchas combinaciones:

    EXECUTE proc_calculate_taxes @p2 = 'A'EXECUTE proc_calculate_taxes 69, 'B'EXECUTE proc_calculate_taxes 69, 'C', 'House'EXECUTE proc_calculate_taxes @p1 = DEFAULT, @p2 = 'D'

    IDENTIFICADORES TRANSACT-SQL

    @ = variable global

    # = objeto temporal local

    ## = objeto temporal global

    DECLARE @local_variable

    Las variables se declaran en el cuerpo de un proceso por lotes oprocedimiento con la instruccin DECLARE, y se les asignan valorescon una instruccin SET o SELECT. Las variables de cursor pueden

    declararse con esta instruccin y utilizarse con otrasinstrucciones relacionadas con los cursores. Despus de sudeclaracin, todas las variables se inicializan con NULL (nulo).

    A. Utilizar DECLARE

    Este ejemplo utiliza una variable local denominada @find pararecuperar informacin de todos los autores cuyos apellidos

    comienzan con Ring.

    USE pubsDECLARE @find varchar(30)

    SET @find = 'Ring%'

    Drac----48

  • 7/22/2019 Sq l Server Manual

    49/96

    Instalacin de SQLSERVER 2005

    SELECT au_lname, au_fname, phoneFROM authorsWHERE au_lname LIKE @find

    El siguiente es el conjunto de resultados:

    au_lname au_fname phone-------------------------------------- --------------------------------Ringer Anne 801 826-0752Ringer Albert 801 826-0752

    (2 row(s) affected)

    B. Utilizar DECLARE con dos variables

    Este ejemplo recupera nombres de empleados de los empleadosde Binnet & Hardley (pub_id= 0877) contratados el 1 deenero de 1993 o posteriormente.

    USE pubsSET NOCOUNT ONGODECLARE @pub_id char(4), @hire_date datetimeSET @pub_id = '0877'SET @hire_date = '1/01/93'-- Here is the SELECT statement syntax to assign values to two local-- variables.-- SELECT @pub_id = '0877', @hire_date = '1/01/93'SET NOCOUNT OFFSELECT fname, lnameFROM employeeWHERE pub_id = @pub_id and hire_date >= @hire_date

    El siguiente es el conjunto de resultados:

    fname lname-------------------- ------------------------------Anabela DominguesPaul Henriot

    (2 row(s) affected)

    Drac----49

  • 7/22/2019 Sq l Server Manual

    50/96

    Instalacin de SQLSERVER 2005

    TRIGGERSA. Utilizar un desencadenador con un mensaje de aviso

    El siguiente desencadenador de ejemplo imprime un mensajeen el cliente cuando alguien intenta agregar o cambiardatos en la tablatitles.

    Nota El mensaje 50009 es un mensaje definido por el

    usuario en sysmessages. Para obtener ms informacinacerca de la creacin de mensajes definidos por elusuario, consulte sp_addmessage.

    USE pubsIF EXISTS (SELECT name FROM sysobjects

    WHERE name = 'reminder' AND type = 'TR') DROP TRIGGERreminderGO

    CREATE TRIGGERreminderON titles

    FOR INSERT, UPDATEAS RAISERROR (50009, 16, 10)GO

    F. Utilizar COLUMNS_UPDATED para probar ms de 8 columnas

    Si tiene que probar actualizaciones que afectan a otrascolumnas que no sean las 8 primeras de una tabla, debeutilizar la funcin SUBSTRING para probar siCOLUMNS_UPDATED devuelve el bit correcto. Este ejemploprueba las actualizaciones que afectan a las columnas 3, 5o 9 de la tablaNorthwind.dbo.Customers.

    USE NorthwindDROP TRIGGER tr1GOCREATE TRIGGERtr1 ON CustomersFORUPDATEAS

    IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(3-1))+ power(2,(5-1)))AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(1-1))))

    PRINT 'Columns 3, 5 and 9 updated'GO

    UPDATE Customers

    Drac----50

  • 7/22/2019 Sq l Server Manual

    51/96

    Instalacin de SQLSERVER 2005

    SET ContactName=ContactName,

    Address=Address,Country=Country

    GO

    CREATE FUNCTION

    A. Funcin de valores escalares definida por el usuario quecalcula la semana ISO

    En este ejemplo, una funcin definida por el usuario,

    ISOweek, toma un argumento de fecha y calcula el nmero desemana ISO. Para que esta funcin realice el clculocorrectamente, se debe llamar a SET DATEFIRST 1 antes dellamar a la funcin.

    CREATE FUNCTION ISOweek (@DATE datetime)RETURNS int

    ASBEGIN

    DECLARE @ISOweek intSET @ISOweek= DATEPART(wk,@DATE)+1

    -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')

    --Special cases: Jan 1-3 may belong to the previous yearIF (@ISOweek=0)SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1

    AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1--Special case: Dec 29-31 may belong to the next year

    IF ((DATEPART(mm,@DATE)=12) AND((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))SET @ISOweek=1

    RETURN(@ISOweek)END

    sta es la llamada a la funcin. Observe que el valor de

    DATEFIRST es 1.

    SET DATEFIRST 1SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'

    ste es el conjunto de resultados:

    ISO Week----------------52

    Drac----51

  • 7/22/2019 Sq l Server Manual

    52/96

    Instalacin de SQLSERVER 2005

    CREATE PROCEDURE

    Procedimientos almacenados temporales

    De forma similar a las tablas temporales, losprocedimientos almacenados temporales, tanto privados comoglobales, se pueden crear agregando los prefijos # y ##delante del nombre del procedimiento. # denota unprocedimiento almacenado temporal local; ## denota unprocedimiento almacenado temporal global. Estosprocedimientos dejan de existir cuando se cierra SQLServer.

    A. Utilizar un procedimiento sencillo con una instruccinSELECT compleja

    Este procedimiento almacenado devuelve todos los autores

    (nombre y apellidos), los ttulos y los publicadores apartir de una combinacin de cuatro tablas. Esteprocedimiento almacenado no utiliza ningn parmetro.

    USE pubsIF EXISTS (SELECT name FROM sysobjects

    WHERE name = 'au_info_all' AND type = 'P') DROP PROCEDURE au_info_allGOCREATE PROCEDURE au_info_all

    ASSELECT au_lname, au_fname, title, pub_name

    FROM authors a INNER JOIN titleauthor ta

    ON a.au_id = ta.au_id INNER JOIN titles tON t.title_id = ta.title_id INNER JOIN publishers pON t.pub_id = p.pub_id

    GO

    El procedimiento almacenado au_info_all se puede ejecutarde estas formas:

    EXECUTE au_info_all-- OrEXEC au_info_all

    Drac----52

  • 7/22/2019 Sq l Server Manual

    53/96

    Instalacin de SQLSERVER 2005

    O si este procedimiento es la primera instruccin delproceso por lotes:

    au_info_all

    B. Utilizar un procedimiento sencillo con parmetros

    Este procedimiento almacenado devuelve slo los autoresespecificados (nombre y apellidos), los ttulos y lospublicadores a partir de una combinacin de cuatro tablas.Este procedimiento almacenado acepta coincidencias exactasde los parmetros pasados.

    USE pubsIF EXISTS (SELECT name FROM sysobjects

    WHERE name = 'au_info' AND type = 'P')DROP PROCEDURE au_info

    GOUSE pubsGOCREATE PROCEDURE au_info

    @lastname varchar(40),@firstname varchar(20)

    AS

    SELECT au_lname, au_fname, title, pub_nameFROM authors a INNER JOIN titleauthor taON a.au_id = ta.au_id INNER JOIN titles tON t.title_id = ta.title_id INNER JOIN publishers pON t.pub_id = p.pub_id

    WHERE au_fname = @firstnameAND au_lname = @lastname

    GO

    El procedimiento almacenado au_info se puede ejecutar deestas formas:

    EXECUTE au_info 'Dull', 'Ann'-- OrEXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'-- OrEXECUTE au_info @firstname = 'Ann', @lastname = 'Dull'-- OrEXEC au_info 'Dull', 'Ann'-- OrEXEC au_info @lastname = 'Dull', @firstname = 'Ann'-- OrEXEC au_info @firstname = 'Ann', @lastname = 'Dull'

    Drac----53

  • 7/22/2019 Sq l Server Manual

    54/96

    Instalacin de SQLSERVER 2005

    O si este procedimiento es la primera instruccin delproceso por lotes:

    au_info 'Dull', 'Ann'-- Orau_info @lastname = 'Dull', @firstname = 'Ann'-- Orau_info @firstname = 'Ann', @lastname = 'Dull'

    LIKE

    Carctercomodn

    Descripcin Ejemplo

    % Cualquier cadena de cero

    o ms caracteres.

    WHERE title LIKE '%computer%'

    busca todos los ttulos de libros

    que contengan la palabra

    'computer' en cualquier parte del

    ttulo.

    _ (subrayado) Cualquier carcter

    individual

    WHERE au_fname LIKE '_ean'

    busca todos los nombres de

    cuatro letras que finalicen con

    ean (Dean, Sean, etc.).

    [ ] Cualquier carcter

    individual de intervalo ([a-

    f]) o del conjunto

    ([abcdef]) especificado.

    WHERE au_lname LIKE '[C-

    P]arsen' busca apellidos de

    autores que terminen con arsen y

    comiencen con cualquier carcter

    individual entre C y P, porejemplo Carsen, Larsen, Karsen,

    etc.

    [^] Cualquier carcter

    individual que no se

    encuentre en el intervalo

    ([^a-f]) o el conjunto

    ([^abcdef]) especificado.

    WHERE au_lname LIKE 'de[^l]%'

    busca todos los apellidos de

    autores que comienzan con de y

    en los que la siguiente letra no

    sea l.

    Drac----54

  • 7/22/2019 Sq l Server Manual

    55/96

    Instalacin de SQLSERVER 2005

    Utilizar caracteres comodn como literales

    Los caracteres comodn de concordancia de patrn se puedenutilizar como literales. Para utilizar como literal uncarcter comodn, inclyalo entre corchetes. La tablamuestra varios ejemplos del uso de la palabra clave LIKE ylos caracteres comodn [ ].

    Smbolo Significado

    LIKE '5[%]' 5%

    LIKE '[_]n' _n

    LIKE '[a-cdf]' a, b, c, d o f

    LIKE '[-acdf]' -, a, c, d o f

    LIKE '[ [ ]' [

    LIKE ']' ]

    LIKE 'abc[_]d%' abc_d y abc_de

    LIKE 'abc[def]' abcd, abce y abcf

    JOIN

    Esta consulta de Transact-SQL es un ejemplo de unacombinacin interna:

    USE pubsSELECT *FROM authors AS a INNER JOIN publishers AS p

    ON a.city = p.city

    ORDER BY a.au_lname DESC

    Drac----55

  • 7/22/2019 Sq l Server Manual

    56/96

    Instalacin de SQLSERVER 2005

    LEFT OUTER JOIN o LEFT JOIN

    RIGHT OUTER JOIN o RIGHT JOIN

    FULL OUTER JOIN o FULL JOIN

    USE pubs

    SELECT a.au_fname, a.au_lname, p.pub_nameFROM authors a LEFT OUTER JOIN publishers pON a.city = p.city

    ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

    REALIZA EL PRODUCTO CARTESIANO DE LAS TABLAS

    USE pubs

    SELECT au_fname, au_lname, pub_nameFROM authors CROSS JOIN publishersORDER BY au_lname DESC

    SET NOCOUNT

    Hace que deje de devolverse como parte de los resultados elmensaje que indica el nmero de filas afectado por una

    instruccin Transact-SQL.

    Sintaxis

    SET NOCOUNT { ON | OFF }

    SET NOEXEC

    Compila cada consulta, pero no la ejecuta.

    Sintaxis

    Drac----56

  • 7/22/2019 Sq l Server Manual

    57/96

    Instalacin de SQLSERVER 2005

    SET NOEXEC { ON | OFF }

    SELECT

    SELECTselect_list

    [ INTOnew_table ]

    FROM table_source

    [ WHEREsearch_condition ]

    [ GROUP BYgroup_by_expression ][ HAVINGsearch_condition ]

    [ ORDER BYorder_expression [ ASC | DESC ] ]

    Se puede utilizar el operador UNION entre consultas paracombinar sus resultados en un solo conjunto de resultados.

    Sintaxis

    SELECT statement ::=

    < query_expression >

    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }

    [,...n] ]

    [ COMPUTE

    { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ]

    [ BY expression [ ,...n ]]

    ]

    [ FOR{ BROWSE | XML { RAW | AUTO | EXPLICIT }

    [ , XMLDATA ]

    [ , ELEMENTS ]

    [ , BINARY base64 ]

    }]

    [ OPTION ( < query_hint > [ ,...n ]) ]

    < query expression > ::=

    { < query specification > | ( < query expression > ) }

    [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ]

    < query specification > ::=

    SELECT [ ALL | DISTINCT ]

    [ { TOP integer| TOP integerPERCENT } [ WITH TIES ] ]

    < select_list >

    Drac----57

  • 7/22/2019 Sq l Server Manual

    58/96

    Instalacin de SQLSERVER 2005

    [ INTO new_table ]

    [ FROM { < table_source > } [ ,...n ] ]

    [ WHERE < search_condition > ]

    [ GROUP BY [ ALL ]group_by_expression [ ,...n ]

    [ WITH { CUBE | ROLLUP } ]

    ]

    [ HAVING < search_condition > ]

    Clusula COMPUTE

    Genera totales que aparecen como columnas de resumen

    adicionales al final del conjunto de resultados.

    XML

    Especifica que el resultado de una consulta se devolver como un documento XML.

    CUBE

    Especifica que, adems de las filas que normalmenteproporciona GROUP BY, deben incluirse filas de resumen enel conjunto de resultados. Se devuelve una fila de resumen

    GROUP BY por cada posible combinacin de grupo y subgrupodel conjunto de resultados.

    ROLLUP

    Especifica que, adems de las filas que normalmenteproporciona GROUP BY, deben incluirse filas de resumen enel conjunto de resultados. Los grupos se resumen en unorden jerrquico, desde el nivel inferior del grupo alsuperior.

    La jerarqua del grupo se determina mediante el orden enque se especifican las columnas de agrupamiento.

    Importante Cube y RollUp No es posible utilizar agregadosdiferentes, por ejemplo AVG(DISTINCT column_name),COUNT(DISTINCT column_name) y SUM(DISTINCT column_name)cuando se utiliza CUBE o ROLLUP

    DELETE

    Drac----58

  • 7/22/2019 Sq l Server Manual

    59/96

    Instalacin de SQLSERVER 2005

    Ejemplos

    A. Utilizar DELETE sin parmetros

    Este ejemplo elimina todas las filas de la tabla authors.

    USE pubsDELETE authors

    B. Utilizar DELETE en un conjunto de filas

    Debido a que au_lname puede no ser nico, este ejemploelimina todas las filas en que au_lname esMcBadden.

    USE pubsDELETE FROM authors

    WHERE au_lname = 'McBadden'

    C. Utilizar DELETE en la fila actual de un cursor

    Este ejemplo muestra una eliminacin realizada contra uncursor denominado complex_join_cursor. Slo afecta a la

    nica fila que se recupera actualmente del cursor.

    USE pubsDELETE FROMauthors

    WHERE CURRENT OF complex_join_cursor

    INSERT

    CREATE TABLE T1 ( column_1 int, column_2 varchar(30))

    INSERT T1 (column_2, column_1)VALUES ('Row #1',1)

    CREATE RULE

    Crea un objeto denominado regla. Cuando se enlaza una reglaa una columna o un tipo de datos definido por el usuario,la regla especifica los valores aceptables que se puedeninsertar en esa columna. Una columna puede tener una reglay una o ms restricciones CHECK asociadas a ella. Cuando

    esto es as, se evalan todas las restricciones.

    Drac----59

  • 7/22/2019 Sq l Server Manual

    60/96

    Instalacin de SQLSERVER 2005

    A. Regla con un intervalo - restringe el intervalo deenteros

    CREATE RULE range_ruleAS@range >= $1000 AND @range < $20000

    B. Regla con una lista

    CREATE RULE list_ruleAS@list IN ('1389', '0736', '0877')

    C. Regla con un patrn

    CREATE RULE pattern_ruleAS@value LIKE '_ _-%[0-9]'

    CREATE VIEW

    Crea una tabla virtual que representa los datos de una oms tablas de una forma alternativa. CREATE VIEWdebe ser la primera instruccin en una secuencia deconsultas.

    --create the view that combines all supplier tables

    CREATE VIEWall_supplier_viewASSELECT *FROM SUPPLY1

    UNION ALLSELECT *FROM SUPPLY2 UNION ALLSELECT *FROM SUPPLY3 UNION ALLSELECT *FROM SUPPLY4

    D. Utilizar funciones integradas en una vista

    USE pubs

    Drac----60

  • 7/22/2019 Sq l Server Manual

    61/96

    Instalacin de SQLSERVER 2005

    IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME = 'categories')

    DROP VIEWcategoriesGOCREATE VIEWcategories (category, average_price)

    ASSELECT type, AVG(price)FROM titlesGROUP BY typeGO

    CREATE TABLE

    CREATE TABLE T1( column_1 int identity,column_2 varchar(30)CONSTRAINT default_name DEFAULT ('column default'),

    column_3 int NULL,column_4 varchar(40)

    )INSERTINTO T1 (column_4)VALUES ('Explicit value')

    INSERT INTO T1 (column_2,column_4)VALUES ('Explicit value', 'Explicit value')

    INSERT INTO T1 (column_2,column_3,column_4)VALUES ('Explicit value',-44,'Explicit value')

    SELECT *FROM T1

    UPDATE

    UPDATE Northwind.dbo.Products

    SET UnitPrice = UnitPrice * 1.1WHERE CategoryID = 2

    UPDATE CON UN CURSOR

    USE NorthwindGODECLARE abc CURSOR FOR

    SELECT CompanyName

    Drac----61

  • 7/22/2019 Sq l Server Manual

    62/96

    Instalacin de SQLSERVER 2005

    FROM Shippers

    OPEN abcGO

    FETCH NEXT FROM abcGO

    UPDATE Shippers SET CompanyName = N'Speedy Express, Inc.'WHERE CURRENT OF abcGO

    CLOSE abcDEALLOCATE abc

    GO

    @@FETCH_STATUS

    Devuelve el estado de la ltima instruccin FETCH de cursorejecutada sobre cualquier cursor que la conexin hayaabierto.

    Valor deretorno

    Descripcin

    0 La instruccin FETCH se ejecutcorrectamente.

    -1 La instruccin FETCH ha finalizado con erroro la fila estaba ms all del conjunto de

    resultados.

    -2 Falta la fila recuperada.

    Sintaxis

    @@FETCH_STATUS

    Drac----62

  • 7/22/2019 Sq l Server Manual

    63/96

    Instalacin de SQLSERVER 2005

    @@ERROR

    Devuelve el nmero de error de la ltima instruccinTransact-SQL ejecutada.

    Sintaxis

    @@ERROR

    Tipos devueltos

    integer

    A. Utilizar @@ERROR para detectar un error especfico

    USE pubsGOUPDATE authors SET au_id = '172 32 1176'WHERE au_id = "172-32-1176"

    IF @@ERROR = 547print "A check constraint violation occurred"

    B. Utilizar @@ERROR para salir condicionalmente de unprocedimiento-- Test the error value.IF @@ERROR 0BEGIN

    -- Return 99 to the calling program to indicate failure.PRINT "An error occurred loading the new author information"

    RETURN(99)ENDELSEBEGIN

    -- Return 0 to the calling program to indicate success.PRINT "The new author information has been loaded"RETURN(0)

    END

    C. Utilizar @@ERROR para comprobar el xito de variasinstrucciones

    Drac----63

  • 7/22/2019 Sq l Server Manual

    64/96

    Instalacin de SQLSERVER 2005

    Este ejemplo depende de la ejecucin con xito de lasinstrucciones INSERT y DELETE. Se establece el valor de@@ERROR en variables locales despus de ambas instruccionesy se utilizan las variables en una rutina de tratamiento deerrores comn para la operacin.

    USE pubsGODECLARE @del_error int, @ins_error int-- Start a transaction.BEGIN TRAN

    -- Execute the DELETE statement.DELETE authorsWHERE au_id = '409-56-7088'

    -- Set a variable to the error value for-- the DELETE statement.SELECT @del_error = @@ERROR

    -- Execute the INSERT statement.INSERT authors

    VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932','6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)

    -- Set a variable to the error value for-- the INSERT statement.

    SELECT @ins_error = @@ERROR

    -- Test the error values.IF @del_error = 0 AND @ins_error = 0BEGIN

    -- Success. Commit the transaction.PRINT "The author information has been replaced"COMMIT TRAN

    ENDELSEBEGIN

    -- An error occurred. Indicate which operation(s) failed-- and roll back the transaction.

    IF @del_error 0PRINT "An error occurred during execution of the DELETEstatement."

    IF @ins_error 0PRINT "An error occurred during execution of the INSERTstatement."

    ROLLBACK TRANENDGO

    Drac----64

  • 7/22/2019 Sq l Server Manual

    65/96

    Instalacin de SQLSERVER 2005

    @@ROWCOUNTDevuelve el nmero de filas afectadas por la ltima instruccin.

    Sintaxis

    @@ROWCOUNT

    Tipos devueltos

    integer

    detectar si se ha modificado alguna fila

    UPDATE authors SET au_lname = 'Jones'WHERE au_id = '999-888-7777'IF @@ROWCOUNT = 0

    print 'Warning: No rows were updated'

    TRANSACCIONES

    Ejemplos

    En este ejemplo se modifica el reparto de derechos de autorentre los dos autores de The Gourmet Microwave. Debido aque el estado de la base de datos sera incoherente entredos actualizaciones, stas se deben agrupar en unatransaccin definida por el usuario.

    BEGIN TRANSACTION royaltychangeUPDATE titleauthor

    SET royaltyper = 65FROM titleauthor, titles

    WHERE royaltyper = 75AND titleauthor.title_id = titles.title_idAND title = 'The Gourmet Microwave'

    UPDATE titleauthorSET royaltyper = 35

    FROM titleauthor, titlesWHERE royaltyper = 25

    AND titleauthor.title_id = titles.title_idAND title = 'The Gourmet Microwave'

    SAVE TRANSACTION percentchanged

    /*

    Drac----65

  • 7/22/2019 Sq l Server Manual

    66/96

    Instalacin de SQLSERVER 2005

    After having updated the royaltyper entries for the two authors, the

    user inserts the savepoint percentchanged, and then determines how a10-percent increase in the book's price would affect the authors'royalty earnings.*/

    UPDATE titlesSET price = price * 1.1

    WHERE title = 'The Gourmet Microwave'SELECT (price * royalty * ytd_sales) * royaltyper

    FROM titles, titleauthorWHERE title = 'The Gourmet Microwave'

    AND titles.title_id = titleauthor.title_id/*

    The transaction is rolled back to the savepointwith the ROLLBACK TRANSACTION statement.*/

    ROLLBACK TRANSACTION percentchangedCOMMIT TRANSACTION

    /* End of royaltychange. */

    DECLARE CURSOR

    Define los atributos de un cursor de servidor Transact-SQL,como su comportamiento de desplazamiento y la consultautilizada para generar el conjunto de resultados sobre elque opera el cursor. DECLARE CURSOR acepta la sintaxisbasada en el estndar SQL-92 y la sintaxis de un conjuntode extensiones de Transact-SQL.

    Sintaxis extendida de Transact-SQL

    DECLARE cursor_name CURSOR[ LOCAL | GLOBAL ]

    [ FORWARD_ONLY | SCROLL ]

    [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

    [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]

    [ TYPE_WARNING ]

    FORselect_statement

    [ FOR UPDATE [ OF column_name [ ,...n ] ] ]

    STATIC

    Drac----66

  • 7/22/2019 Sq l Server Manual

    67/96

    Instalacin de SQLSERVER 2005

    Define un cursor que hace una copia temporal de los datosque utiliza. Todas las peticiones al cursor se respondendesde esta tabla temporal de tempdb; por ello, lasmodificaciones realizadas en las tablas base no sereflejarn en los datos obtenidos en las recuperacionesrealizadas en el cursor y adems este cursor no admitemodificaciones.

    Observaciones

    DECLARE CURSOR define los atributos de un cursor deservidor Transact-SQL, como su comportamiento dedesplazamiento y la consulta utilizada para generar elconjunto de resultados en que opera el cursor. Lainstruccin OPEN llena el conjunto de resultados y lainstruccin FETCH devuelve una fila del conjunto deresultados. La instruccin CLOSE libera el conjunto deresultados actual asociado con el cursor. La instruccinDEALLOCATE libera los recursos que utiliza el cursor.

    A. Utilizar cursores simples y su sintaxisEl conjunto de resultados generado al abrir este cursorcontiene todas las filas y todas las columnas de la tablaauthors de la base de datos pubs. Este cursor se puedeactualizar, y todas las actualizaciones y eliminaciones serepresentan en las recuperaciones realizadas contra elcursor. FETCH NEXT es la nica recuperacin disponibledebido a que no se ha especificado la opcin SCROLL.

    DECLARE authors_cursor CURSOR

    FORSELECT * FROM authors

    OPEN authors_cursorFETCH NEXT FROM authors_cursor

    B. Utilizar cursores anidados para elaborar resultados deinformes

    Este ejemplo muestra cmo se pueden anidar los cursorespara elaborar informes complejos. El cursor interno sedeclara para cada autor.

    SET NOCOUNT ON

    Drac----67

  • 7/22/2019 Sq l Server Manual

    68/96

    Instalacin de SQLSERVER 2005

    DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname

    varchar(40),@message varchar(80), @title varchar(80)

    PRINT "-------- Utah Authors report --------"

    DECLARE authors_cursor CURSOR FORSELECT au_id, au_fname, au_lnameFROM authorsWHERE state = "UT"ORDER BY au_id

    OPEN authors_cursor

    FETCH NEXT FROM authors_cursorINTO @au_id, @au_fname, @au_lname

    WHILE @@FETCH_STATUS = 0BEGIN

    PRINT " "SELECT @message = "----- Books by Author: " +

    @au_fname + " " + @au_lname

    PRINT @message

    -- Declare an inner cursor based-- on au_id from the outer cursor.

    DECLARE titles_cursor CURSOR FORSELECT t.titleFROM titleauthor ta, titles tWHERE ta.title_id = t.title_id ANDta.au_id = @au_id -- Variable value from the outer cursor

    OPEN titles_cursor FETCH NEXT FROMtitles_cursor INTO @title

    IF @@FETCH_STATUS 0PRINT " "

    WHILE @@FETCH_STATUS = 0BEGIN

    SELECT @message = " " + @titlePRINT @messageFETCH NEXT FROM titles_cursor INTO @title

    END

    CLOSE titles_cursor DEALLOCATE titles_cursor

    -- Get the next author.

    FETCH NEXT FROM authors_cursor

    Drac----68

  • 7/22/2019 Sq l Server Manual

    69/96

    Instalacin de SQLSERVER 2005

    INTO @au_id, @au_fname, @au_lname

    END

    CLOSE authors_cursorDEALLOCATE authors_cursorGO

    -------- Utah Authors report ------------- Books by Author: Anne Ringer

    The Gourmet MicrowaveIs Anger the Enemy?

    ----- Books by Author: Albert Ringer

    Is Anger the Enemy?Life Without Fear

    BACKUP

    -- Create the backup device for the full MyNwind backup.

    USE masterEXECsp_addumpdevice 'disk', 'MyNwind_2','c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind_2.dat'

    --Create the log backup device.USE masterEXECsp_addumpdevice 'disk', 'MyNwindLog1',

    'c:\Program Files\Microsoft SQLServer\MSSQL\BACKUP\MyNwindLog1.dat'

    -- Back up the full MyNwind database.BACKUP DATABASE MyNwind TO MyNwind_2

    -- Update activity has occurred since the full database backup.

    -- Back up the log of the MyNwind database.BACKUP LOG MyNwind

    TO MyNwindLog1

    Drac----69

  • 7/22/2019 Sq l Server Manual

    70/96

    Instalacin de SQLSERVER 2005

    WHILEWHILEBoolean_expression

    {sql_statement|statement_block}

    [BREAK]

    {sql_statement|statement_block}

    [CONTINUE]

    A. Utilizar BREAK y CONTINUE con IF...ELSE y WHILE anidados

    En este ejemplo, si el promedio de precio es menor de $30,

    el bucle WHILE dobla los precios y, a continuacin,selecciona el precio mximo. Si el precio mximo es menor oigual que $50, el bucle WHILE se reinicia y dobla losprecios de nuevo. Este bucle contina la duplicacin deprecios hasta que el precio mximo sea mayor que $50 y, acontinuacin, sale del bucle WHILE e imprime un mensaje.

    USE pubsGO

    WHILE (SELECT AVG(price) FROMtitles) < $30BEGIN

    UPDATE titlesSET price = price * 2

    SELECT MAX(price) FROM titles IF (SELECT MAX(price) FROM titles) > $50 BREAK ELSE CONTINUEENDPRINT 'Too much for the market to bear'

    CASE

    Evala una lista de condiciones y devuelve como resultadouna de las distintas expresiones posibles.

    CASE tiene dos formatos:

    La funcin CASE sencilla compara una expresin con unconjunto de expresiones sencillas para determinar elresultado.

    Drac----70

  • 7/22/2019 Sq l Server Manual

    71/96

    Instalacin de SQLSERVER 2005

    La funcin CASE de bsqueda evala un conjunto deexpresiones booleanas para determinar el resultado.

    A. Utilizar una instruccin SELECT con una funcin CASEsencilla

    USE pubsGOSELECT Category =

    CASE type WHEN 'popular_comp' THEN 'Popular Computing' WHEN 'mod_cook' THEN 'Modern Cooking' WHEN 'business' THEN 'Business'

    WHEN 'psychology' THEN 'Psychology' WHEN 'trad_cook' THEN 'Traditional Cooking' ELSE 'Not yet categorized'

    END, CAST(title AS varchar(25)) AS 'Shortened Title',

    price AS PriceFROM titlesWHERE price IS NOT NULLORDER BY type, priceCOMPUTE AVG(price) BY typeGO

    B. Utilizar una instruccin SELECT con una funcin CASEsencilla y otra de bsquedaUSE pubsGOSELECT 'Price Category' =

    CASEWHEN price IS NULL THEN 'Not yet priced'

    WHEN price < 10 THEN 'Very Reasonable Title' WHEN price >= 10 and price < 20 THEN 'Coffee Table Title' ELSE 'Expensive book!'

    END,CAST(title AS varchar(20)) AS 'Shortened Title'FROM titlesORDER BY priceGO

    GOTO

    Altera el flujo de ejecucin y lo dirige a una etiqueta.Las instrucciones GOTO y las etiquetas se pueden utilizaren cualquier punto de un procedimiento, lote o bloque de

    instrucciones. Las instrucciones GOTO se pueden anidar.

    Drac----71

  • 7/22/2019 Sq l Server Manual

    72/96

    Instalacin de SQLSERVER 2005

    Definicin de la etiqueta:

    label :

    Alteracin de la ejecucin:

    GOTO label

    USE pubsGODECLARE @tablename sysnameSET @tablename = N'authors'

    tableLoop:IF (@@FETCH_STATUS -2)BEGIN

    SELECT @tablename = RTRIM(UPPER(@tablename))EXEC ("SELECT """ + @tablename + """ = COUNT(*) FROM "

    + @tablename )PRINT " "

    ENDFETCH NEXT FROM tnames_cursor INTO @tablename

    IF (@@FETCH_STATUS -1) GOTO tableLoopGO

    WAITFOR

    Especifica un tiempo, intervalo de tiempo o suceso quedesencadena la ejecucin de un bloque de instrucciones,procedimiento almacenado o transaccin.

    Sintaxis

    WAITFOR { DELAY 'time' | TIME 'time' }

    A. Utilizar WAITFOR TIME

    Este ejemplo ejecuta el procedimiento almacenadoupdate_all_stats a las 10:20 p.m.

    BEGIN WAITFOR TIME '22:20'

    EXECUTE update_all_statsEND

    Drac----72

  • 7/22/2019 Sq l Server Manual

    73/96

    Instalacin de SQLSERVER 2005

    B. Utilizar WAITFOR DELAY

    Se crea un procedimiento almacenado de forma que espere unacantidad de tiempo variable y, a continuacin, se devuelveal usuario la informacin como el nmero de horas, minutosy segundos que han transcurrido.

    CREATE PROCEDURE time_delay @@DELAYLENGTH char(9)ASDECLARE @@RETURNINFO varchar(255)BEGIN WAITFOR DELAY @@DELAYLENGTH

    SELECT @@RETURNINFO = 'A total time of ' +SUBSTRING(@@DELAYLENGTH, 1, 3) +' hours, ' +SUBSTRING(@@DELAYLENGTH, 5, 2) +' minutes, and ' +SUBSTRING(@@DELAYLENGTH, 8, 2) +' seconds, ' +'has elapsed! Your time is up.'

    PRINT @@RETURNINFOENDGO-- This next statement executes the time_delay procedure.EXEC time_delay '000:00:10'

    GO

    GRANT

    Crea una entrada en el sistema de seguridad que permite aun usuario de la base de datos actual trabajar con datos dela base de datos actual o ejecutar instrucciones Transact-

    SQL especficas.Sintaxis

    Permisos de la instruccin:

    GRANT { ALL |statement[ ,...n ] }

    TOsecurity_account[ ,...n ]

    Permisos del objeto:

    Drac----73

  • 7/22/2019 Sq l Server Manual

    74/96

    Instalacin de SQLSERVER 2005

    GRANT

    { ALL [ PRIVILEGES ] |permission [ ,...n ] }

    {

    [ ( column [ ,...n ] ) ] ON { table | view }

    | ON { table | view } [ ( column [ ,...n ] ) ]

    | ON {stored_procedure | extended_procedure }

    | ON { user_defined_function }

    }

    TOsecurity_account[ ,...n ]

    [ WITH GRANT OPTION ]

    [ AS {group | role } ]

    statement

    Es la instruccin para la que se concede el permiso. Lalista de instrucciones puede contener:

    CREATE DATABASE

    CREATE DEFAULT

    CREATE FUNCTION

    CREATE PROCEDURE

    CREATE RULE

    CREATE TABLE

    CREATE VIEW

    BACKUP DATABASE

    BACKUP LOG

    A. Conceder permisos sobre instrucciones

    GRANT CREATE DATABASE, CREATE TABLETO Mary, John, [Corporate\BobJ]

    B. Conceder permisos de objeto dentro de la jerarqua depermisos

    USE pubsGO

    GRANT SELECT

    ON authors

    Drac----74

  • 7/22/2019 Sq l Server Manual

    75/96

    Instalacin de SQLSERVER 2005

    TO funcion_publicGO

    GRANT INSERT, UPDATE, DELETEON authorsTO Mary, John, TomGO

    C. Conceder permisos a una funcin de SQL Server

    En este ejemplo se conceden permisos CREATE TABLE a todoslos miembros de la funcinAccounting.

    GRANT CREATE TABLE TO Accounting

    D. Conceder permisos con la opcin AS

    /* User Jean */GRANT SELECT ON Plan_Data TO AccountingWITH GRANT OPTION

    /* User Jill */GRANT SELECT ON Plan_Data TO JackAS Accounting

    Transact-SQL tiene estos tipos de datos base

    Bigint Binario Bit char cursor

    datetime Decimal float image int

    Money Nchar ntext nvarchar real

    smalldatetime Smallint smallmoney text timestamp

    Tinyint Varbinary Varchar uniqueidentifier

    bigint Datos enteros (nmeros enteros) comprendidosentre -2^63 (-9223372036854775808) y 2^63 -1(9223372036854775807).

    int Datos enteros (nmeros enteros) comprendidosentre -2^31 (-2.147.483.648) y 2^31 - 1 (2.147.483.647).

    Drac----75

    http://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htm
  • 7/22/2019 Sq l Server Manual

    76/96

    Instalacin de SQLSERVER 2005

    smallint Datos enteros comprendidos entre 215 (-32.768)y 215 - 1 (32.767).

    tinyint Datos enteros comprendidos 0 y 255.

    bit Datos enteros con valor 1 0.

    Decimal y numeric

    decimal Datos de precisin y escala numrica fijascomprendidos entre -1038 +1 y 1038 1.

    numeric Funcionalmente equivalente a decimal.

    money y smallmoney

    money Valores de moneda comprendidos entre -263 (-922.337.203.685.477,5808) y 263 - 1(+922.337.203.685.477,5807), con una precisin de unadiezmilsima de la unidad monetaria.

    smallmoney Valores de moneda comprendidos entre

    -214.748,3648 y +214.748,3647, con una precisin de unadiezmilsima de la unidad monetaria.

    Numricos con aproximacin

    float Nmeros con precisin de coma flotante comprendidosentre -1,79E + 308 y 1,79E + 308.

    real Nmeros con precisin de coma flotante comprendidosentre -3,40E + 38 y 3,40E + 38.

    datetime y smalldatetime

    datetime Datos de fecha y hora comprendidos entre el 1 deenero de 1753 y el 31 de diciembre de 9999, con unaprecisin de 3,33 milisegundos.

    smalldatetime Datos de fecha y hora comprendidos entre el1 de enero de 1900 y el 6 de junio de 2079, con unaprecisin de un minuto.

    Drac----76

    http://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ba-bz_2it0.htmhttp://c/Users/Danny/Desktop/ts_de-dz_3grn.htmhttp://c/Users/Danny/Desktop/ts_de-dz_3grn.htmhttp://c/Users/Danny/Desktop/ts_ma-mz_49q1.htmhttp://c/Users/Danny/Desktop/ts_ma-mz_49q1.htmhttp://c/Users/Danny/Desktop/ts_fa-fz_6r3g.htmhttp://c/Users/Danny/Desktop/ts_fa-fz_6r3g.htmhttp://c/Users/Danny/Desktop/ts_da-db_9xut.htmhttp://c/Users/Danny/Desktop/ts_da-db_9xut.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_3ss4.htmhttp://c/Users/Danny/Desktop/ts_ba-bz_2it0.htmhttp://c/Users/Danny/Desktop/ts_de-dz_3grn.htmhttp://c/Users/Danny/Desktop/ts_de-dz_3grn.htmhttp://c/Users/Danny/Desktop/ts_ma-mz_49q1.htmhttp://c/Users/Danny/Desktop/ts_ma-mz_49q1.htmhttp://c/Users/Danny/Desktop/ts_fa-fz_6r3g.htmhttp://c/Users/Danny/Desktop/ts_fa-fz_6r3g.htmhttp://c/Users/Danny/Desktop/ts_da-db_9xut.htmhttp://c/Users/Danny/Desktop/ts_da-db_9xut.htm
  • 7/22/2019 Sq l Server Manual

    77/96

    Instalacin de SQLSERVER 2005

    Cadenas de caracteres

    char Datos de caracteres no Unicode de longitud fija conuna longitud mxima de 8.000 caracteres.

    varchar Datos no Unicode de longitud variable con unmximo de 8.000 caracteres.

    text Datos no Unicode de longitud variable con unalongitud mxima de 231 - 1 (2.147.483.647) caracteres.

    Cadenas de caracteres Unicode

    nchar Datos Unicode de longitud variable con una longitudmxima de 4.000 caracteres.

    nvarchar Datos Unicode de longitud variable con unalongitud mxima de 4.000 caracteres. sysname es el tipo dedatos suministrado por el sistema y definido por el usuarioque es funcionalmente equivalente a nvarchar(128) y que se

    utiliza para hacer referencia a nombres de objetos de basesde datos.

    ntext Datos Unicode de longitud variable con una longitudmxima de 230 - 1 (1.073.741.823) caracteres.

    Cadenas binarias

    binary Datos binarios de longitud fija con una longitudmxima de 8.000 bytes.

    varbinary Datos binarios de longitud variable con unalongitud mxima de 8.000 bytes.

    image Datos binarios de longitud variable con una longitudmxima de 231 - 1 (2.147.483.647) bytes.

    Otros tipos de datos

    cursor Una referencia a un cursor.

    Drac----77

    http://c/Users/Danny/Desktop/ts_ca-co_7tpu.htmhttp://c/Users/Danny/Desktop/ts_ca-co_7tpu.htmhttp://c/Users/Danny/Desktop/ts_ta-tz_2838.htmhttp://c/Users/Danny/Desktop/ts_na-nop_9msy.htmhttp://c/Users/Danny/Desktop/ts_na-nop_9msy.htmhttp://c/Users/Danny/Desktop/ts_nos-nz_0lyd.htmhttp://c/Users/Danny/Desktop/ts_ba-bz_75yx.htmhttp://c/Users/Danny/Desktop/ts_ba-bz_75yx.htmhttp://c/Users/Danny/Desktop/ts_ia-iz_9rfp.htmhttp://c/Users/Danny/Desktop/ts_cr-cz_414i.htmhttp://c/Users/Danny/Desktop/ts_ca-co_7tpu.ht