You are on page 1of 206

Manual

De
Base de Datos
Con
Manual De Base De Datos Con SQL-Server i

Manual
De Base De Datos
Con
SQL-Server
AUTOR (ES)
Manual De Base De Datos Con SQL-Server ii

AUTOR 1…(borrar y poner nombre)

DESCRIPCION DEL AUTOR 1


MMMMMMMMMMMMMMMMMMMMMMMMNDKHB HJDBHJ
BD DB HJDB HJDV HJDBVHJ VD VDHV HJDV HJVDHJ VHJV
HJDV HJDVHJ VDH VDV DV HJDVHJ
VDTYFCUEFCTYFRYJVFSYTGVHJAGSVJHDSVCGHDFSAVFDS
VCGHDSFATYCVDGSHFCHGDSVCGHDFSCTHVDSHGCFDTSH
CFTDSFCGHDSFCTDGVSCTHDFSTHCVDSTYCVDGSHCFDGSV
CTDFCHGDSVCTHDVSCGHFDS
KJBVKE
HJBVFBV
HJBVFEJBVEF
HJBVFJGEBV
HBVFDBVF
BVEFBV

AUTOR2…(borrar y poner nombre)

DESCRIPCION DEL AUTOR 2


MMMMMMMMMMMMMMMMMMMMMMMMNDKHB HJDBHJ
BD DB HJDB HJDV HJDBVHJ VD VDHV HJDV HJVDHJ VHJV
HJDV HJDVHJ VDH VDV DV HJDVHJ
VDTYFCUEFCTYFRYJVFSYTGVHJAGSVJHDSVCGHDFSAVFDS
VCGHDSFATYCVDGSHFCHGDSVCGHDFSCTHVDSHGCFDTSH
CFTDSFCGHDSFCTDGVSCTHDFSTHCVDSTYCVDGSHCFDGSV
CTDFCHGDSVCTHDVSCGHFDS
KJBVKE
HJBVFBV
HJBVFEJBVEF
HJBVFJGEBV
HBVFDBVF
BVEFBV
AGRADECIMIENTOS
Manual De Base De Datos Con SQL-Server iii

AGREGAR ….Agradecimientos…

BDJBBDCBJDBKJ

HCBDCHJDBCHJDB

JMNCHDBCHJBDJCBD

JBCDCJDBJC
INTRODUCCIÓN
Manual De Base De Datos Con SQL-Server iv

AGREGAR ….Introducción…

KHBDHVBEHBVHDBVHB

BJCVEVJEJ

JGVCEGHCV

CDCCDCDCD
Manual De Base De Datos Con SQL-Server ÍNDICE v

Ítems Página
Capítulo 1: Herramienta CASE CA ERWIN DATA MODELER ............................................................1

1.1. Definición, características ................................................................................................................2

1.2. Requisitos e Instalación ....................................................................................................................2

1.3. Creación De Un Modelo De Base De Batos.....................................................................................8

1.4. Vistas de una base de datos ............................................................................................................12

Capítulo 2: Microsoft SQL Server ..............................................................................................................18

2.1. Definición, Propiedades Y Versiones .............................................................................................19

2.2. Requisitos Para La Instalación .......................................................................................................20

2.3. Instalación y Acceso .......................................................................................................................25

2.4. Configuración Del Entorno De Trabajo .........................................................................................34

2.5. Conexión de CA ERWIN DATA MODELER con SQL Server ....................................................35

2.6. Crear La Base De Datos En SQL Server ........................................................................................38

Capítulo 3: Lenguaje de Definición de Datos (LDD).................................................................................39

3.1. Definición Previas ..........................................................................................................................40

3.2. Sentencia CREATE ........................................................................................................................41

3.3. Sentencia ALTER ...........................................................................................................................45

3.4. Sentencia DROP .............................................................................................................................51

Capítulo 4: Base de Datos con SQL Server ................................................................................................53

4.1. Definiciones Previas .......................................................................................................................54

4.2. Objetivos De Una Base De Datos...................................................................................................57

4.3. Bases De Datos En SQL Server .....................................................................................................59

4.4. Estructura De Una Base De Datos ..................................................................................................60

4.5. Creación De Una Base De Datos ....................................................................................................62

4.6. Caso Práctico: Gestión De Legajos ...............................................................................................67

4.7. Adjuntar Y Separa Una Base De Datos ..........................................................................................69

4.8. Esquemas En SQL Server...............................................................................................................75

4.9. Tipo De Datos En SQL Server .......................................................................................................76

4.10. Tipo De Datos Definidos Por El Usuario ...................................................................................79


Manual De Base De Datos Con SQL-Server vi

4.11. Propiedades De Los Atributos ....................................................................................................81

4.12. El Objeto Tabla...........................................................................................................................82

4.13. Manejo de tablas con Esquemas .................................................................................................82

4.14. Restricciones De Tipo: Unique, Check, Default ........................................................................85

4.15. Esquemas, Caso Propuesto: Gestión De Legajos .......................................................................87

Capítulo 5: Lenguaje de Manipulación de Datos (LMD)........................................................................101

5.1. Definiciones Previas .....................................................................................................................102

5.2. Comando INSERT INTO .............................................................................................................103

5.3. Comando UPDATE ......................................................................................................................111

5.4. Comando DELETE ......................................................................................................................113

5.5. Formas de uso del comando SELECT ..........................................................................................116

5.6. Operadores en SQL Server ...........................................................................................................127

5.7. Comandos de tipo JOIN ...............................................................................................................133

Capítulo 6: Transact SQL..........................................................................................................................137

6.1. Definiciones previas. ....................................................................................................................138

6.2. Funciones CAST y CONVERT ....................................................................................................139

6.3. Estructuras de Control Selectivas .................................................................................................141

6.4. Estructuras de Control Repetitivas ...............................................................................................147

6.5. Manejo de errores en Transac SQL ..............................................................................................150

6.6. Manejo de Cursores ......................................................................................................................152

6.7. Funciones......................................................................................................................................155

6.8. Manejo de Procedimientos Almacenados.....................................................................................169

6.9. Comando EXECUTE ...................................................................................................................173

6.10. Procedimientos Almacenados definidas por el usuario ............................................................174

6.11. Procedimiento almacenados y Cursores ...................................................................................177

6.12. Manejo de Transacciones .........................................................................................................179

6.13. Manejo de TRIGGERS .............................................................................................................183

Capítulo 7: Ejercicios Propuestos .............................................................................................................187

BIBLIOGRAFÍA ............................................................................................................................................188
RESUMEN
Manual De Base De Datos Con SQL-Server vii

AGREGAR… Resumen….

vhebvhjbehvbebvh

vhbdehjbvejh

jhcvdghv

vdhv

jgvehvj

gveh
Manual De Base De Datos Con SQL-Server 1

ICO

Capítulo 1: Herramienta CASE CA ERWIN DATA MODELER


Capítulo

1
ER

Herramienta CASE CA
ERWIN DATA
CAPACIDAD CONTENIDO

DOCUMENTAR CAPACIDAD  Definición, características

BHVBEBVBBVHJ  Requisitos e Instalación

GVJEVJEHVBEHJBVHJDEBVKHEV  Creación De Un Modelo De Base De Batos


VGEVJEVUEEVE  Vistas de una base de datos
hcbhbvhbrehvbekbvkebvbehvbekhbvebvh
bhevevbehjvbhebvhebvhjebvhjebvhbehjbv
hjebvhjehjbvhjdbevhjbehjvbehbvhjedbvhe
bvhjdbvdjebvhjdebvbehjbvhebvhjebhjvbeh
jvbhjebvhjebhjvbhjevbhjebvhj
Manual De Base De Datos Con SQL-Server 2

1.1. Definición, características

A. Definición:
ERwin Data Modeler es una herramienta para diseño de base de datos que brinda ayuda a los
usuarios a diseñar, generar y mantener alta calidad los modelos de base de datos.
ERwin Data Modeler permite al usuario visualizar la estructura correcta, elementos claves y el
diseño optimizado de su base de datos, desde los requerimientos de un modelo lógico de
información y reglas de negocio que definen la base de datos, a un modelo físico optimizado
para las características específicas de la base de datos seleccionada.
ERwin Data Modeler automáticamente genera tablas. Su tecnología de “comparación
completa” permite el desarrollo iterativo, de forma tal que los modelos están siempre
sincronizados con Gestores de Base de Datos como: SQL Base, Sybase, MySQL, etc. Al
integrarse con entornos de desarrollo líderes, ERwin Data Modeler también acelera la creación
de aplicaciones centralizadas en datos.

B. Requisitos Para La Instalación.

 Proporciona un entorno gráfico de fácil manipulación que simplifica el diseño de las bases
de datos.
 Mantenimiento de base de datos (modelado).
 Comunicarse de forma más eficaz permitiendo que los DBA y desarrolladores compartan y
reutilicen modelos.
 Proporcionar respuestas más rápidas a las necesidades empresariales en evolución
permitiendo a las empresas comprender el impacto del cambio en los activos de información
y facilitando la rápida implementación de cambios.

1.2. Requisitos e Instalación

A. Requisitos para la instalación.


 Plataformas: WindowsXP, Vista, 7, 8, 2003 server y superiores.
 Gestores de base de Datos: SQL Server, MySQL, Sybase, etc.

B. Instalación.
 Ejecutar el archivo de instalación “CA_ERwin_Data_Modeler _r7.3_Setup”, modo
administrador.
Manual De Base De Datos Con SQL-Server 3

 Inicialización del instalador.

 Leer el contrato y términos de uso hasta el final para poder dar click en “I agree”.
Manual De Base De Datos Con SQL-Server 4

 Ingresar parámetros y dar click en Next

 Mostrará la ruta de instalación y podrá modificar la ruta si usted lo desea, (recomendación:


dejar en la ruta predeterminada), después dar click en Next.
Manual De Base De Datos Con SQL-Server 5
Manual De Base De Datos Con SQL-Server 6
Manual De Base De Datos Con SQL-Server 7

 Seleccione el botón de Inicio, después, seleccione todos los programas, luego CA (Computer
Associates); enseguida ERwin Data Modeler r7.3 y después ERwin Data Modeler.

 Una vez realizado lo anterior aparecerá la ventana principal de Erwin r7.3.


Manual De Base De Datos Con SQL-Server 8

1.3. Creación De Un Modelo De Base De Batos

A. Herramientas básicas

 Barra de menús

 Barra de herramientas

 Barra de herramientas lógicas


Manual De Base De Datos Con SQL-Server 9

 Área de trabajo (modelado)

B. Generando una Base de Datos


 Abrimos el Erwin Data Modeler y seleccionamos: File > New.

 Nos aparecerá esta ventana en la cual nos pide seleccionar el modelo que deseamos crear,
en este caso tenemos 3 opciones: Lógico, Físico y Lógico/Físico.
Para el desarrollo de la práctica seleccionaremos la última opción y escogemos con que
Sistema Gestor de Base de Datos trabajaremos y la versión correspondiente, en este caso
seleccionamos SQL Server y la versión 2005/2008, pero no solamente podemos trabajar con
SQL Server, también lo podemos hacer con Oracle, MySQL, etc.
Manual De Base De Datos Con SQL-Server 10

C. Configuraciones Previas.
 Antes de comenzar a trabajar nuestro modelado es necesario configurar las propiedades de
nuestro modelo. Vamos a la opción Model y Model Properties

 Pasará a mostrar la siguiente ventana, donde configuraremos la información del modelo y la


notación (Information Engineering – este tipo de notación permite mostrar todos los campos
y valores dentro de nuestro modelado, como son: entidades, atributos, identificadores, tipo
de datos, etc.); así mismo podemos verificar otras configuraciones que ERwin trae por
defecto.
Manual De Base De Datos Con SQL-Server 11
Manual De Base De Datos Con SQL-Server 12

1.4. Vistas de una base de datos

A. Creación de Vistas de una base de datos.


 Nos dirigimos al menú “Format” y click en “Stored Display Settings.”
Manual De Base De Datos Con SQL-Server 13

 Clic en el botón New, e indicamos el nuevo nombre de vista en la configuración de


pantalla.

 Realizamos la configuración para el modelo lógico, activando la opción Primary Key


Designator (muestra el identificador o clave primaria).
Manual De Base De Datos Con SQL-Server 14

 También configuramos el modelo físico, dentro del menú Table Option activamos PK
Designator.

 Seleccionamos la vista lógica y empezaremos creando las tablas llamadas: tipofamiliar,


PersonaFamiliar, personal.

 Si queremos el tipo de datos, identificadores y entre otros seleccionamos la vista física.


Manual De Base De Datos Con SQL-Server 15

 En la vista o modelo físico, cambiamos el tipo de dato para cada atributo, como se muestra.

 Obteniendo la siguiente vista a nivel físico.

 Para trabajar las relaciones volvemos a la vista lógica del modelado y empezamos con las
relaciones que pueden ser de: uno a muchos (Relación obligatoria no identificada o Relación
no obligatoria no identificada) y de muchos a muchos.
Manual De Base De Datos Con SQL-Server 16

 Sabemos que la relación entre la tabla producto y la tabla boleta es de muchos a muchos,
para lo cual generaremos la entidad que asocia ambas tablas. (Create Association Entity).
Manual De Base De Datos Con SQL-Server 17

 La vista física quedara de la siguiente manera, luego de haber colocado un nombre a las
relaciones.

 Obtendremos el siguiente modelo a nivel lógico.


Manual De Base De Datos Con SQL-Server 18

Capítulo 2: Microsoft SQL Server

Capítulo

2
Microsoft SQL Server

CAPACIDAD CONTENIDO

DOCUMENTAR CAPACIDAD  Definición, Propiedades Y Versiones


BHVBEBVBBVHJ  Requisitos Para La Instalación

GVJEVJEHVBEHJBVHJDEBVKHEV  Instalación y Acceso


 Configuración Del Entorno De Trabajo
VGEVJEVUEEVE
 Conexión de CA ERWIN DATA
hcbhbvhbrehvbekbvkebvbehvbekhbvebvh
bhevevbehjvbhebvhebvhjebvhjebvhbehjbv MODELER con SQL Server
hjebvhjehjbvhjdbevhjbehjvbehbvhjedbvhe  Crear La Base De Datos En SQL Server
bvhjdbvdjebvhjdebvbehjbvhebvhjebhjvbeh
jvbhjebvhjebhjvbhjevbhjebvhj
Manual De Base De Datos Con SQL-Server 19

2.1. Definición, Propiedades Y Versiones

A. Definición de Microsoft SQL Server


SQL nace de un lenguaje de cómputo llamado SEQUEL creado por IBM, que fue diseñado
específicamente para consulta de base de datos. SQL SERVER es el producto emblema de
motor de base de datos de Microsoft que está generando una enorme cantidad de interés en el
mercado.

SQL (Lenguaje de consulta estructurado): Es un tipo de lenguaje vinculado con la gestión de


bases de datos de carácter relacional que permite la especificación de distintas clases de
operaciones. Gracias a la utilización del álgebra y del cálculo relacional, el lenguaje SQL brinda
la posibilidad de realizar consultas que ayuden a recuperar información de las bases de datos de
manera sencilla.

B. Propiedades de Microsoft SQL Server


Las propiedades que ofrece Microsoft SQL Server son:
Las bases de datos pueden desarrollarse fácilmente ya sea en un equipo
mainframe o una mini computadora, sin importar su sistema operativo.
Portabilidad
Cuenta con soporte de SUN, lo que permite una mayor comunicación
entre servidores.
Los DBMS o SGBD (DataBase Management System, Sistema de
Gestión de Bases de Datos) se pueden ejecutar ya sea en computadoras
personales, microcomputadoras, mainframes y computadoras con
Compatibilidad
procesamiento paralelo masivo, así como en distintas arquitecturas de
hardware y software sin tener la necesidad de cambiar una sola línea de
código.
Los SGBD pueden trabajar con información almacenada con otros
Conectividad sistemas de bases de datos, así como también almacenar los datos y
acceder a ellos desde otros paquetes de software.
Permite verificaciones de usuarios, mantener clientes diferentes en una
misma base de datos y a señalar que a ciertos datos solo podrán acceder
Seguridad determinados usuarios, así como la codificación de información
privada. El Administrador puede programar permisos por tabla,
columna o fila.
Aporta funcionalidades de administración y tunning de la memoria, del

Administración CPU y de disco, de manera que se reduce el tiempo para la


administración. Primera base de datos que soporta la configuración
Manual De Base De Datos Con SQL-Server 20

automática y la auto-optimización por medio del servicio Agente SQL


Server.
Permiten una alta disponibilidad de aplicaciones sin necesidad de una
Rendimiento
reconfiguración de datos.
Funcionan con un amplio conjunto de herramientas de desarrollo,
Herramientas
De herramientas de consulta para el usuario final, aplicaciones comerciales
Desarrollo y herramientas de gestión de la información del ámbito corporativo.

C. Versiones de Microsoft SQL Server


Veamos una tabla de comparación Versión, Año y Nombre clave en donde veremos la evolución
de SQL Server hasta la última versión 2012.
Versión Año de lanzamiento Nombre del Proyecto
1.0 1989 SQL
4.21 1993 SEQUEL
6.0 1995 SQL95
6.5 1996 Hydra
7.0 1998 Sphinx
2000 Shiloh (SQL Server 2000)
8.0
2003 Liberty (SQL Server 2000 64 bits)
9.0 2005 Yukon (SQL Server 2005)
10.0 2008 Katmai (SQL Server 2008)
10.5 2010 Kilimanjaro (SQL Server 2008 R2)
11.0 2012 Demali (SQL Server 2012)
12.0 2014 (SQL Server 2014)
13.0 2016 (SQL Server 2016)

2.2. Requisitos Para La Instalación

 En las ediciones de 32 y 64 bits de SQL Server 2012 se aplican las consideraciones siguientes:
 Se recomienda ejecutar SQL Server 2012 en equipos con el formato de archivo NTFS. SQL
Server 2012 se puede instalar en un equipo con el sistema de archivos FAT32, pero no se
recomienda porque es menos seguro que el sistema de archivos NTFS.
 El programa de instalación de SQL Server bloqueará las instalaciones en unidades de disco de
solo lectura, asignadas o comprimidas.
Manual De Base De Datos Con SQL-Server 21

 SQL Server le exige que instale una actualización para asegurarse de que se puede instalar
correctamente el componente de Visual Studio.
 Si instala SQL Server 2012 en un equipo con el sistema operativo Windows Vista SP2 o
Windows Server 2008 SP2, puede obtener la actualización necesaria aquí.
 Si instala SQL Server 2012 en un equipo que tiene el sistema operativo Windows 7 SP1 o
Windows Server 2008 R2 SP1, o Windows Server 2012 o Windows 8, esta actualización
ya está incluida.
 La instalación de SQL Server 2012 produce un error si se inicia la instalación con Terminal
Services Client. No se admite el inicio del programa de instalación de SQL Server con Terminal
Services Client.
 El programa de instalación de SQL Server instala los siguientes componentes de software que
el producto necesita:
 SQL Server Native Client
 Archivos auxiliares del programa de instalación de SQL Server
 Actualización a SQL Server 2012: para obtener información acerca del uso de las herramientas
de SQL Server 2012 para preparar una actualización a SQL Server 2012, vea Usar el Asesor de
actualizaciones para preparar las actualizaciones.
 Para conocer los requisitos mínimos de versión para instalar SQL Server en Windows Server
2012 o Windows 8, vea Instalar SQL Server en Windows Server 2012 o Windows 8
(http://support.microsoft.com/kb/2681562).

Requisitos De Hardware Y De Software

Los siguientes requisitos se aplican a todas las instalaciones de SQL Server 2012:

Componente Requisito
.NET .NET 3.5 SP1 es un requisito para SQL Server 2012 cuando se selecciona Motor de base
Framework de datos, Reporting Services, Master Data Services, Data Quality Services, Replicación o
SQL Server Management Studio, y no lo instala ya el programa de instalación de SQL
Server.
 Si ejecuta el programa de instalación en un equipo con el sistema operativo
Windows Vista SP2 o Windows Server 2008 SP2 y no tiene .NET 3.5 SP1, el
programa de instalación de SQL Server le pide que descargue e instale .NET 3.5
SP1 para poder continuar con la instalación de SQL Server. El mensaje de error
incluye un vínculo al centro de descarga o bien puede descargar .NET 3.5 SP1
desde Windows Update. Para evitar la interrupción durante la instalación de SQL
Server, puede descargar e instalar .NET 3.5 SP1 antes de ejecutar el programa de
instalación de SQL Server.
Manual De Base De Datos Con SQL-Server 22

 Si el programa de instalación se ejecuta en un equipo con el sistema operativo


Windows Server 2008 R2 SP1, debe habilitar .NET Framework 3.5 SP1 antes de
instalar SQL Server 2012.
 Si ejecuta el programa de instalación en un equipo que tiene el sistema operativo
Windows Server 2012 o Windows 8, el programa de instalación de SQL Server
descarga e instala .NET Framework 3.5 SP1 automáticamente. Este proceso
necesita acceso a internet.
Si no tiene acceso a internet, debe descargar e instalar .NET Framework 3.5 SP1
antes de ejecutar el programa de instalación para instalar cualquiera de los
componentes mencionados anteriormente. Para obtener más información acerca de
las recomendaciones e instrucciones sobre cómo adquirir y habilitar .NET
Framework 3.5 en Windows Server 2012 o Windows 8, vea Consideraciones sobre
la implementación de Microsoft .NET Framework 3.5
(http://msdn.microsoft.com/library/windows/hardware/hh975396).
.NET 4.0 es un requisito para SQL Server 2012. SQL Server instala .NET 4.0 durante el
paso de instalación de características.
 Si está instalando las ediciones de SQL Server Express, asegúrese de que el equipo
disponga de conexión a Internet. El programa de instalación de SQL Server
descarga e instala .NET Framework 4 puesto que no se incluye en el medio de
instalación de SQL Server Express.
 SQL Server Express no instala .NET 4.0 en el modo Server Core de Windows
Server 2008 R2 SP1 o Windows Server 2012.Debe instalar .NET 4.0 .0 antes de
instalar SQL Server Express en una instalación Server Core de Windows Server
2008 R2 SP1 o de Windows Server 2012.
Windows SQL Server 2012 no instala ni habilita Windows PowerShell 2.0; sin embargo, Windows
PowerShell PowerShell 2.0 es un requisito previo de instalación para los componentes del Motor de
base de datos y SQL Server Management Studio. Si el programa de instalación notifica que
Windows PowerShell 2.0 no está presente, puede instalarlo o habilitarlo siguiendo las
instrucciones de la página Windows Management Framework.
Software de Los sistemas operativos admitidos para SQL Server 2012 tienen software de red
red integrado. Las instancias con nombre y predeterminadas de una instalación independiente
admiten los siguientes protocolos de red: Memoria compartida, Canalizaciones con
nombre, TCP/IP y VIA.
Para obtener más información acerca de los protocolos de red y las bibliotecas de red,
vea Protocolos de red y bibliotecas de red.
Virtualización SQL Server 2012 se admite en entornos de máquina virtual que se ejecutan en el rol Hyper-
V de:
Manual De Base De Datos Con SQL-Server 23

 Windows Server 2008 SP2 Standard, Enterprise y Datacenter


 Windows Server 2008 R2 SP1 Standard, Enterprise y Datacenter.
 Windows Server 2012 Datacenter y Standard.
Además de los recursos que necesita la partición primaria, a cada máquina virtual (partición
secundaria) se le deben proporcionar suficientes recursos de procesador, memoria y
recursos de disco para su instancia de SQL Server 2012. Los requisitos se enumeran más
adelante en este tema.1
Dentro del rol Hyper-V de Windows Server 2008 SP2 o Windows Server 2008 R2 SP1, se
puede asignar un máximo de 4 (cuatro) procesadores virtuales a las máquinas virtuales que
ejecutan ediciones de 32 o 64 bits de Windows Server 2008 SP2, ediciones de 64 bits de
Windows Server 2008 R2 o ediciones de 64 bits de Windows Server 2012.
Dentro del rol Hyper-V de Windows Server 2012,
 Se puede asignar un máximo de 8 (ocho) procesadores virtuales a las máquinas
virtuales que ejecutan ediciones de 32 y 64 bits de Windows Server 2008 SP2.
 Se puede asignar un máximo de 64 (sesenta y cuatro) procesadores virtuales a las
máquinas virtuales que ejecutan ediciones de 64 bits de Windows Server 2008 R2
SP1 o de Windows Server 2012.
Para obtener más información sobre los límites de la capacidad de cálculo para distintas
ediciones de SQL Server 2012 y sus diferencias en entornos físicos y virtualizados con los
procesadores hyperthreaded, vea Límites de la capacidad de cálculo de cada edición de
SQL Server. Para obtener más información sobre el rol Hyper-V, vea el sitio web de
Windows Server 2008.
Software de Se necesita Internet Explorer 7 o una versión posterior para Microsoft Management
Internet Console (MMC), SQL Server Data Tools (SSDT), el componente Diseñador de informes
de Reporting Services y la Ayuda HTML.
Disco duro SQL Server 2012 requiere un mínimo de 6 GB de espacio disponible en disco.
Las necesidades de espacio en disco variarán según los componentes de SQL Server 2012
que instale. Para obtener más información, vea la sección Requisitos de espacio en el disco
duro (32 y 64 bits) posteriormente en este tema. Para obtener información acerca de los
tipos admitidos de almacenamiento para los archivos de datos, vea Tipos de
almacenamiento para los archivos de datos.
Unidad Para la instalación desde disco se necesita una unidad de DVD.
Monitor SQL Server 2012 requiere Super VGA (800x600) o un monitor de una resolución mayor.
Internet La funcionalidad de Internet necesita acceso a Internet (no necesariamente de carácter
gratuito).
Manual De Base De Datos Con SQL-Server 24

Requisitos De Procesador, Memoria Y Sistema Operativo

Los siguientes requisitos de memoria y procesador se aplican a todas las ediciones de SQL Server

Componente Requisito
Memoria[1] Mínimo:
Ediciones Express: 512 MB
Todas las demás ediciones: 1 GB
Se recomienda:
Ediciones Express: 1 GB
Todas las demás ediciones: al menos 4 GB y debe aumentar a medida que el tamaño
de la base de datos aumente para asegurar un rendimiento óptimo.
Velocidad del Mínimo:
procesador  Procesador x86: 1,0 GHz
 Procesador x64: 1,4 GHz
Recomendado: 2 GHz o más
Tipo de  Procesador x64: AMD Opteron, AMD Athlon 64, Intel Xeon compatible con
procesador Intel EM64T Intel Pentium IV compatible con EM64T
 Procesador x86: compatible con Pentium III o superior

Compatibilidad Entre Idiomas

Para obtener más información acerca de la compatibilidad entre idiomas y consideraciones acerca
de la instalación de SQL Server en idiomas traducidos, vea Versiones en idioma local en SQL
Server.

Compatibilidad Con Sistemas Extendidos

SQL Server 2012 Las versiones de 64 bits de SQL Server son compatibles con los sistemas
extendidos, también denominados Windows 32 bits sobre Windows 64 bits (WOW64). WOW64
es una característica de las ediciones de 64 bits de Windows que permite que las aplicaciones de
32 bits se ejecuten de forma nativa en el modo de 32 bits. Las aplicaciones funcionan en el modo
de 32 bits, aunque el sistema operativo subyacente sea de 64 bits.

Requisitos De Espacio En Disco Duro (32 Y 64 Bits)

Durante la instalación de SQL Server 2012, Windows Installer crea archivos temporales en la
unidad del sistema. Antes de ejecutar el programa de instalación para instalar o actualizar SQL
Server, compruebe que dispone de al menos 6,0 GB de espacio en disco en la unidad del sistema
para estos archivos. Este requisito es aplicable incluso si instala todos los componentes de SQL
Server en una unidad distinta de la predeterminada.
Manual De Base De Datos Con SQL-Server 25

Los requisitos reales de disco duro dependen de la configuración del sistema y de las características
que decida instalar. Para obtener una lista de las características admitidas por las ediciones de SQL
Server, vea Características compatibles con las ediciones de SQL Server 2012. En la tabla siguiente
se muestran los requisitos de espacio en disco de los componentes de SQL Server 2012.

CARACTERÍSTICA REQUISITO DE
ESPACIO EN
DISCO
Motor de base de datos y archivos de datos, replicación, búsqueda de texto 811 MB
completo y Data Quality Services
Analysis Services y archivos de datos 345 MB
Reporting Services y Administrador de informes 304 MB
Integration Services 591 MB
Master Data Services 243 MB
Componentes de cliente, excepto los componentes de los Libros en pantalla de 1823 MB
SQL Server y las herramientas de Integration Services.
Los componentes de los Libros en pantalla de SQL Server para ver y 375 KB
administrar el contenido de la Ayuda1

2.3. Instalación y Acceso

A. Instalación de Microsoft SQL Server


 Para obtener el Software puede descargar la versión de prueba desde la página oficial
www.microsoft.com.
 Al ejecutar el instalador de SQL Server 2008 R2 y 2012 Express en español, la instalación
mostrará el siguiente mensaje:

 Haga clic “Aceptar” y vaya a Panel de control de Windows y localice la opción “Región” y
haga clic en el mismo.

 En la pestaña “Formatos” localice el renglón “Formato”, seleccione el idioma “Español


(España)”, aplique y acepte los cambios realizados y vuelva a ejecutar el instalador de SQL
Server.
 Una vez terminada la instalación de SQL Server en español regrese el idioma a “Español
(Perú)”
Manual De Base De Datos Con SQL-Server 26

Paso 1. Haga doble clic sobre el instalador.

Paso 2. Haga clic en “Nueva instalación independiente de SQL Server o agregar


características a una instalación existente”. El programa realizará varios procesos internos,
una vez terminados presentará la siguiente pantalla:
Manual De Base De Datos Con SQL-Server 27

Paso 3. Active la opción “Acepto los términos de licencia” y presione “Siguiente”.

Nota. En caso de que no se cumplan con todos los requerimientos que pide SQL Server para su
instalación no dejará continuar, corrija y vuelta a correr el proceso.

Si el programa no detecto ningún error presentará la siguiente pantalla:

Paso 4. Haga clic en “Siguiente”.

El programa dará inicio con el proceso de actualización, al terminar presentará la siguiente


pantalla:
Manual De Base De Datos Con SQL-Server 28

Paso 5. En el apartado “Características” desactive la opción “Replicación de SQL Server”


y en el campo “Directorio de características compartidas” verificar la ruta en donde se
instalará el programa, presione “Siguiente”.

Paso 6. Verificar que este activada la opción “Instancia con nombre”, y el nombre de la
instancia sea “SQLExpress”, en “Id. de instancia” sea “SQLEXPRESS” y en “Directorio
de SQL Server” sea la ruta indicada anteriormente, presione “Siguiente”.
Manual De Base De Datos Con SQL-Server 29

Paso 7. En la pestaña “Cuentas de servicio” en la columna “Servicio” localice el renglón


“SQL Server Browser” en la columna “Tipo de inicio” seleccione “Automático”, presione
“Siguiente”.

Paso 8. En la pestaña “Configuración del servidor”, en el apartado “Modo de autenticación”


active la opción “Modo mixto (autenticación de SQL Server y de Windows)”.

En el apartado “Especifique la contraseña de la cuenta de admnistrador del Sistema de


SQL Server (sa)”.

 Escriba contraseña. Capture contraseña para accesar a SQL Express.


 Confirmar contraseña. Capture de nuevo la contraseña para accesar a SQL Express.
Resguarde en un lugar seguro la contraseña para accesar a SQL, ya que la utilizará para crear
Base de Datos.

Verifique que en el apartado “Especifique los administradores de SQL Server” este agregado
el Usuario de Windows, como se muestra en la imagen anterior, presione “Siguiente”.
Manual De Base De Datos Con SQL-Server 30

Paso 9. No debe de estar activada la opción “Enviar informes de errores de Windows y SQL
Server a Microsoft...”, presione “Siguiente”.

El programa iniciará con la instalación. El proceso puede durar varios minutos, dependiendo de
la velocidad de sus unidades.
Manual De Base De Datos Con SQL-Server 31

Paso 10. El programa indica que ha terminado la instalación. Presione “Cerrar” para terminar
con la instalación.

B. Acceso al Microsoft SQL Server


 Ir al botón inicio del Windows debe seleccionar Todos los programas luego “Microsoft
SQL server 2012” después a “SQL Sever Management Studio”.

 Al iniciar se muestra la pantalla inicial de SQL Server 2012.


Manual De Base De Datos Con SQL-Server 32

 Luego debemos señalar el nombre del servidor y tipo de autentificación configurado en la


ventana.

 A continuación, se muestra el entorno SQL Server 2012


Manual De Base De Datos Con SQL-Server 33

 Luego ir al ítem New Query donde trabajaremos las instrucciones.

Algunas herramientas:

Se muestran todas las base de datos disponibles, su


acceso rápido es CTRL+U.

Ejecutar conjunto de consultas, también se puede


presionar F5.

Verifica que el conjunto de instrucciones es correcto pero


no ejecuta

Permite colocar y eliminar comentarios sobre las


instrucciones del usuario

Explorador de Objetos (F8)

Desde aquí se podrá administrar la base de datos, seguridad, objetos de servidor, puede
conectarse a varios servidores y administrarlos al mismo tiempo.
Manual De Base De Datos Con SQL-Server 34

Entorno de desarrollo (F4)

Nos dirigimos una nueva hoja de edición desde el botón New Query o desde el menú File
después New y “Database Engine Query”.

2.4. Configuración Del Entorno De Trabajo

En muchas ocasiones confundimos algunos operadores símbolos en los script; por ejemplo, la
letra “o” con el número “(0-0)” ambos puede ocasionar errores lógicos cuando ejecutamos el
script; en conclusión debemos se recomienda las fuente Consolas con un tamaña establecido
pro el usuario para un buen desempeño del script.
Manual De Base De Datos Con SQL-Server 35

Configuración:
 Herramientas (Tools) luego a Opciones (Option)
 Selecciones Font and Colors
 Cambie el tipo de fuente en Font.
 Presiona OK

2.5. Conexión de CA ERWIN DATA MODELER con SQL Server

Ingresamos al menú Database, luego pasamos a opción “Choose Database” para elegir con que
gestor de base de datos trabajara.
Manual De Base De Datos Con SQL-Server 36

Ahora nos dirigimos nuevamente al menú Database, elegimos opción “Database Connection” ( al
indicar el nombre de base de Datos previamente se debió crear en el SGBD SQL server).

Nuevamente dirigirse al menú Tools, opción Forward Engineer , de ahí a “Schema Generation”,
verificar que los objetos
Manual De Base De Datos Con SQL-Server 37

Ahora nos dirigimos a “generate”


Manual De Base De Datos Con SQL-Server 38

2.6. Crear La Base De Datos En SQL Server

Se crea automáticamente todas las tablas de la base de datos “LEGAJOS_CSJAN”


Manual De Base De Datos Con SQL-Server 39

Capítulo 3: Lenguaje de Definición de Datos (LDD)

Capítulo

3
Lenguaje de Definición
de Datos (LDD)
CAPACIDAD CONTENIDO

DOCUMENTAR CAPACIDAD  Definición Previas


BHVBEBVBBVHJ  Sentencia CREATE

GVJEVJEHVBEHJBVHJDEBVKHEV  Sentencia ALTER

VGEVJEVUEEVE  Sentencia DROP

hcbhbvhbrehvbekbvkebvbehvbekhbvebvh
bhevevbehjvbhebvhebvhjebvhjebvhbehjbv
hjebvhjehjbvhjdbevhjbehjvbehbvhjedbvhe
bvhjdbvdjebvhjdebvbehjbvhebvhjebhjvbeh
jvbhjebvhjebhjvbhjevbhjebvhj
Manual De Base De Datos Con SQL-Server 40

3.1. Definición Previas

Lenguaje de Definición de Datos (LDD)


Un lenguaje de definición de datos (Data Definition Language, DDL) es un lenguaje proporcionado
por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las
tareas de definición de las estructuras que almacenarán los datos, así como de los procedimientos
o funciones que permitan consultarlos.

Un Data Definition Language o Lenguaje de descripción de datos (DDL) es un lenguaje de


programación para definir estructuras de datos. El término DDL fue introducido por primera vez
en relación con el modelo de base de datos CODASYL, donde el esquema de la base de datos ha
sido escrito en un lenguaje de descripción de datos que describe los registros, los campos, y
"conjuntos" que conforman el usuario modelo de datos. Más tarde fue usado para referirse a un
subconjunto de SQL, pero ahora se utiliza en un sentido genérico para referirse a cualquier lenguaje
formal para describir datos o estructuras de información, como los esquemas XML.

Siendo DDL un lenguaje que permite definir la base de datos (su estructura o “schemas”), tiene
una sintaxis similar a los lenguajes de programación.

Ejemplos de DDL:

 CREATE TABLE nombre_tabla;


 DROP TABLE nombre_tabla;
 ALTER TABLE nombre_tabla ADD id INTEGER;

A diferencia de muchos lenguajes de descripción de datos, SQL utiliza una acción de versos
imperativo cuyo efecto es modificar el esquema de la base de datos, añadiendo, cambiando o
eliminando las definiciones de tablas y otros objetos. Estas declaraciones se pueden mezclar
libremente con otras sentencias SQL, por lo que el DDL no es realmente una lengua independiente.
La declaración más común es CREATE TABLE. El lenguaje de programación SQL, el más
difundido entre los gestores de bases de datos, admite las siguientes sentencias de definición:
CREATE, DROP y ALTER, cada una de las cuales se puede aplicar a las tablas, vistas,
procedimientos almacenados y triggers de la base de datos.
Manual De Base De Datos Con SQL-Server 41

3.2. Sentencia CREATE

 Para crear una nueva base de datos, índice o almacenamiento de consultas.


 Un argumento CREATE en SQL crea un objeto dentro del sistema de administración de la
base de datos relacional (RDBMS).
 El tipo de objetos que se pueden crear depende de qué RDBMS está siendo utilizado, pero
la mayoría soporta la creación de tablas, índices, usuarios y bases de datos.
 Algunos sistemas (tales como PostgreSQL) permiten CREATE y otros comandos DDL,
dentro de transacciones, y por lo tanto pueden ser revertidos.

COMANDO DE CREACION DE OBJETOS DE UNA BASE DE DATOS


--ESTRUCTURA DE CREACION

CREATE OBJETO NOMBREOBJETO (


--ESTRUCTURA DEL OBJETO
)GO

CREANDO UNA BASE DE DATOS CON VALORES ESTÁNDARES

CREATE DATABASE LEGAJOS_CSJAN


GO

Para verificar los valores estándar se tiene que ejecutar el siguiente comando

--VERIFIACION DE PARAMETROS DE LA BASE DE DATOS

SP_HELPDB LEGAJOS_CSJAN
GO

CASO DESARROLLADO 1: Implementar un Script que permita crear la tabla Sede dentro de la
base de datos LEGAJOS_CSJAN
Manual De Base De Datos Con SQL-Server 42

CREANDO UNA TABLA EN LA BASE DE DATOS LEGAJOS_CSJAN

--UTILIZANDO BASE DE DATOS LEGAJOS_CSJAN

USE LEGAJOS_CSJAN
GO

-- CREANDO LA TABLA SEDE

CREATE TABLE Sede(


idsede VARCHAR(10) NOT NULL,
nomsede VARCHAR(100) NOT NULL,
obssede VARCHAR(100)
)
GO
Considere que para ejecutar el Script de creación de la tabla se deberá activar la base
de datos para esto deberá ejecutar el siguiente Script:

USE LEGAJOS_CSJAN
GO

CASO DESARROLLADO 2: Implementar un Script que permita crear el TRIGGER


TG_MENSAJE que muestre un mensaje al usuario cuando se realice una inserción o actualización
a la tabla Sede.
o En el Script se implementa la creación del desencadenador TG_MENSAJE que permite
mostrar un mensaje cuando el usuario registra una nueva Sede o cuando actualice algún
campo de la tabla Sede.

CREANDO UN TRIGGER A LA TABLA SEDE

--CREACION DEL TRIGGER


CREATE TRIGGER TG_MENSAJE
ON Sede
FOR INSERT,UPDATE
AS
PRINT 'LA SEDE SE ACTUALIZO CORRECTAMENTE.'
GO
Para comprobar el TRIGGER se debe de realizar un nuevo registro a la tabla Sede
con el siguiente Script.

--INSERCCION DE DATOS Y ACTUALIZACION


INSERT INTO Sede (idsede,nomsede,obssede)
VALUES ('AI','AIJA/AIJA',' ')
GO
O ACTUALIZACION:
UPDATE Sede SET idsede='A',nomsede='AIJA/AIJA',obssede='
'
WHERE idsede='AI'
GO
Manual De Base De Datos Con SQL-Server 43

CASO DESARROLLADO 3: Implementar un Script que permita crear el procedimiento


almacenado PA_TOTALSEDES de la tabla Sede

CREANDO UN PROCEDIMIENTO ALMACENADO A LA TABLA SEDE

--CREACION DEL PROCEDIMIENTO

CREATE PROCEDURE PA_TOTALSEDES


AS
BEGIN
SELECT COUNT(*) AS [TOTAL]
FROM Sede
END
GO
Para ejecutar el Procedimiento almacenado se deberá de realizar la siguiente
consulta:

--COMANDO DE EJECUCION

EXEC PA_TOTALSEDES
Manual De Base De Datos Con SQL-Server 44

CASO DESARROLLADO 4: Implementar un Script que permita crear la función


FN_TOTALSEDES de una determinada sede

CREANDO UNA FUNCION A LA TABLA SEDE

CREATE FUNCTION FN_TOTALSEDES (@SEDE VARCHAR(100))


RETURNS INT
AS
BEGIN
DECLARE @TOTAL INT
SELECT @TOTAL=COUNT (*)
FROM SEDE
WHERE NOMSEDE=@SEDE
GROUP BY NOMSEDE
RETURN @TOTAL
END

Probando la función mediante una consulta:

SELECT DBO.FN_TOTALSEDES('ANTONIO RAIMONDI/LLAMELLIN')AS


[TOTAL DE SEDES]

Probando la función usando el comando Print:

PRINT 'TOTAL DE SEDES ES:'+STR(DBO.FN_TOTALSEDES('ANTONIO


RAIMONDI/LLAMELLIN'))

CASO DESARROLLADO 5: Implementar un Script que permita crear la vista V_SEDES donde
muestre los registros contenidos de la tabla SEDE.
Manual De Base De Datos Con SQL-Server 45

CREANDO UNA VISTA EN LA BASE DE DATOS LEGAJOS_CSJAN

CREATE VIEW V_SEDES


AS
SELECT S.NOMSEDE AS [SEDE], S.OBSSEDE AS [OBSERVACION]
FROM SEDE S
GO
Ejecutando la Vista:

SELECT * FROM V_SEDES

3.3. Sentencia ALTER

 Se utiliza para modificar la estructura de la tabla, como en los casos siguientes:


o Añadir una columna.
o Eliminar una columna.
o Cambiar el nombre de una columna.
o Cambiar el tipo de datos para una columna.

COMANDO DE MODIFICACION DE OBJETOS DE UNA BASE DE DATOS

--ESTRUCTURA DE MODIFICACION DE OBJETO

ALTER OBJETO NOMBREOBJETO (


--DATOS HA MODIFICAR
)GO

MODIFICANDO NOMBRE DE UNA BASE DE DATOS CON VALORES ESTÁNDARES

--USAR BASE DE DATOS "MASTER"

USE MASTER
GO
Manual De Base De Datos Con SQL-Server 46

--REALIZAR ALTERACION

ALTER DATABASE LEGAJOS_CSJAN MODIFY NAME = LEGAJOS_CSJAN2


GO

Para verificar la modificación del nombre de la base de datos ejecutar este


comando

--VERIFICACION DE BASE DE DATOS.

SELECT * FROM SYS.SYSDATABASES

--ANTES DE APLICAR LA SENTENCIA "ALTER"

--DESPUES DE APLICAR LA SENTENCIA "ALTER"

CASO DESARROLLADO 6: Implementar un script que permita agregar un archivo secundario


a la base de datos “LEGAJOS_CSJAN” donde se denominara “LEGAJOS_CSJAN_SECUND2”
de tamaño inicial de 7 MB y un tamaño máximo de 15 MB con un factor de crecimiento de 3%.

AGREGANDO UN ARCHIVO SECUNDARIO A LA BASE DE DATOS


--ALTERACION DE LA BASE DE DATOS.

ALTER DATABASE LEGAJOS_CSJAN


ADD FILE(
NAME='LEGAJOS_CSJAN_SECUND2',
FILENAME='C:\PROGRAM FILES\MICROSOFT SQL
SERVER\MSSQL11.SQLEXPRESS\MSSQL\DATA\LEGAJOS_CSJAN_SECUND2.NDF',
SIZE=7MB,
MAXSIZE=15MB,
FILEGROWTH=3%)
Manual De Base De Datos Con SQL-Server 47

Considere que para ejecutar el Script de alterar creando un archivo secundario tiene
que tener cuidado con la ubicación del archivo.
--VERIFICACION DE PARAMETROS.

SP_HELPDB 'LEGAJOS_CSJAN'
GO
--ANTES DE LA MODIFICACION.

--APLICANDO MODIFICACION.

CASO DESARROLLADO 7: Implementar un script que permita modificar la precisión de la


columna NomSede asignada inicialmente con el valor 100 y modificarlo por 45 de la tabla SEDE:

MODIFICANDO COLUMNA DE TABLA SEDE


--VERICAR COLUMNAS DE LA TABLA SEDE

SP_COLUMNS SEDE
GO

--ALTERAR NOMSEDE

ALTER TABLE SEDE


ALTER COLUMN NOMSEDE VARCHAR (45) NOT NULL
GO

Considere que para ejecutar el Script de alterar debe coincidir el nombre de la columna
a modificar con la tabla.
--ANTES DE MODIFICAR LA COLUMNA

--DESPUES DE MODIFICAR LA COLUMNA


Manual De Base De Datos Con SQL-Server 48

CASO DESARROLLADO 8: Implementar una consulta que permita modificar el


TG_MENSAJE que adicione al mensaje anterior la fecha de inserción o actualización en la tabla
Boleta.

MODIFICANDO TRIGGER
--ALTERAR TRIGGER

ALTER TRIGGER TG_MENSAJE


ON SEDE
FOR INSERT, UPDATE
AS
PRINT 'LA SEDE SE ACTUALIZO CORRECTAMENTE'
PRINT 'FECHA: '+CAST (GETDATE () AS VARCHAR (25))
GO

Considere que para ejecutar el Script de alterar debe coincidir el nombre de la columna
a modificar con la tabla.
--INSERCION.

INSERT INTO SEDE VALUES('AR','ANTONIO RAIMONDI/LLAMELLIN','OBSER1'),


('A_1','ASUNCIÓN/CHACAS','OBSER2'),
('B','BOLOGNESI/CHIQUIAN','OBSER'),
('C','CARHUAZ/CARHUAZ','OBSER'),
('CFFL','CARLOS F. FITZCARRALD/SAN LUIS','OBSER'),
('H','HUARAZ/HUARAZ','OBSER'),
('HM','HUARI/SAN MARCOS','OBSER'),
('H_1','HUARI/HUARI','OBSER2'),
('H_2','HUAYLAS/CARAZ','OBSER3'),
('M','MARAÑÓN/HUACRACHUCO','OBSER3'),
('ML','MARISCAL LUZURIAGA/PISCOBAMBA','OBSER4')

--MODIFICACION

UPDATE SEDE SET NOMSEDE= 'SEDEMODIF' WHERE IDSEDE='A_1'


GO
Manual De Base De Datos Con SQL-Server 49

CASO DESARROLLADO 9: Implementar un script que permita modificar el procedimiento


almacenado PA_TOTALSEDES de la tabla SEDE donde muestre el total de sedes registradas y
la hora de ejecución del procedimiento.

MODIFICANDO PROCEDIMIENTO ALMACENADO


--MODIFICANDO PROCEDIMIENTO ALMACENADO

ALTER PROCEDURE PA_TOTALSEDES


AS
BEGIN
SELECT
SYSDATETIME() AS FECHA,
COUNT (*) AS TOTAL
FROM SEDE

GROUP BY NOMSEDE

END
GO

Considere que para ejecutar el procedimiento almacenado

--EJECUACION DEL PROCEDIMIENTO ALMACENADO

EXEC SP_TOTALBOLETAS

CASO DESARROLLADO 10: Implementar una consulta que permita modificar la función
FN_TOTALSEDES de una determinada Observación ingresado por el usuario a la tabla SEDE.

MODIFICANDO FUNCIONES
--MODIFICANDO FUNCION

ALTER FUNCTION FN_TOTALSEDES (@OBSERVACION VARCHAR(100))


RETURNS INT

AS
BEGIN
DECLARE @TOTAL INT

SELECT @TOTAL=COUNT (*)


FROM SEDE
WHERE OBSSEDE=@OBSERVACION
GROUP BY OBSSEDE
Manual De Base De Datos Con SQL-Server 50

RETURN @TOTAL
END
GO

Considere que para ejecutar el función

--EJECUACION DE LA FUNCION
SELECT DBO.FN_TOTALSEDES('OBSER')AS [TOTAL DE SEDES]
GO

CASO DESARROLLADO 11: Implementar una consulta que permita modificar la vista
V_SEDE donde muestre solo las columnas Nombre sede de la tabla SEDE, además de encriptar
la información de la implementación.

MODIFICANDO VISTA
--MODIFICANDO VISTA
ALTER VIEW V_SEDES
WITH ENCRYPTION
AS
SELECT NOMSEDE
FROM SEDE
GO

Considere que para ejecutar vista

--EJECUACION DE LA VISTA

SELECT * FROM V_SEDES


Manual De Base De Datos Con SQL-Server 51

3.4. Sentencia DROP

 Para destruir una base de datos, tabla, índice o vista existente.


 Un argumento DROP en SQL remueve un objeto dentro del sistema de administración de
la base de datos relacional (RDBMS).
 El tipo de objetos que se pueden eliminar depende de que RDBMS está siendo utilizado,
pero la mayoría soporta la eliminación de tablas, índices, usuarios y bases de datos.
 Algunos sistemas (tales como PostgreSQL) permiten DROP y otros comandos DDL, dentro
de transacciones, y por lo tanto pueden ser revertidos.
COMANDO DE ELIMINACION DE OBJETOS DE UNA BASE DE DATOS
--ESTRUCTURA DE ELIMINACION

DROP OBJETO NOMBREOBJETO

CASO DESARROLLADO 12: Implementar un script que permita eliminar la base de datos
LEGAJOS_CSJAN.
ELIMINACION DE UNA BASE DE DATOS

--USAR BASE DE DATOS MASTER


USE MASTER
GO

--ELIMINAR BASE DE DATOS

DROP DATABASE LEGAJOS_CSJAN


GO

Para eliminar la base de datos “LEGAJOS_CSJAN” no tiene que ser la base de datos
activa, debe de ser la base de datos “Master o Maestra”.

CASO DESARROLLADO 13: Implementar una consulta que permita eliminar la tabla sede de
la base de datos LEGAJOS_CSJAN.
ELIMINACION DE UNA TABLA

--USAR BASE DE DATOS LEGAJOS_CSJAN


USE LEGAJOS_CSJAN
GO
--ELIMINAR TABLA

DROP TABLE SEDE


GO
Manual De Base De Datos Con SQL-Server 52

Para eliminar la tabla “Sede” esta tiene que estar asociada con la base de datos
“LEGAJOS_CSJAN”, tener en cuenta que al eliminar la tabla tambien pasa lo mismo con los
indics, triggers, constrains y permisos especificado en la tabla.

CASO DESARROLLADO 14: Implementar un script que permita eliminar el trigger


TG_MENSAJE asociado a la tabla SEDE de la base de datos LEGAJOS_CSJAN.

ELIMINACION DE UN TRIGGER

--USAR BASE DE DATOS LEGAJOS_CSJAN

USE LEGAJOS_CSJAN
GO

--ELIMINAR

DROP TRIGGER TG_MENSAJE


GO

--DESACTIVAR TRIGGER

DISABLE TRIGGER 'TX_MENSAJE'

Eliminar del trigger “TG_MENSAJE” es cuando ya no esta asociado a una tabla, porque SQL
tambien te permite habilitar e inhabilitar un trigger con la sentencia Disable.
Manual De Base De Datos Con SQL-Server 53

Capítulo 4: Base de Datos con SQL Server

Capítulo

4
Base de Datos
con SQL Server
CAPACIDAD CONTENIDO

 Definiciones Previas
DOCUMENTAR CAPACIDAD  Objetivos De Una Base De Datos
 Bases De Datos En SQL Server
BHVBEBVBBVHJ
 Estructura De Una Base De Datos
GVJEVJEHVBEHJBVHJDEBVKHEV  Creación De Una Base De Datos
 Caso Práctico: Gestión De Legajos
VGEVJEVUEEVE  Adjuntar Y Separa Una Base De Datos
 Esquemas En SQL Server
hcbhbvhbrehvbekbvkebvbehvbekhbvebvh  Tipo De Datos En SQL Server
bhevevbehjvbhebvhebvhjebvhjebvhbehjbv  Tipo De Datos Definidos Por El Usuario
 Propiedades De Los Atributos
hjebvhjehjbvhjdbevhjbehjvbehbvhjedbvhe
 El Objeto Tabla
bvhjdbvdjebvhjdebvbehjbvhebvhjebhjvbeh  Manejo de tablas con Esquemas
jvbhjebvhjebhjvbhjevbhjebvhj  Restricciones De Tipo: Unique, Check, Default
 Generación De Esquemas, Caso Propuesto:
Gestión De Legajos
Manual De Base De Datos Con SQL-Server 54

4.1. Definiciones Previas

¿Qué son las bases de datos?

o Una base de datos es un “almacén” que nos permite guardar grandes cantidades de
información de forma organizada para que luego podamos encontrar y utilizar fácilmente. A
continuación, te presentamos una guía que te explicará el concepto y características de las
bases de datos.
o El término de bases de datos fue escuchado por primera vez en 1963, en un simposio
celebrado en California, USA. Una base de datos se puede definir como un conjunto de
información relacionada que se encuentra agrupada o estructurada.
o Desde el punto de vista informático, la base de datos es un sistema formado por un conjunto
de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de
programas que manipulen ese conjunto de datos.
o Cada base de datos se compone de una o más tablas que guarda un conjunto de datos. Cada
tabla tiene una o más columnas y filas. Las columnas guardan una parte de la información
sobre cada elemento que queramos guardar en la tabla, cada fila de la tabla conforma un
registro.

Definición de base de datos

Se define una base de datos como una serie de datos organizados y relacionados entre sí, los cuales
son recolectados y explotados por los sistemas de información de una empresa o negocio en
particular.

Características

Entre las principales características de los sistemas de base de datos podemos mencionar:

 Independencia lógica y física de los datos.


 Redundancia mínima.
 Acceso concurrente por parte de múltiples usuarios.
 Integridad de los datos.
 Consultas complejas optimizadas.
 Seguridad de acceso y auditoría.
 Respaldo y recuperación.
 Acceso a través de lenguajes de programación estándar.
Manual De Base De Datos Con SQL-Server 55

Sistema de Gestión de Base de Datos (SGBD)

Los Sistemas de Gestión de Base de Datos (DataBase Management System) son un tipo de software
muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones
que la utilizan. Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación
de datos y de un lenguaje de consulta.

Ventajas de las bases de datos

Control sobre Los sistemas de ficheros almacenan varias copias de los mismos datos en
la redundancia ficheros distintos. Esto hace que se desperdicie espacio de almacenamiento,
de datos: además de provocar la falta de consistencia de datos.
Eliminando o controlando las redundancias de datos se reduce en gran
medida el riesgo de que haya inconsistencias. Si un dato está almacenado
Consistencia de una sola vez, cualquier actualización se debe realizar sólo una vez, y está
datos: disponible para todos los usuarios inmediatamente. Si un dato está duplicado
y el sistema conoce esta redundancia, el propio sistema puede encargarse de
garantizar que todas las copias se mantienen consistentes.
En los sistemas de ficheros, los ficheros pertenecen a las personas o a los
Compartir departamentos que los utilizan. Pero en los sistemas de bases de datos, la
datos: base de datos pertenece a la empresa y puede ser compartida por todos los
usuarios que estén autorizados.
Gracias a la integración es más fácil respetar los estándares necesarios, tanto
los establecidos a nivel de la empresa como los nacionales e internacionales.
Mantenimiento
Estos estándares pueden establecerse sobre el formato de los datos para
de estándares:
facilitar su intercambio, pueden ser estándares de documentación,
procedimientos de actualización y también reglas de acceso.
La integridad de la base de datos se refiere a la validez y la consistencia de
Mejora en la los datos almacenados. Normalmente, la integridad se expresa mediante
integridad de restricciones o reglas que no se pueden violar. Estas restricciones se pueden
datos: aplicar tanto a los datos, como a sus relaciones, y es el SGBD quien se debe
encargar de mantenerlas.
La seguridad de la base de datos es la protección de la base de datos frente a
Mejora en la usuarios no autorizados. Sin unas buenas medidas de seguridad, la
seguridad: integración de datos en los sistemas de bases de datos hace que éstos sean
más vulnerables que en los sistemas de ficheros.
Mejora en la Muchos SGBD proporcionan lenguajes de consultas o generadores de
accesibilidad a informes que permiten al usuario hacer cualquier tipo de consulta sobre los
los datos:
Manual De Base De Datos Con SQL-Server 56

datos, sin que sea necesario que un programador escriba una aplicación que
realice tal tarea.
El SGBD proporciona muchas de las funciones estándar que el programador
Mejora en la necesita escribir en un sistema de ficheros. A nivel básico, el SGBD
productividad: proporciona todas las rutinas de manejo de ficheros típicas de los programas
de aplicación.
Mejora en el En los sistemas de ficheros, las descripciones de los datos se encuentran
mantenimiento: inmersas en los programas de aplicación que los manejan.
En algunos sistemas de ficheros, si hay varios usuarios que pueden acceder
simultáneamente a un mismo fichero, es posible que el acceso interfiera entre
Aumento de la
ellos de modo que se pierda información o se pierda la integridad. La mayoría
concurrencia:
de los SGBD gestionan el acceso concurrente a la base de datos y garantizan
que no ocurran problemas de este tipo.
Mejora en los Muchos sistemas de ficheros dejan que sea el usuario quien proporcione las
servicios de medidas necesarias para proteger los datos ante fallos en el sistema o en las
copias de aplicaciones. Los usuarios tienen que hacer copias de seguridad cada día, y
seguridad: si se produce algún fallo, utilizar estas copias para restaurarlos.

Desventajas de las bases de datos

Los SGBD son conjuntos de programas que pueden llegar a ser complejos
Complejidad: con una gran funcionalidad. Es preciso comprender muy bien esta
funcionalidad para poder realizar un buen uso de ellos.
Tanto el SGBD, como la propia base de datos, pueden hacer que sea
Coste del necesario adquirir más espacio de almacenamiento. Además, para alcanzar
equipamiento las prestaciones deseadas, es posible que sea necesario adquirir una máquina
adicional: más grande o una máquina que se dedique solamente al SGBD. Todo esto
hará que la implantación de un sistema de bases de datos sea más cara.
El hecho de que todo esté centralizado en el SGBD hace que el sistema sea
Vulnerable a
más vulnerable ante los fallos que puedan producirse. Es por ello que deben
los fallos:
tenerse copias de seguridad (Backup).
Tipos de Cada Sistema de Base de Datos posee tipos de campos que pueden ser
Campos similares o diferentes.
Manual De Base De Datos Con SQL-Server 57

Componentes de una Base de Datos:

Hardware: constituido por dispositivo de almacenamiento como discos, tambores, cintas, etc.

Software: que es el DBMS o Sistema Administrador de Base de Datos.

Datos: los cuales están almacenados de acuerdo a la estructura externa y van a ser procesados para
convertirse en información.

4.2. Objetivos De Una Base De Datos

1. Independencia lógica y física de los datos.


Se refiere a la capacidad de modificar una definición de esquema en un nivel de la arquitectura
sin que esta modificación afecte al nivel inmediatamente superior. El conjunto de datos
contenidos en la base debe ser única y estar integrada por los mismos datos.

2. Redundancia mínima.
Debe ser controlada, de forma que no exista duplicidad innecesaria, y que las redundancias
físicas, convenientes muchas veces a fin de responder a objetivos de eficiencia, sean tratadas
por el mismo sistema, de modo que no puedan producirse inconsistencias.

Se trata de usar la base de datos como repositorio común de datos para distintas aplicaciones.
Un dato se actualizará lógicamente por el usuario en forma única, y el sistema se preocupará
de cambiar físicamente todos aquellos campos en los que el dato estuviese repetido en caso
de existir redundancia física (redundancia controlada).
Manual De Base De Datos Con SQL-Server 58

3. Acceso concurrente por parte de múltiples usuarios


Las bases de datos pretenden servir al conjunto de la organización, manejando los datos como
otro recurso. Por lo tanto, las bases de datos han de atender a múltiples usuarios y a diferentes
aplicaciones. En contraposición a los sistemas de ficheros, en donde cada fichero atiende a
determinada aplicación.

4. Distribución espacial de los datos.


Los datos pueden encontrarse en otra habitación, otro edificio e incluso otro país, el usuario no
tiene por qué preocuparse de la localización espacial de los datos a los que accede.

5. Integridad de los datos.


Se refiere a las medidas de seguridad que impiden que se introduzcan datos erróneos. Esto
puede suceder tanto por motivos físicos (defectos de hardware, actualización incompleta
debido a causas externas), como de operación (introducción de datos incoherentes).

6. Consultas complejas optimizadas.


Permite la rápida y ejecución de las mismas.

7. Seguridad de acceso y auditoría.


Se refiere al derecho de acceso a los datos contenidos en la base por parte de personas y
organismos.

El sistema de auditoría mantiene el control de acceso a la base, con el objeto de saber qué o
quién realizó una determinada modificación y en qué momento. Por ejemplo, un profesor
quiere cambiar una calificación por alguna omisión, el sistema de la base le permitirá hacer el
cambio, pero quedara el registro del día y el motivo del cambio, esto lo checan los jefes de
academia y observan si el profesor le ayuda al alumno o realizan su trabajo adecuadamente.

8. Respaldo y recuperación.
Se refiere a la capacidad de un sistema de base de datos de recuperar su estado en un momento
previo a la pérdida de datos.

9. Acceso a través de lenguajes de programación estándar.


Se refiere a la posibilidad ya mencionada de acceder a los datos de una base mediante lenguajes
de programación ajenos al sistema de base de datos. en pocas palabras son los programas o
software con los que se mandarán llamar y diseñar los datos que aparecerán en la pantalla.
Manual De Base De Datos Con SQL-Server 59

4.3. Bases De Datos En SQL Server

Al instalar SQL Server también se registran bases de datos que administran diferentes aspectos de
servidor de Base de Datos. SQL cuenta con las siguientes Bases de Datos del sistema:

Master es el núcleo de toda instancia en SQL Server, es decir, que contiene


información vital sobre una instancia de SQL Server. Se compone de tablas de
sistema que registran el seguimiento de la instalación del servidor y de la
MASTER
administración de todas las bases de datos que se generen posteriormente. La
información que contiene es base de datos, opciones de configuración, triggers a
nivel de servidor y servidores con enlace.
Es una base de datos temporal, técnicamente es informal para SQL Server y su
uso es generalmente cuando se realiza operaciones de clasificación y agregación.
TEMPDB En ocasiones, las aplicaciones usan tablas, procesos y cursores de esta tabla ya
que provee de un espacio de trabajo temporal y tiene la capacidad de regalarse
cada vez que arranca SQL Server.
Model es una plantilla para todas las bases de datos creadas en el servidor, esto lo
podrá implementar cuando ejecute al comando CREATE DATABASE, dando
MODEL lugar a la creación de una nueva base de datos basado en un modelo predefinido
por SQL Server; este le añade páginas vacías que serán propias de la nueva base
de datos.
Es empleada por el servicio SQL Server Agent y por los servicios de integración
de SQL Server en la cual guarda información con respecto a las tareas de
MSDB automatización, historial de copias de seguridad, información de rastreo de
registros, tareas, alertas, cuentas proxy, planes de mantenimiento y registros de
mensajería de la base de datos.
Manual De Base De Datos Con SQL-Server 60

4.4. Estructura De Una Base De Datos

Una Base de Datos está compuesta por un conjunto de tablas o archivos.

En este caso vemos un modelo de entidad relación entre dos tablas: La tabla personafamiliar
contiene el registro de los familiares de los trabajadores los cuales tiene datos familiares
datosfamiliares y un tipo, en el tipo se almacena la relación que tiene el familiar con el personal
ejemplo (HERMANO, PADRE, TIO, etc.). Teniendo en cuenta que los familiares registrados son
los del personal.

Veamos los registros de la tabla personalfamiliar:

También vemos los registros de la tabla tipofamiliar:


Manual De Base De Datos Con SQL-Server 61

Y veamos los registros de la tabla datosfamiliares:

Las Bases de Datos, de acuerdo al ejemplo anterior, estas presentan entidades: tipofamiliar,
datosfamiliares, personalfamiliarn. Podemos entender que una tabla llega a ser una entidad y;
por lo tanto, toda entidad es cualquier cosa física o abstracta que se puede representar, en este caso
las tablas anteriores son físicas, pero podríamos implementar la tabla personal, que representaría
a los abstractos donde (se relacionaría con la tabla datosfamiliares).

Entonces llegamos a la siguiente conclusión:

TABLAS O ENTIDAD: tipofamiliar, datosfamiliares, personalfamiliarn.

En la tabla personalfamiliar:

Campo clave

Campos

registros

Datos
En la tabla datosfamiliar:

Campo foráneo
Manual De Base De Datos Con SQL-Server 62

CAMPOS: Representan a los atributos de una entidad, en este caso los campos pertenecientes a la
tabla personalfamiliar son: idPersonalFamiliar, apellidosynombres, sexo, fechanac, vive.

CAMPO CLAVE: Es el campo particular de una entidad que representa a un valor único dentro
de los registros y así serán reconocidos por las demás entidades, de la tabla personalfamiliar, su
campo clave es: idPersonalFamiliar.

CAMPO FORÁNEO: Es el campo que une a otra entidad formando una extensión de la tabla
fuente. En una entidad puede tener muchos campos claves, si consideramos que toda entidad tiene
un campo clave, el foráneo se enlazará justamente con este campo.

REGISTRO: Representa en conjunto de valores por cada campo de una misma fila. Esta
representa el conjunto de resultados que SQL Server espera devolver a los usuarios.

DATO: Es un valor único que no representa nada mientras no se una a otros datos. Por ejemplo de
la tabla personalfamiliar, en el registro de id 15 el dato es VIVANCO LUNA CLIMACO
ULISES.

4.5. Creación De Una Base De Datos

Tenemos que considerar que la creación de una Base de Datos es meramente la implementación de
un Script y no se representará de forma visual, es decir, se usará en todo momento Transact-SQL
para su implementación.

Una Base de Datos es SQL Server es una réplica de la base de datos MODEL, ya que esta base de
datos nos proporciona páginas vacías, es decir, que podemos crear archivos lógicos dentro de las
bases de datos para una implementación profesional.

CASO DESARROLLADO 15: Implementar la base de datos la Base de Datos


LEGAJOS_CSJAN con valores por defectos.

CREANDO LA BASE DE DATOS LEGAJOS_CSJAN: 1° FORMA

CREATE DATABASE LEGAJOS_CSJAN


GO
Manual De Base De Datos Con SQL-Server 63

CREANDO LA BASE DE DATOS LEGAJOS_CSJAN: 2° FORMA

IF DB_ID('LEGAJOS_CSJAN') IS NOT NULL


BEGIN
USE master
DROP DATABASE LEGAJOS_CSJAN
END
CREATE DATABASE LEGAJOS_CSJAN
GO
COMANDO PARA VERIFICAR LA EXISTENCIA DE LA BASE DE DATOS LEGAJOS_CSJAN

SELECT * FROM SYS.SYSDATABASES

OTRA FORMA DE VERIFICAR LA EXISTENCIA DE LA BASE DE DATOS LEGAJOS_CSJAN

SELECT name,dbid,crdate,filename
FROM SYS.SYSDATABASES

COMANDO PARA VERIFICAR LA ESTRUCTURA DE LA BASE DE DATOS LEGAJOS_CSJAN

SP_HELPDB LEGAJOS_CSJAN

CASO DESARROLLADO 16: Implementar la base de datos LEGAJOS_CSJAN ubicado en la


carpeta D:\Base_Datos especificando un archivo primario con tamaño inicial de 15MB, un tamaño
máximo de 30MB y un crecimiento de 5MB, además el archivo de transacciones debe tener un
tamaño inicial de 5MB y como máximo 10MB a una tasa de crecimiento de 10%.

CREANDO LA BASE DE DATOS LEGAJOS_CSJAN2

CREATE DATABASE AGENCIA2


ON PRIMARY(
NAME='LEGAJOS_CSJAN2_PRI',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN.MDF',
SIZE=15MB,
Manual De Base De Datos Con SQL-Server 64

MAXSIZE=30MB,
FILEGROWTH=5MB
)
LOG ON(
NAME='LEGAJOS_CSJAN2_LOG',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN2.LDF',
SIZE=5MB,
MAXSIZE=10MB,
FILEGROWTH=10%
)
GO

COMANDO PARA VERIFICAR LA ESTRUCTURA DE LA BASE DE DATOS LEGAJOS_CSJAN2

SP_HELPDB LEGAJOS_CSJAN2

CASO DESARROLLADO 17: Implementar la base de datos LEGAJOS_CSJAN3 ubicado en


la carpeta D:\Base_Datos\ con la siguiente configuración:

 ARCHIVO DE DATOS: Un tamaño inicial de 10MB, máximo de 40MB y un factor de


crecimiento de 5MB.
 ARCHIVO SECUNDARIO: Un tamaño inicial de 5MB, máximo de 30MB y un factor de
crecimiento de 5%.
 ARCHIVO DE TRANSACCIONES: Un tamaño inicial de 4MB, máximo de 20MB y un factor
de crecimiento de 10%.

CREANDO LA BASE DE DATOS LEGAJOS_CSJAN3

CREATE DATABASE LEGAJOS_CSJAN3


ON PRIMARY (
NAME='LEGAJOS_CSJAN3_PRI',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN3.MDF',
SIZE=10MB,
MAXSIZE=40MB,
FILEGROWTH=5MB
),
(
NAME='LEGAJOS_CSJAN3_SEC',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN3.NDF',
SIZE=5MB,
MAXSIZE=30MB,
FILEGROWTH=5%
)
LOG ON (
NAME='LEGAJOS_CSJAN3_LOG',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN3.LDF',
Manual De Base De Datos Con SQL-Server 65

SIZE=4MB,
MAXSIZE=20MB,
FILEGROWTH=10%
)
GO

COMANDO PARA VERIFICAR LA ESTRUCTURA DE LA BASE DE DATOS LEGAJOS_CSJAN3

SP_HELPDB LEGAJOS_CSJAN3

CASO DESARROLLADO 18: Implementar la base de datos LEGAJOS_CSJAN4 ubicado en


la carpeta D:\Base_Datos\ con la siguiente configuración:

 ARCHIVO DE DATOS: Un tamaño inicial de 10MB, máximo de 40MB y un factor de


crecimiento de 5MB.
 ARCHIVO SECUNDARIO1: Un tamaño inicial de 5MB, máximo de 30MB y un factor de
crecimiento de 5%.
 ARCHIVO SECUNDARIO2: Un tamaño inicial de 2MB, máximo de 15MB y un factor de
crecimiento de 2%.
 ARCHIVO DE TRANSACCIONES: Un tamaño inicial de 4MB, máximo de 20MB y un factor
de crecimiento de 10%.

CREANDO LA BASE DE DATOS LEGAJOS_CSJAN4

CREATE DATABASE LEGAJOS_CSJAN4


ON PRIMARY (
NAME='LEGAJOS_CSJAN4_PRI',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN4.MDF',
SIZE=10MB,
MAXSIZE=40MB,
FILEGROWTH=5MB
),
(
NAME='LEGAJOS_CSJAN4_SEC1',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN41.NDF',
SIZE=5MB,
MAXSIZE=30MB,
FILEGROWTH=5%
),
(
NAME='LEGAJOS_CSJAN4_SEC2',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN42.NDF',
SIZE=2MB,
MAXSIZE=15MB,
Manual De Base De Datos Con SQL-Server 66

FILEGROWTH=2%
)
LOG ON (
NAME='LEGAJOS_CSJAN4_LOG',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN4.LDF',
SIZE=4MB,
MAXSIZE=20MB,
FILEGROWTH=10%
)
GO

COMANDO PARA VERIFICAR LA ESTRUCTURA DE LA BASE DE DATOS LEGAJOS_CSJAN4

SP_HELPDB LEGAJOS_CSJAN4

CASO DESARROLLADO 19: Implementar una consulta que permita separar la base de datos
LEGAJOS_CSJAN5 ubicado en la carpeta D:\Base_Datos\ con las siguientes características:

 ARCHIVO DE DATOS: Un tamaño inicial de 10MB, máximo de 90MB y un factor de


crecimiento de 5MB.
 ARCHIVO SECUNDARIO: Un tamaño inicial de 5MB, máximo de 50MB y un factor de
crecimiento de 5%.
 ARCHIVO DE TRANSACCIONES: Un tamaño inicial de 5MB, máximo de 50MB y un factor
de crecimiento de 10%.

CREANDO LA BASE DE DATOS LEGAJOS_CSJAN5

CREATE DATABASE LEGAJOS_CSJAN5


ON PRIMARY (
NAME='LEGAJOS_CSJAN5_PRI',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN5.MDF',
SIZE=10MB,
MAXSIZE=90MB,
FILEGROWTH=5MB
),
(
NAME='LEGAJOS_CSJAN5_SEC',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN5.NDF',
SIZE=5MB,
MAXSIZE=50MB,
FILEGROWTH=5%
)
LOG ON (
NAME='LEGAJOS_CSJAN5_LOG',
FILENAME='D:\Base_Datos\LEGAJOS_CSJAN5.LDF',
SIZE=5MB,
Manual De Base De Datos Con SQL-Server 67

MAXSIZE=50MB,
FILEGROWTH=10%
)
GO

COMANDO PARA VERIFICAR LA ESTRUCTURA DE LA BASE DE DATOS LEGAJOS_CSJAN5

SP_HELPDB LEGAJOS_CSJAN5

4.6. Caso Práctico: Gestión De Legajos

Descripción del caso práctico…


Manual De Base De Datos Con SQL-Server 68

Diagrama de la Base de datos


Manual De Base De Datos Con SQL-Server 69

4.7. Adjuntar Y Separa Una Base De Datos

Ahora veremos cuatro maneras de crear un backup de una base de datos en SQL SERVER:

1° FORMA: La primera forma de generar una copia de seguridad de la base de datos es copiando
los archivos con el nombre de la base de datos con extensión .mdf y LDF, en nuestro caso
LEGAJOS_CSJAN.mdf y LEGAJOS_CSJAN_log.LDF, los mismos que se encuentran en la
siguiente dirección:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

Como podemos ver no nos permite realizar la copia de la base de datos LEGAJOS_CSJAN,
mostrando el siguiente mensaje.

Esto es debido a que la base de datos LEGAJOS_CSJAN está siendo usada, para esto debemos ir
al panel de control > herramientas administrativas > servicios, o simplemente ejecutar Inicio + R
y escribir services.msn, como se muestra a continuación:

Ahora bien, lo que haremos es detener el servicio SQL SERVER, ubicaremos el servicio de nombre
SQL Server (MSSQLSERVER).
Manual De Base De Datos Con SQL-Server 70

Luego podremos copiar los archivos de la base de datos LEGAJOS_CSJAN, y poder usarla en
otras máquinas, con servicio local SQL Server.

Para restaurar la base de datos LEGAJOS_CSJAN, copiamos los archivos de la base de datos que
queremos restaurar en la siguiente dirección:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

Ahora bien, iremos a la herramienta SQL SERVER y realizaremos lo siguiente.


Manual De Base De Datos Con SQL-Server 71

Como podemos ver la base de datos LEGAJOS_CSJAN se encuentra lista para ser usada.

2° FORMA: La segunda forma de generar una copia de seguridad de una base de datos cualquiera
en SQL Server es la siguiente:

En nuestro caso trabajaremos con la base de datos LEGAJOS_CSJAN.

Ahora bien lo que haremos es cerrar el servicio solo de la base de datos que queremos salvar, para
esto escribimos el siguiente comando SQL:

COPIA DE SEGURIDAD DE LA BASE DE DATOS LEGAJOS_CSJAN

-- USAMOS LA BASE DE DATOS MASTER

USE master
GO

-- COMANDO PARA SEPARA LA BASE DE DATOS LEGAJOS_CSJAN

SP_DETACH_DB 'LEGAJOS_CSJAN'
GO

Luego para restaurar la base de datos que queremos copiar en nuestro caso LEGAJOS_CSJAN, lo
que haremos es copiar a la siguiente dirección:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

Para restaurar la base de datos desde el SQL Server ejecutaremos los mismos pasos del método
anterior de restauración o en su defecto levantar el servicio de la base de datos con el siguiente
comando:
Manual De Base De Datos Con SQL-Server 72

RESTAURANDO LA BASE DE DATOS LEGAJOS_CSJAN

-- USAMOS LA BASE DE DATOS MASTER

USE master
GO

-- COMANDO DE RESTAURACION

SP_ATTACH_DB 'LEGAJOS_CSJAN','C:\Program Files\Microsoft SQL


Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\LEGAJOS_CSJAN.mdf'
GO

3° FORMA: Para obtener un backup de la base de datos es generando un archivo de tipo .bak, de
la siguiente forma, así mismo el backup generado tendrá la siguiente dirección:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup


Manual De Base De Datos Con SQL-Server 73

Para restaurar el backup creado lo que haremos es ir a la siguiente opción y listo:

4° FORMA: La otra forma de generar un backup es a nivel script:


Manual De Base De Datos Con SQL-Server 74
Manual De Base De Datos Con SQL-Server 75

Luego pasaremos a restaurar la base de datos LEGAJOS_CSJAN seleccionando el archivo donde


se encuentra el script de la base de datos la misma que lo abriremos desde SQL Server y pasaremos
a ejecutar el script.

4.8. Esquemas En SQL Server

El esquema de una base de datos (en inglés, Database Schemas) describe la estructura de la misma
ya que todos los objetos que se pueda crear o administrar en SQL se encuentran dentro de un
esquema estándar.

El manejo de esquemas responde a temas como agrupación de objetos y seguridad de la mismas.


Cuando se crea un objeto de base de datos o se especifica una entidad de seguridad de dominio
válida (usuario o grupo) como la propiedad del objeto, o la entidad de domino se agregará a la base
de datos como esquemas. Esa entidad de seguridad de dominio será la propietaria del nuevo
esquema.

Sintaxis para creación de Esquemas:

CREACION DE UN ESQUEMA “CREATE SCHEMA”


--ESTRUCTURA

CREATE SCHEMA NOMBRE_ESQUEMA AUTHORIZATION NOMBRE_PROPIETARIO


GO
Manual De Base De Datos Con SQL-Server 76

Sintaxis para eliminación de Esquemas:

ELIMINACION DE UN ESQUEMA “DROP SCHEMA”


--ESTRUCTURA
DROP TABLE NOMBRE_TABLA
GO

DROP SCHEMA NOMBRE_ESQUEMA AUTHORIZATION NOMBRE_PROPIETARIO


GO

CASO DESARROLLADO 20: Implementar los esquemas OPERACION, ASIGNACION,


RECURSO dentro de la base de datos LEGAJOS_CSJAN.

CREACION DE LOS ESQUEMAS

--USO DE BASE DE DATOS LEGAJOS_CSJAN5

USE LEGAJOS_CSJAN5
GO

--CREACION DE ESQUEMAS

CREATE SCHEMA OPERACION AUTHORIZATION DBO


CREATE SCHEMA ASIGNACION AUTHORIZATION DBO
CREATE SCHEMA RECURSO AUTHORIZATION DBO

--VER ESQUEMAS CREADOS

SELECT S.NAME FROM SYS.SCHEMAS S

4.9. Tipo De Datos En SQL Server

En SQL Server, cada columna, variable local, expresión y parámetro tiene un tipo de datos
relacionado. Un tipo de datos es un atributo que especifica el tipo de datos que el objeto puede
contener: datos de enteros, datos de caracteres, datos de moneda, datos de fecha y hora, cadenas
binarias, etc.

SQL Server proporciona un conjunto de tipos de datos del sistema que define todos los tipos de
datos que pueden utilizarse con SQL Server. También puede definir sus propios tipos de datos en
Transact-SQL o Microsoft .NET Framework. Los tipos de datos de alias están basados en los tipos
de datos proporcionados por el sistema. Los tipos definidos por el usuario obtienen sus
Manual De Base De Datos Con SQL-Server 77

características de los métodos y los operadores de una clase que se crean mediante uno de los
lenguajes de programación compatibles con .NET Framework.

Cuando dos expresiones que tienen tipos de datos, intercalaciones, precisión, escala o longitud
diferentes son combinadas por un operador, las características del resultado vienen determinadas
por lo siguiente:

 El tipo de datos del resultado viene determinado por la aplicación de las reglas de
precedencia de tipos de datos a los tipos de datos de las expresiones de entrada.
 La intercalación del resultado viene determinada por las reglas de precedencia de
intercalación cuando el tipo de datos del resultado es char, varchar, text, nchar, nvarchar o
ntext.
 La precisión, escala y longitud del resultado dependen de la precisión, escala y longitud de
las expresiones de entrada.

GRUPO TIPO DE INTERVALO ALMACENAMIENTO


DATO
Numéricos bigint De -263(-9.223.372.036.854.775.808) a 263 - 1 8 bytes
exactos (9.223.372.036.854.775.807)
int De -231 (-2.147.483.648) a 231 - 1 4 bytes
(2.147.483.647)
smallint De -215 (-32.768) a 215 - 1 (32.767) 2 bytes
tinyint De 0 a 255 1 byte
bit Tipo de datos entero que puede aceptar los 2 bytes
valores 1, 0 ó NULL
decimal,  p (precisión): el número total máximo de Precisión 1 - 9: 5 bytes
numeric, dígitos decimales que se puede almacenar,
decimal tanto a la izquierda como a la derecha del
(p, s) separador decimal. La precisión debe ser un
valor comprendido entre 1 y la precisión
máxima de 38. La precisión predeterminada
es 18.
 s (escala): el número máximo de dígitos
decimales que se puede almacenar a la
derecha del separador decimal. La escala
debe ser un valor comprendido entre 0 y p.
Sólo es posible especificar la escala si se ha
especificado la precisión. La escala
predeterminada es 0.

Con precisión máxima 1038 +1 y 1038 - 1


money Tipos de datos que representan valores 8 bytes
monetarios o de moneda: de -
922.337.203.685,4775808 a
922.337.203.685,4775807
Manual De Base De Datos Con SQL-Server 78

smallmone De - 214,7483648 a 214,7483647 4 bytes


y
Numéricos float De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 Depende del valor de n
aproximados a 1,79E+308
real De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 4 Bytes
a 3,40E + 38
Fecha y hora datetime Del 1 de enero de 1753 hasta el 31 de diciembre
de 9999
smalldateti Del 1 de enero de 1900 hasta el 6 de junio de
me 2079
Cadenas de char (n) Caracteres no Unicode de longitud fija, con una n bytes
caracteres longitud de n bytes. n debe ser un valor entre 1 y
8.000
varchar (n) Caracteres no Unicode de longitud n bytes (aprox.)
variable. n indica que el tamaño de
almacenamiento máximo es de 231- 1 bytes
text En desuso, sustituido por varchar. max bytes (aprox.)

Datos no Unicode de longitud variable con una


longitud máxima de 231 - 1 (2.147.483.647)
caracteres
Cadenas de nchar (n) Datos de carácter Unicode de longitud fija, 2 * n bytes
caracteres con n caracteres. n debe estar comprendido entre
unicode 1 y 4.000
nvarchar Datos de carácter Unicode de longitud 2 * n bytes + 2 bytes
(n) variable. n indica que el tamaño máximo de
almacenamiento es 231 - 1 bytes
ntext (n) En desuso, sustituido por nvarchar. 2 * n bytes

Datos Unicode de longitud variable con una


longitud máxima de 230 - 1 (1.073.741.823)
caracteres
Cadenas binary (n) Datos binarios de longitud fija con una longitud n bytes
binarias de n bytes, donde n es un valor que oscila entre
1 y 8.000
varbinary Datos binarios de longitud variable. n indica que n bytes
(n) el tamaño de almacenamiento máximo es de 231-
1 bytes
image En desuso, sustituido por varbinary.

Datos binarios de longitud variable desde 0 hasta


231 - 1 (2.147.483.647) bytes
Otros tipos cursor Tipo de datos para las variables o para los
de datos parámetros de resultado de los procedimientos
almacenados que contiene una referencia a un
cursor. Las variables creadas con el tipo de
datos cursor aceptan NULL
Manual De Base De Datos Con SQL-Server 79

timestamp Tipo de datos que expone números binarios 8 bytes


únicos generados automáticamente en una base
de datos. El tipo de datos timestamp es
simplemente un número que se incrementa y no
conserva una fecha o una hora
sql_variant Tipo de datos que almacena valores de varios
tipos de datos aceptados en SQL Server,
excepto text, ntext, image, timestamp y sql_varia
nt
uniqueiden Es un GUID (Globally Unique Identifier, 16 bytes
tifier Identificador Único Global)
table Es un tipo de datos especial que se puede utilizar
para almacenar un conjunto de resultados para
su procesamiento posterior. table se utiliza
principalmente para el almacenamiento temporal
de un conjunto de filas devuelto como el
conjunto de resultados de una función con
valores de tabla
xml Almacena datos de XML. Puede almacenar
instancias de xml en una columna o una variable
de tipo xml

4.10. Tipo De Datos Definidos Por El Usuario

SQL, brinda una serie de datos para almacenar la información, la correcta selección del tipo de
dato implica un determinado valor; por ejemplo: carácter, entero, binario, fecha, etc., así mismo
algunas veces necesitamos algún tipo de dato en especial, como el caso del DNI que cuenta con 8
caracteres de tipo CHAR o el número de celular de 9 caracteres.

Para esto pasaremos a definir la sintaxis para crear nuestro propio tipo de dato.

Sintaxis de creación:

CREANDO UN TIPO DEFINIDO


SP_ADDTYPE
SP_ADDTYPE NOMBRE TIPO, 'TIPO_DATOS','RESTRICCION'
GO
Manual De Base De Datos Con SQL-Server 80

Ahora gbien, si en caso se desea eliminar un tipo de dato creado por el usuario, se debe seguir la
siguiente sintaxis, teniendo en cuenta que para eliminar un tipo de dato, este no debe tener objetos
asociados.

Sintaxis de eliminación de tipo de dato:

ELIMINACIÓN DE UN TIPO DEFINIDO


SP_DROPTYPE
SP_DROPTYPE 'NOMBRE_TIPO'
GO

CASO DESARROLLADO 21: Implementar una consulta que permita crear el tipo de dato
NOMBRE dentro de la base de datos LEGAJOS_CSJAN, además debe restringirle que no debe
contener espacio vacío.

CREANDO UN TIPO DEFINIDO


-- 1 USAMOS LA BD REQUERIDA

USE LEGAJOS_CSJAN
GO

-- 2 CREAMOS EL TIPO DE DATO 'NOMBRE'

SP_ADDTYPE NOMBRE, 'VARCHAR(45)', 'NOT NULL'


GO

-- 3 VEMOS QUE HA SIDO CREADA

SELECT S.NAME, S.XTYPE,S.LENGTH


FROM sys.systypes S
GO

VEMOS UN EJEMPLO DEL USO DE NUESTRO TIPO DE DATO CREADO, EN LA TABLA


SEDE

-- CREANDO LA TABLA SEDE

CREATE TABLE Sede(


idsede VARCHAR(10) NOT NULL,
nomsede NOMBRE,
obssede NOMBRE
)
GO
Manual De Base De Datos Con SQL-Server 81

4.11. Propiedades De Los Atributos

El paso previo que falta para la creación de una tabla dentro de la Base de Datos activa, es definir
dos propiedades comunes entre los campos de una tabla, propiedad:

 NULL
 IDENTITY
La propiedad NULL es la más común entre las asignaciones que se puede realizar al momento de
crear una tabla. Se ven dos formas de expresarla NULL y NOT NULL. Cuando señalamos como
NULL estamos indicando que el contenido de dicha columna no es obligatorio; por lo tanto, acepta
y devuelve valores nulos. Si se necesita especificar lo contrario, es decir, que sea obligatorio
registrar un valor dentro de la columna, entonces tendrá que especificar NOT NULL. Como en el
siguiente caso:

La propiedad IDENTITY sólo se aplica a tipos numéricos (INT) ya que define un autoincremento
de valores que se pueden representar una numeración de valores en forma automática por cada
registro dentro de una tabla. Por ejemplo: de la tabla anterior asistencia, podríamos modificar la
restricción de la clave primaria idasistencia, teniendo en cuenta que posee un tipo de dato numérico
INT¸ para que cuando se realice el registro, la numeración se autogenere, como el siguiente caso:
Manual De Base De Datos Con SQL-Server 82

El Script anterior se crea la tabla asistencia con la columna idasistencia de tipo entero con un
autoincremento de inicio 1 con salto de 1 (la numeracion será sucesiva: 1,2,3…, ya que el salto es
1. Si hubiese sido idasistencia INT IDENTITY (1,2), la numeración sería 1,3,5…).

4.12. El Objeto Tabla

Son objetos compuestos por una estructura (columnas) que almacenan información en forma lógica
e interrelacionada entre ellos formando filas acerca del objeto en general.

Si nos enfocamos en el mundo real, las tablas vendrían a ser las tablas son representaciones de
entidades. Siendo así las columnas especificadas en ella, serán las características de una entidad y
los valores ingresados serán los datos que podrían representar un hecho real.

La tabla pasajera representa a los familiares de una persona del mundo real, los cuales poseen una
clave primaria idPersonaFamiliar, apellidos y nombres apellidoynombre, sexo sexo, fecha de
nacimiento fechnac y una condición de si aún vive o no vive, desde aquí tenemos que definir las
capacidades de cada columna ya que eso derivará como será el ingreso de los valores a dichas
columnas

Todas las tablas tienen un campo especial llamado llave, que será aquel único valor que represente
a toda la tabla frente a las demás tablas y así logrará asociarse a las mismas

4.13. Manejo de tablas con Esquemas

CASO DESARROLLADO 22: Veremos un ejemplo de implementación de esquemas sobre la


Base de datos LEGAJOS_CSJAN5
Manual De Base De Datos Con SQL-Server 83

CREACION DE LOS ESQUEMAS

--USO DE BASE DE DATOS LEGAJOS_CSJAN5

USE LEGAJOS_CSJAN5
GO

--CREACION DE ESQUEMAS

CREATE SCHEMA RRHH AUTHORIZATION DBO


CREATE SCHEMA MANTENIMIENTO AUTHORIZATION DBO
CREATE SCHEMA UBICACION AUTHORIZATION DBO

--VER ESQUEMAS CREADOS

SELECT S.NAME FROM SYS.SCHEMAS S

Implementar un script donde distribuiremos los esquemas anteriores de la siguiente manera.

 RRHH
o Datos personales
o Documento identidad
o Otros datos de identificación
 MANTENIMIENTO
o Tipo familiar
o Nivel educativo
o Sede
 UBICACION
o Departamento
o Provincia
o Distrito

CASO DESARROLLADO 23: Luego deberá crear las tablas antes mencionadas haciendo
referencia a sus respectivos esquemas.

DISTRIBUCION DE ESQUEMAS

USE LEGAJOS_CSJAN5
GO

--CREAR TABLAS
CREATE TABLE RRHH.DATOSPERSONALES (
IDDATOSPERSONALES INT NOT NULL,
APELLIDOPATERNO VARCHAR (25) NOT NULL,
APELLIDOMATERNO VARCHAR (25) NOT NULL,
NOMBRE1 VARCHAR (25) NOT NULL,
NOMBRE2 VARCHAR (25) NOT NULL,
SEXO VARCHAR (10) NOT NULL,
Manual De Base De Datos Con SQL-Server 84

ESTADOCIVIL VARCHAR (15) NOT NULL


)
GO

CREATE TABLE RRHH.DOCUMENTOIDENTIDAD (


IDDOCUMENTOIDENTIDAD INT NOT NULL,
TIPODOCUMENTO VARCHAR(24) NOT NULL

)
GO

CREATE TABLE RRHH.OTROSDATOSIDENTIFICACION (


IDDATOSIDENTIFICACION INT NOT NULL,
NUMLIBRETAMILITAR VARCHAR(10) NOT NULL,
CARNEESSALUD VARCHAR(10) NOT NULL,
RUC CHAR(11) NOT NULL

)
GO

CREATE TABLE MANTENIMIENTO.TIPOFAMILIAR (


IDTIPOFAMILIAR INT NOT NULL,
NOMTIPO VARCHAR(25) NOT NULL

)
GO

CREATE TABLE MANTENIMIENTO.NIVELEDUCATIVO (


IDNIVELEDUCATIVO INT NOT NULL,
NOMNIVEL VARCHAR(10) NOT NULL

)
GO

CREATE TABLE MANTENIMIENTO.SEDE(


IDSEDE VARCHAR(10) NOT NULL,
MONSEDE VARCHAR(100) NOT NULL,
OBSSEDE VARCHAR(100)
)
GO

CREATE TABLE UBICACION.DEPARTAMENTO (


IDDEPARTAMENTO VARCHAR(45) NOT NULL,
NOMDEPART VARCHAR(45) NOT NULL

)
GO

CREATE TABLE UBICACION.PROVINCIA (


IDPROVINCIA VARCHAR(45) NOT NULL,
NOMPROVIN VARCHAR(10) NOT NULL

)
GO

CREATE TABLE UBICACION.DISTRITO(


IDDISTRITO VARCHAR(45) NOT NULL,
MOMDISTRIT VARCHAR(45) NOT NULL,

)
GO
Manual De Base De Datos Con SQL-Server 85

4.14. Restricciones De Tipo: Unique, Check, Default

 UNIQUE: Determina que los valores registrados en una misma columna no sean idénticos,
es decir, se mantengan únicos. La restricción de UNIQUE permite controlar cualquier otro
campo que no sea llave. Así mismo tener en cuenta que la columna definida como UNIQUE
acepta a lo más un valor NULL mientras que una columna restringida con PRIMARY KEY
no permite dicha acción.

CASO DESARROLLADO 24: Implementar una consulta que permita añadir la restricción
UNIQUE a la columna NOMDEPART, es decir solo permita registrar nombre de los
departamentos sin repetirse.

CREANDO LA RESTRICCION UNIQUE PARA LA TABLA DEPARTAMENTO

-- USAREMOS LA BASE DE DATOS LEGAJOS_CSJAN5


USE LEGAJOS_CSJAN5
GO
-- CREAMOS LA TABLA DEPARTAMENTO
CREATE TABLE Departamento(
idDepartamento VARCHAR(45) NOT NULL,
nomdepart VARCHAR(100) NOT NULL
)
GO

-- AGREGAMOS LA LLAVE PRIMARIA A LA TABLA DEPARTAMENTO


ALTER TABLE DBO.Departamento
ADD PRIMARY KEY NONCLUSTERED (idDepartamento)
GO

1° FORMA DE CREAR LA RESTRICCIÓN UNIQUE

-- PRIMERA FORMA DE USAR UNIQUE

ALTER TABLE DBO.Departamento


ADD CONSTRAINT nom_depart UNIQUE (nomdepart)
GO

2° FORMA DE CREAR LA RESTRICCIÓN UNIQUE

-- SEGUNDA FORMA

CREATE TABLE Departamento(


idDepartamento VARCHAR(45) NOT NULL,
nomdepart VARCHAR(100) UNIQUE
)
GO

INSERTANDO DATOS A LA TABLA DEPARTAMENTO


Manual De Base De Datos Con SQL-Server 86

INSERT INTO dbo.Departamento VALUES ('01','AMAZONAS')


INSERT INTO dbo.Departamento VALUES ('02','AMAZONAS')

 CHECK: Permite restringir el rango de valores que pueden estar permitidos ingresar en una o
más columnas de una tabla.

CASO DESARROLLADO 25: Implementar una consulta que permita añadir la restricción a la
columna FECHA de la tabla MERITOS en donde solo permitirá registrar fechas de resoluciones
menores o iguales al día actual.

CREANDO LA RESTRICCION CHECK A LA TABLA MERITOS

-- USAREMOS LA BASE DE DATOS LEGAJOS_CSJAN5


USE LEGAJOS_CSJAN5
GO

-- VERIFICANDO LAS COLUMNAS DE LA TABLA MERITO

SP_COLUMNS Meritos

-- CREANDO LA RESTRICCION CHECK

ALTER TABLE DBO.MERITOS


ADD CONSTRAINT CHK_FECHA CHECK(fecharesol<=GETDATE())

 DEFAULT: Permite personalizar dichas restricciones a cualquier columna de una tabla que
no tenga como restricción NOT NULL.

CASO DESARROLLADO 26: Implementar una consulta que permita añadir la restricción a la
columna FECHACONTROL de la tabla MERITOS en donde si el usuario no registra la fecha se
inserte la fecha actual por defecto.

CREANDO LA RESTRICCION DEFAULT A LA TABLA MERITOS

-- USAREMOS LA BASE DE DATOS LEGAJOS_CSJAN5


USE LEGAJOS_CSJAN5
GO
Manual De Base De Datos Con SQL-Server 87

-- VERIFICANDO LAS COLUMNAS DE LA TABLA MERITO

SP_COLUMNS Meritos

-- CREANDO LA RESTRICCION CHECK

ALTER TABLE DBO.MERITOS


ADD CONSTRAINT FECHA_DEF DEFAULT GETDATE() FOR fechacontrol

INSERTANDO DATOS A LA TABLA MERITOS

-- INSERTANDO DATOS A LA TABLA MERITOS

insert into Meritos


(idmeritos,motivo,fecharesol,descrip,fechacontrol,documento)
values
(1,’MOTIVO1’,’2017-02-16’,’DESCRIPCION1’,DEFAULT,’DOC1’)

insert into Meritos


(idmeritos,motivo,fecharesol,descrip,fechacontrol,documento)
values
(2,’MOTIVO2’,’2017-02-16’,’DESCRIPCION2’,DEFAULT,’DOC2’)

4.15. Esquemas, Caso Propuesto: Gestión De Legajos

-- LA BASE DE DATOS

IF DB_ID('LEGAJOS_CSJAN2') IS NOT NULL


BEGIN
USE master
DROP DATABASE LEGAJOS_CSJAN2
END

CREATE DATABASE LEGAJOS_CSJAN2


GO

-- ACTIVACIÓN DE LA BASE LEGAJOS_CSJAN

USE LEGAJOS_CSJAN2
GO

-- IMPLEMENTANDO LAS TABLAS

CREATE TABLE documentoidentidad(


iddocumentoidentidad varchar(25) NOT NULL,
tipodocumento varchar(45) NOT NULL
)
GO
Manual De Base De Datos Con SQL-Server 88

CREATE TABLE dependencia(


iddependencia varchar(10) NOT NULL,
nomdependencia varchar(100) NOT NULL,
descripdependencia varchar(100) NULL
)
GO

CREATE TABLE departamento(


idDepartamento varchar(45) NOT NULL,
mondepart varchar(80) NOT NULL
)
GO

CREATE TABLE condicion(


idcondicion varchar(10) NOT NULL,
tipocondicion varchar(100) NOT NULL,
descripcion varchar(100) NULL
)
GO

CREATE TABLE cargoactual(


idcargoactual varchar(10) NOT NULL,
nomcargoactual varchar(100) NOT NULL,
descripcargoactual varchar(100) NULL
)
GO

CREATE TABLE afpactual(


idAFPactual varchar(10) NOT NULL,
nomAFP varchar(45) NOT NULL
)
GO

CREATE TABLE nrointerior(


idnrointerior varchar(10) NOT NULL,
nominterior varchar(45) NOT NULL
)
GO

CREATE TABLE nroexterior(


idnroexterior varchar(10) NOT NULL,
nomexterior varchar(45) NOT NULL
)
GO

CREATE TABLE niveleducativo(


idNiveleducativo int IDENTITY(1,1) NOT NULL,
nomnivel varchar(45) NOT NULL
)
GO

CREATE TABLE personal(


idpersonal varchar(10) NOT NULL,
situacion varchar(45) NULL
)
GO

CREATE TABLE personafamiliar(


idPersonaFamiliar int IDENTITY(1,1) NOT NULL,
apellidosynombres varchar(80) NOT NULL,
sexo varchar(45) NOT NULL,
fechanac date NOT NULL,
vive varchar(45) NOT NULL
Manual De Base De Datos Con SQL-Server 89

)
GO

CREATE TABLE usuario(


idusuario varchar (10) NOT NULL,
apeusuario varchar(45) NOT NULL,
nomusuario varchar(45) NOT NULL,
paswusuario varchar(25) NOT NULL,
cargoactualusu varchar(45) NOT NULL,
estado varchar(45) NULL
)
GO

CREATE TABLE tipotituloygrado(


idtipotituloygrado int IDENTITY(1,1) NOT NULL,
nombretipo varchar(80) NOT NULL
)
GO

CREATE TABLE tiporegimenpensiones(


idTiporegimenpensiones varchar(10) NOT NULL,
nomtipo varchar(45) NOT NULL
)
GO

CREATE TABLE tipofamiliar(


idtipofamiliar int IDENTITY(1,1) NOT NULL,
nomtipo varchar(80) NOT NULL
)
GO

CREATE TABLE tipodependencia(


idtipodependencia varchar(10) NOT NULL,
tipodepend varchar(100) NOT NULL
)
GO

CREATE TABLE tipodefalta(


idtipodefalta int IDENTITY(1,1) NOT NULL,
codigofalta varchar(80) NOT NULL
)
GO

CREATE TABLE regimenlaboral(


idregimenlaboral varchar(10) NOT NULL,
nombreregimen varchar(100) NOT NULL,
descripregimen varchar(100) NULL
)
GO

CREATE TABLE parametros(


idparametros int IDENTITY(1,1) NOT NULL,
descripcion varchar(100) NULL,
tipo varchar(45) NULL
)
GO

CREATE TABLE zona(


idzona varchar(10) NOT NULL,
nomzona varchar(45) NOT NULL
)
GO
Manual De Base De Datos Con SQL-Server 90

CREATE TABLE via(


idvia varchar(10) NOT NULL,
nomvia varchar(60) NOT NULL
)
GO

CREATE TABLE sede(


idsede varchar(10) NOT NULL,
nomsede varchar(100) NOT NULL,
obssede varchar(100) NULL
)
GO

CREATE TABLE regimenpensiones(


idregimenpensiones varchar(10) NOT NULL,
CUSPP varchar(45) NULL,
fechaafiliacion date NULL,
idTiporegimenpensiones varchar(10) NULL,
idAFPactual varchar(10) NULL,
idpersonal varchar(10) NULL
)
GO

CREATE TABLE regimenlaboral_personal(


idregimenlaboral varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL
)
GO

CREATE TABLE provincia(


idProvincia varchar(45) NOT NULL,
idDepartamento varchar(45) NULL,
nomprovin varchar(100) NULL
)
GO

CREATE TABLE dependencia_sede(


iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idtipodependencia varchar(10) NULL,
direccion varchar(80) NULL,
telefonofax varchar(80) NULL
)
GO

CREATE TABLE auditoria(


idAuditoria int IDENTITY(1,1) NOT NULL,
accion varchar(45) NULL,
fechahora datetime2(0) NULL,
idusuario varchar(10) NULL,
idpersonal varchar(10) NULL
)
GO

CREATE TABLE caracniveleduc(


idCaracniveleduc int IDENTITY(1,1) NOT NULL,
modalidad varchar(45) NOT NULL,
centrodeestudios varchar(80) NOT NULL,
fechafinalizaestudios date NOT NULL,
idNiveleducativo int NULL,
idpersonal varchar(10) NULL
)
GO
Manual De Base De Datos Con SQL-Server 91

CREATE TABLE casoemergencia(


idCasoemergencia int IDENTITY(1,1) NOT NULL,
apellidos varchar(80) NOT NULL,
nombres varchar(80) NOT NULL,
teleffijo varchar(45) NULL,
telcel varchar(45) NULL,
idpersonal varchar(10) NULL
)
GO

CREATE TABLE datosfamiliares(


idPersonaFamiliar int NOT NULL,
idpersonal varchar(10) NOT NULL,
idtipofamiliar int NULL
)
GO

CREATE TABLE datosestudios(


idpersonal varchar(10) NULL,
idtipotituloygrado int NULL,
idTitulosygrados int IDENTITY(1,1) NOT NULL,
obser varchar(80) NULL,
nombregrado varchar(100) NULL,
centroestudio varchar(100) NULL,
numgradotit varchar(45) NULL,
fechaobtencion date NULL
)
GO

CREATE TABLE distrito(


idDistrito varchar(45) NOT NULL,
idProvincia varchar(45) NULL,
nomdistrit varchar(100) NULL
)
GO

CREATE TABLE cargoactual_dependencia_sede(


idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL
)
GO

CREATE TABLE cargoactual_dependencia_sede_personal(


idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
fechainicio date NOT NULL,
fechafin date NULL,
procedenciasede varchar(100) NOT NULL,
numresolucion varchar(100) NOT NULL,
fecharesol date NOT NULL,
numoficio varchar(45) NOT NULL,
fechaoficio date NOT NULL,
fechadecontrol datetime2(0) NOT NULL,
idcondicion varchar(10) NULL,
procedenciadependen varchar(145) NULL,
procedenciacargo varchar(145) NULL,
oficioregimen varchar(100) NULL,
observacion varchar(200) NULL,
Manual De Base De Datos Con SQL-Server 92

activo varchar(45) NULL,


personalreemplazado varchar(10) NULL
)
GO

CREATE TABLE datosconyuge(


idDatosconyuge int IDENTITY(1,1) NOT NULL,
numero varchar(45) NOT NULL,
carnetsalud varchar(45) NULL,
sector varchar(45) NOT NULL,
entidad varchar(80) NULL,
pais varchar(45) NULL,
idDistrito varchar(45) NULL,
iddocumentoidentidad varchar(25) NULL,
idpersonal varchar(10) NOT NULL,
idregimenlaboral varchar(10) NOT NULL
)
GO

CREATE TABLE datospersonales(


iddatospersonales varchar(10) NOT NULL,
apellidopaterno varchar(45) NOT NULL,
apellidomaterno varchar(45) NOT NULL,
nombre1 varchar(45) NOT NULL,
nombre2 varchar(45) NOT NULL,
nombre3 varchar(45) NULL,
numdocindentidad varchar(45) NOT NULL,
sexo varchar(10) NOT NULL,
Estadocivil varchar(15) NOT NULL,
Gruposanguineo varchar(10) NULL,
fechanacio date NOT NULL,
paisnacimiento varchar(45) NOT NULL,
iddocumentoidentidad varchar(25) NULL,
idDistrito varchar(45) NULL,
idpersonal varchar(10) NULL,
correo varchar(45) NOT NULL,
escalafon varchar(45) NULL
)
GO

CREATE TABLE otrosdatosidentificacion(


idotrosdatosidentif varchar(10) NOT NULL,
numlibretamilitar varchar(25) NULL,
carneessalud varchar(45) NULL,
RUC varchar(45) NULL,
numlicenciaconducir varchar(45) NULL,
telefonofijo varchar(25) NULL,
telefonocelular varchar(25) NULL,
claseycategoria varchar(45) NULL,
iddatospersonales varchar(10) NULL
)
GO

CREATE TABLE vacaciones(


idvacaciones int IDENTITY(1,1) NOT NULL,
motivo varchar(80) NOT NULL,
desde date NOT NULL,
hasta date NOT NULL,
dias int NOT NULL,
anio varchar(45) NOT NULL,
estado varchar(45) NOT NULL,
observacion varchar(80) NULL,
idcargoactual varchar(10) NOT NULL,
Manual De Base De Datos Con SQL-Server 93

iddependencia varchar(10) NOT NULL,


idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
resolucion varchar(100) NULL,
fecharesol date NULL,
oficio varchar(100) NULL,
fecofic date NULL,
fechacontrol datetime2(0) NULL
)
GO

CREATE TABLE subsidios(


idsubcidios int IDENTITY(1,1) NOT NULL,
motivo varchar(80) NULL,
numsolicitud varchar(45) NULL,
numcheque varchar(45) NULL,
banco varchar(80) NULL,
montocheque float NULL,
numoficio varchar(45) NULL,
fechini date NULL,
fechafin date NULL,
diassubisidio int NULL,
subdiario float NULL,
totalsub float NULL,
fechcontrol datetime2(0) NULL,
observ varchar(80) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL
)
GO

CREATE TABLE permisoslicencia(


idpermisos int IDENTITY(1,1) NOT NULL,
motivo varchar(100) NOT NULL,
fechainici datetime2(0) NOT NULL,
fechafin datetime2(0) NOT NULL,
observa varchar(80) NULL,
tipo varchar(80) NOT NULL,
consingose varchar(45) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
dias int NULL,
horas int NULL,
min int NULL,
justifico varchar(45) NULL,
fechacontrol datetime2(0) NULL,
resolucion varchar(100) NULL,
fecharesol date NULL,
oficio varchar(100) NULL,
fechaoficio date NULL
)
GO

CREATE TABLE meritos(


idmeritos int IDENTITY(1,1) NOT NULL,
motivo varchar(100) NULL,
Manual De Base De Datos Con SQL-Server 94

fecharesol date NULL,


descrip varchar(200) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
fechacontrol datetime2(0) NULL,
documento varchar(100) NULL
)
GO

CREATE TABLE documentosevaluacion(


idevaluacion int IDENTITY(1,1) NOT NULL,
resolucion varchar(45) NULL,
fecharesol date NULL,
descrip varchar(200) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
fechacontrol datetime2(0) NULL
)
GO

CREATE TABLE direcciondomiciliaria(


iddirecciondomiciliaria varchar(10) NOT NULL,
detnomvia varchar(60) NOT NULL,
detnomexterior varchar(60) NOT NULL,
detnominterior varchar(60) NOT NULL,
detnomzona varchar(60) NOT NULL,
iddatospersonales varchar(10) NULL,
idDistrito varchar(45) NULL,
idzona varchar(10) NULL,
idvia varchar(10) NULL,
idnrointerior varchar(10) NULL,
idnroexterior varchar(10) NULL
)
GO

CREATE TABLE demeritos(


iddemeritos int IDENTITY(1,1) NOT NULL,
tipoproceso varchar(100) NOT NULL,
resol varchar(200) NULL,
fecharesol date NULL,
descrip varchar(200) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
depsanciona varchar(200) NULL,
feccontrol datetime2(0) NULL,
motivo varchar(150) NULL,
sancion varchar(100) NULL,
rehabilitado varchar(100) NULL
)
GO

CREATE TABLE bonificacion(


idbonificacion int IDENTITY(1,1) NOT NULL,
motivo varchar(80) NULL,
Manual De Base De Datos Con SQL-Server 95

resol varchar(80) NULL,


fecharesl date NULL,
tipo varchar(45) NULL,
descrip varchar(100) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
feccontrol datetime2(0) NULL
)
GO

CREATE TABLE bajasyaltas(


idbajasyaltas int IDENTITY(1,1) NOT NULL,
fecha date NULL,
fechacontrol date NULL,
resolucion varchar(100) NULL,
fecharesol date NULL,
oficio varchar(45) NULL,
observacion varchar(200) NULL,
tipo varchar(45) NULL,
idparametros int NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
preemplaza varchar(200) NULL
)
GO

CREATE TABLE asistencia(


idasistencia int IDENTITY(1,1) NOT NULL,
estado varchar(10) NULL,
fecha datetime2(0) NOT NULL,
mintardanza int NOT NULL,
observacion varchar(80) NULL,
idtipodefalta int NULL,
justificacion varchar(2) NULL,
detallejustificacion varchar(100) NULL,
idcargoactual varchar(10) NOT NULL,
iddependencia varchar(10) NOT NULL,
idsede varchar(10) NOT NULL,
idpersonal varchar(10) NOT NULL,
idorden int NOT NULL,
idpermiso int NULL,
feccontrol datetime2(0) NULL
)
GO

-- IMPLEMENTANDO LAS LLAVES PRIMARIAS

ALTER TABLE DBO.afpactual


ADD PRIMARY KEY NONCLUSTERED (idAFPactual)

ALTER TABLE DBO.asistencia


ADD PRIMARY KEY NONCLUSTERED (idasistencia)

ALTER TABLE DBO.auditoria


ADD PRIMARY KEY NONCLUSTERED (idAuditoria)

ALTER TABLE DBO.bajasyaltas


Manual De Base De Datos Con SQL-Server 96

ADD PRIMARY KEY NONCLUSTERED (idbajasyaltas)

ALTER TABLE DBO.bonificacion


ADD PRIMARY KEY NONCLUSTERED (idbonificacion)

ALTER TABLE DBO.caracniveleduc


ADD PRIMARY KEY NONCLUSTERED (idCaracniveleduc)

ALTER TABLE DBO.cargoactual


ADD PRIMARY KEY NONCLUSTERED (idcargoactual)

ALTER TABLE DBO.cargoactual_dependencia_sede


ADD PRIMARY KEY NONCLUSTERED (idcargoactual,iddependencia,idsede)

ALTER TABLE DBO.cargoactual_dependencia_sede_personal


ADD PRIMARY KEY NONCLUSTERED
(idcargoactual,iddependencia,idsede,idpersonal,idorden)

ALTER TABLE DBO.casoemergencia


ADD PRIMARY KEY NONCLUSTERED (idCasoemergencia)

ALTER TABLE DBO.condicion


ADD PRIMARY KEY NONCLUSTERED (idcondicion)

ALTER TABLE DBO.datosconyuge


ADD PRIMARY KEY NONCLUSTERED (idDatosconyuge)

ALTER TABLE DBO.datosestudios


ADD PRIMARY KEY NONCLUSTERED (idTitulosygrados)

ALTER TABLE DBO.datosfamiliares


ADD PRIMARY KEY NONCLUSTERED (idPersonaFamiliar,idpersonal)

ALTER TABLE DBO.datospersonales


ADD PRIMARY KEY NONCLUSTERED (iddatospersonales)

ALTER TABLE DBO.demeritos


ADD PRIMARY KEY NONCLUSTERED (iddemeritos)

ALTER TABLE DBO.departamento


ADD PRIMARY KEY NONCLUSTERED (idDepartamento)

ALTER TABLE DBO.dependencia


ADD PRIMARY KEY NONCLUSTERED (iddependencia)

ALTER TABLE DBO.dependencia_sede


ADD PRIMARY KEY NONCLUSTERED (iddependencia,idsede)

ALTER TABLE DBO.direcciondomiciliaria


ADD PRIMARY KEY NONCLUSTERED (iddirecciondomiciliaria)

ALTER TABLE DBO.distrito


ADD PRIMARY KEY NONCLUSTERED (idDistrito)

ALTER TABLE DBO.documentoidentidad


ADD PRIMARY KEY NONCLUSTERED (iddocumentoidentidad)

ALTER TABLE DBO.documentosevaluacion


ADD PRIMARY KEY NONCLUSTERED (idevaluacion)

ALTER TABLE DBO.meritos


ADD PRIMARY KEY NONCLUSTERED (idmeritos)
Manual De Base De Datos Con SQL-Server 97

ALTER TABLE DBO.niveleducativo


ADD PRIMARY KEY NONCLUSTERED (idNiveleducativo)

ALTER TABLE DBO.nroexterior


ADD PRIMARY KEY NONCLUSTERED (idnroexterior)

ALTER TABLE DBO.nrointerior


ADD PRIMARY KEY NONCLUSTERED (idnrointerior)

ALTER TABLE DBO.otrosdatosidentificacion


ADD PRIMARY KEY NONCLUSTERED (idotrosdatosidentif)

ALTER TABLE DBO.parametros


ADD PRIMARY KEY NONCLUSTERED (idparametros)

ALTER TABLE DBO.permisoslicencia


ADD PRIMARY KEY NONCLUSTERED (idpermisos)

ALTER TABLE DBO.personafamiliar


ADD PRIMARY KEY NONCLUSTERED (idPersonaFamiliar)

ALTER TABLE DBO.personal


ADD PRIMARY KEY NONCLUSTERED (idpersonal)

ALTER TABLE DBO.provincia


ADD PRIMARY KEY NONCLUSTERED (idProvincia)

ALTER TABLE DBO.regimenlaboral


ADD PRIMARY KEY NONCLUSTERED (idregimenlaboral)

ALTER TABLE DBO.regimenlaboral_personal


ADD PRIMARY KEY NONCLUSTERED (idregimenlaboral,idpersonal)

ALTER TABLE DBO.regimenpensiones


ADD PRIMARY KEY NONCLUSTERED (idregimenpensiones)

ALTER TABLE DBO.sede


ADD PRIMARY KEY NONCLUSTERED (idsede)

ALTER TABLE DBO.subsidios


ADD PRIMARY KEY NONCLUSTERED (idsubcidios)

ALTER TABLE DBO.tipodefalta


ADD PRIMARY KEY NONCLUSTERED (idtipodefalta)

ALTER TABLE DBO.tipodependencia


ADD PRIMARY KEY NONCLUSTERED (idtipodependencia)

ALTER TABLE DBO.tipofamiliar


ADD PRIMARY KEY NONCLUSTERED (idtipofamiliar)

ALTER TABLE DBO.tiporegimenpensiones


ADD PRIMARY KEY NONCLUSTERED (idTiporegimenpensiones)

ALTER TABLE DBO.tipotituloygrado


ADD PRIMARY KEY NONCLUSTERED (idtipotituloygrado)

ALTER TABLE DBO.usuario


ADD PRIMARY KEY NONCLUSTERED (idusuario)

ALTER TABLE DBO.vacaciones


ADD PRIMARY KEY NONCLUSTERED (idvacaciones)
Manual De Base De Datos Con SQL-Server 98

ALTER TABLE DBO.via


ADD PRIMARY KEY NONCLUSTERED (idvia)

ALTER TABLE DBO.zona


ADD PRIMARY KEY NONCLUSTERED (idzona)

-- IMPLEMENTANDO LAS LLAVES SECUNDARIAS

ALTER TABLE DBO.bajasyaltas


ADD FOREIGN KEY (idparametros) REFERENCES parametros

ALTER TABLE DBO.datosfamiliares


ADD FOREIGN KEY (idtipofamiliar) REFERENCES tipofamiliar

ALTER TABLE DBO.datosfamiliares


ADD FOREIGN KEY (idPersonaFamiliar) REFERENCES personafamiliar

ALTER TABLE DBO.caracniveleduc


ADD FOREIGN KEY (idNiveleducativo) REFERENCES niveleducativo

ALTER TABLE DBO.datosfamiliares


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.caracniveleduc


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.casoemergencia


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.auditoria


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.auditoria


ADD FOREIGN KEY (idusuario) REFERENCES usuario

ALTER TABLE DBO.regimenlaboral_personal


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.regimenlaboral_personal


ADD FOREIGN KEY (idregimenlaboral) REFERENCES regimenlaboral

ALTER TABLE DBO.datosconyuge


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.datosconyuge


ADD FOREIGN KEY (idDistrito) REFERENCES distrito

ALTER TABLE DBO.datosconyuge


ADD FOREIGN KEY (iddocumentoidentidad) REFERENCES documentoidentidad

ALTER TABLE DBO.datosconyuge


ADD FOREIGN KEY (idregimenlaboral) REFERENCES regimenlaboral

ALTER TABLE DBO.provincia


ADD FOREIGN KEY (idDepartamento) REFERENCES departamento

ALTER TABLE DBO.distrito


ADD FOREIGN KEY (idProvincia) REFERENCES provincia

ALTER TABLE DBO.datospersonales


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.datospersonales


Manual De Base De Datos Con SQL-Server 99

ADD FOREIGN KEY (idDistrito) REFERENCES distrito

ALTER TABLE DBO.datospersonales


ADD FOREIGN KEY (iddocumentoidentidad) REFERENCES documentoidentidad

ALTER TABLE DBO.direcciondomiciliaria


ADD FOREIGN KEY (iddatospersonales) REFERENCES datospersonales

ALTER TABLE DBO.direcciondomiciliaria


ADD FOREIGN KEY (idDistrito) REFERENCES distrito

ALTER TABLE DBO.direcciondomiciliaria


ADD FOREIGN KEY (idzona) REFERENCES zona

ALTER TABLE DBO.direcciondomiciliaria


ADD FOREIGN KEY (idvia) REFERENCES via

ALTER TABLE DBO.direcciondomiciliaria


ADD FOREIGN KEY (idnrointerior) REFERENCES nrointerior

ALTER TABLE DBO.direcciondomiciliaria


ADD FOREIGN KEY (idnroexterior) REFERENCES nroexterior

ALTER TABLE DBO.otrosdatosidentificacion


ADD FOREIGN KEY (iddatospersonales) REFERENCES datospersonales

ALTER TABLE DBO.documentosEvaluacion


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.bonificacion


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.vacaciones


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.demeritos


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.subsidios


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.permisoslicencia


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.meritos


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.bajasyaltas


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.asistencia


ADD FOREIGN KEY (idcargoactual,iddependencia,idsede,idpersonal,idorden)
REFERENCES cargoactual_dependencia_sede_personal

ALTER TABLE DBO.cargoactual_dependencia_sede_personal


Manual De Base De Datos Con SQL-Server 100

ADD FOREIGN KEY (idcargoactual,iddependencia,idsede)


REFERENCES cargoactual_dependencia_sede

ALTER TABLE DBO.cargoactual_dependencia_sede


ADD FOREIGN KEY (iddependencia,idsede)
REFERENCES dependencia_sede

ALTER TABLE DBO.cargoactual_dependencia_sede_personal


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.cargoactual_dependencia_sede_personal


ADD FOREIGN KEY (idcondicion) REFERENCES condicion

ALTER TABLE DBO.dependencia_sede


ADD FOREIGN KEY (idtipodependencia) REFERENCES tipodependencia

ALTER TABLE DBO.dependencia_sede


ADD FOREIGN KEY (iddependencia) REFERENCES dependencia

ALTER TABLE DBO.dependencia_sede


ADD FOREIGN KEY (idsede) REFERENCES sede

ALTER TABLE DBO.cargoactual_dependencia_sede


ADD FOREIGN KEY (idcargoactual) REFERENCES cargoactual

ALTER TABLE DBO.asistencia


ADD FOREIGN KEY (idtipodefalta) REFERENCES tipodefalta

ALTER TABLE DBO.regimenpensiones


ADD FOREIGN KEY (idAFPactual) REFERENCES afpactual

ALTER TABLE DBO.regimenpensiones


ADD FOREIGN KEY (idpersonal) REFERENCES personal

ALTER TABLE DBO.regimenpensiones


ADD FOREIGN KEY (idTiporegimenpensiones)
REFERENCES tiporegimenpensiones

ALTER TABLE DBO.datosestudios


ADD FOREIGN KEY (idtipotituloygrado)
REFERENCES tipotituloygrado

ALTER TABLE DBO.datosestudios


ADD FOREIGN KEY (idpersonal) REFERENCES personal
Manual De Base De Datos Con SQL-Server 101

Capítulo 5: Lenguaje de Manipulación de Datos (LMD)

Capítulo

5
Lenguaje de
Manipulación de Datos
(LMD)
CAPACIDAD CONTENIDO

 Definiciones Previas
DOCUMENTAR CAPACIDAD
 Comando INSERT INTO
BHVBEBVBBVHJ
 Comando UPDATE
GVJEVJEHVBEHJBVHJDEBVKHEV
 Comando DELETE
VGEVJEVUEEVE  Formas de uso del comando SELECT
hcbhbvhbrehvbekbvkebvbehvbekhbvebvh  Operadores en SQL Server
bhevevbehjvbhebvhebvhjebvhjebvhbehjbv
 Comandos de tipo JOIN
hjebvhjehjbvhjdbevhjbehjvbehbvhjedbvhe
Manual De Base De Datos Con SQL-Server 102

5.1. Definiciones Previas

Lenguaje De Manipulación De Datos

Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un idioma


proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de la misma
llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Bases de Datos
del Sistema Gestor de Bases de Datos. El lenguaje de manipulación de datos más popular hoy día
es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos
de DML son los usados por bases de datos IMS/DL1, CODASYL u otras.

Elementos del lenguaje de manipulación de datos

 Select,
 Insert,
 Delete,
 Update

Clasificación de los DML

Se clasifican en dos grandes grupos:

 lenguajes de consulta procedimentales


Lenguajes procedimentales. En este tipo de lenguaje el usuario da instrucciones al sistema para que
realice una serie de procedimientos u operaciones en la base de datos para calcular un resultado
final.
 lenguajes de consulta no procedimentales
En los lenguajes no procedimentales el usuario describe la información deseada sin un
procedimiento específico para obtener esa información.

Un DML es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a
los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el
modelo de datos adecuado.

El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y
manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases
de datos IMS/DL1, CODASYL u otras.
Manual De Base De Datos Con SQL-Server 103

5.2. Comando INSERT INTO

Especifica los valores de campo que se insertan en el nuevo registro. Si omite los nombres de los
campos, debe especificar los valores de campo en el orden definido por la estructura de la tabla. Si
SET NULL está ON, INSERT - SQL intentará insertar valores nulos en cualquier campo no
especificado de la cláusula VALUES.

SINTAXIS DE LA SENTENCIA INSERT INTO

INSERT INTO "nombre_tabla" ("columna1", "columna2", ...)


VALUES ("valor1", "valor2", ...)
GO
-- La sintaxis para insertar datos en una tabla mediante una
fila por vez.

El segundo tipo de INSERT INTO nos permite insertar filas múltiples en


una tabla

INSERT INTO "tabla1" ("columna1", "columna2", ...)


SELECT "columna3", "columna4", ...
FROM "tabla2"
GO

-- Note que esta es la forma más simple. La instrucción entera


puede contener fácilmente cláusulas WHERE, GROUP BY, y HAVING,
así como también uniones y alias.

CASO DESARROLLADO 27: Implementar una consulta que permita registrar los
DEPARTAMENTOS en la tabla DEPARTAMENTO de la base de datos
LEGAJOS_CSJAN_CONSULTAS, usar la versión simple de la instrucción o comando INSERT

INSERTANDO DATOS A LA TABLA DEPARTAMENTO (VERSION SIMPLE)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- CONSULTA PARA INSERTAR DATOS


INSERT INTO departamento (idDepartamento,mondepart)
VALUES ('01','AMAZONAS')
Manual De Base De Datos Con SQL-Server 104

INSERT INTO departamento (idDepartamento,mondepart)


VALUES ('02','ANCASH')

INSERT INTO departamento (idDepartamento,mondepart)


VALUES ('03','APURIMAC')

INSERT INTO departamento (idDepartamento,mondepart)


VALUES ('04','AREQUIPA')

INSERT INTO departamento (idDepartamento,mondepart)


VALUES ('05','AYACUCHO')
GO

CASO DESARROLLADO 28: Implementar una consulta que permita registrar los
DEPARTAMENTOS en la tabla DEPARTAMENTO de la base de datos
LEGAJOS_CSJAN_CONSULTAS aplicando el registro múltiple de filas (criterio de por lo
menos "n" filas).

INSERTANDO DATOS A LA TABLA DEPARTAMENTO (REGISTRO MULTIPLE)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- CONSULTA PARA INSERTAR DATOS

INSERT INTO departamento


VALUES ('06','CAJAMARCA'),
('07','PROV. CONST. DEL CALLAO'),
('08','CUSCO'),
('09','HUANCAVELICA'),
('10','HUANUCO')
GO
Manual De Base De Datos Con SQL-Server 105

CASO DESARROLLADO 29: Implementar una consulta que permita registrar los
DEPARTAMENTOS, aplicando un orden personalizado de las columnas (idDepartamento,
mondepart).

INSERTANDO DATOS A LA TABLA DEPARTAMENTO

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- CONSULTA PARA INSERTAR DATOS

INSERT INTO departamento (idDepartamento,mondepart)


VALUES ('11','ICA'),
('12','JUNIN'),
('13','LA LIBERTAD'),
('14','LAMBAYEQUE'),
('15','LIMA')
GO

CASO DESARROLLADO 30: Implementar una consulta que permita registrar en la Personal ,
teniendo en cuenta que solo se debe de ingresar la situación.

REGISTRADO EN TABLA PERSONAL SOLO SITUACION

-- UTILIZAR BASE DE DATOS

USE LEGAJOS_CSJAN_CONSULTAS
Manual De Base De Datos Con SQL-Server 106

GO

-- CREANDO LA TABLA

CREATE TABLE PERSONAL_TEMP (


IDPERSONAL INT NOT NULL IDENTITY,
SITUACION VARCHAR(25) NOT NULL

)
GO

--PONIENDO EL ID COMO PRIMARY

ALTER TABLE DBO.PERSONAL_TEMP


ADD PRIMARY KEY NONCLUSTERED (IDPERSONAL)
GO

--INSERTANDO

INSERT INTO DBO.PERSONAL_TEMP (SITUACION) VALUES ('DESACTIVADO')


GO

INSERT INTO DBO.PERSONAL_TEMP (SITUACION) VALUES ('ACTIVADO')


GO

CASO DESARROLLADO 31: Implementar una consulta para que la situación sea pueda insertar
solo “Alta o Baja”

INSERCCION DE ALTA Y BAJA

--ALTERACION PARA INSERTAR SOLO ‘ALTAS Y BAJAS’

ALTER TABLE PERSONAL_TEMP


ADD CONSTRAINT SITAC CHECK (SITUACION>='ALTA' OR SITUACION='BAJA')
GO

--INSERCCION

INSERT INTO DBO.PERSONAL_TEMP (SITUACION) VALUES ('ALTA')


GO

INSERT INTO DBO.PERSONAL_TEMP (SITUACION) VALUES ('BAJA')


GO
Manual De Base De Datos Con SQL-Server 107

CASO DESARROLLADO 32: Implementar una consulta que permita crear una vista, y que por
medio de esta vista se registre a la tabla personal.

INSERCIÓN EN UNA VISTA

--VERIFICAR TABLA PERSONAL

SELECT * FROM PERSONAL

--CREAR VISTA

CREATE VIEW VTA_PERSONAL


AS
SELECT IDPERSONAL, SITUACION
FROM PERSONAL
GO

--VERIFICAR VISTA
SELECT * FROM VTA_PERSONAL
SELECT * FROM PERSONAL

--INSERTAR POR VISTA

INSERT INTO VTA_PERSONAL (IDPERSONAL, SITUACION)VALUES ('A


GE','ALTA')

CASO DESARROLLADO 33: Implementar una consulta que permita registrar los 5 primeros
DEPARTAMENTOS a una tabla llamada DEPARTAMENTO_TEMP (La tabla será definida
por el usuario).

INSERTANDO DATOS A LA TABLA DEPARTAMENTO_TEMP

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS


USE LEGAJOS_CSJAN_CONSULTAS
GO

-- CREAMOS LA TABLA TEMPORAL DEPARTAMENTO_TEMP

CREATE TABLE DEPARTAMENTO_TEMP(


idDepartamento varchar(45) NOT NULL PRIMARY KEY,
mondepart varchar(80) NOT NULL
)
GO
Manual De Base De Datos Con SQL-Server 108

-- SELECCIONAMOS LOS 5 PRIMEROS REGISTROS


-- DE LA TABLA DEPARTAMENTO

SELECT
TOP(5)
idDepartamento,mondepart
FROM departamento

-- CONSULTA PARA INSERTAR LOS 5 PRIMEROS REGISTROS


-- A LA TABLA TEMPORAL

INSERT TOP(5) INTO


DEPARTAMENTO_TEMP(idDepartamento,mondepart)
SELECT
idDepartamento,mondepart
FROM departamento
GO

-- COMANDO PARA VERIFICACION LOS REGISTROS

SELECT * FROM DEPARTAMENTO_TEMP

CASO DESARROLLADO 34: Implementar una tabla temporal para personal e ingresar solo los
que tenga en Idepersonal “AC”

INSERCIÓN EN TABLA TEMPORAL

-- CREACION DE TABLA TEMPORAL

CREATE TABLE DATOSPERSONALES_TEMP(


IDDATOSPERSONALES VARCHAR(10) NOT NULL,
APELLIDOPATERNO VARCHAR(45) NOT NULL,
APELLIDOMATERNO VARCHAR(45) NOT NULL,
NOMBRE1 VARCHAR(45) NOT NULL,
NOMBRE2 VARCHAR(45) NOT NULL,
NOMBRE3 VARCHAR(45) NULL,
NUMDOCINDENTIDAD VARCHAR(45) NOT NULL,
SEXO VARCHAR(10) NOT NULL,
ESTADOCIVIL VARCHAR(15) NOT NULL,
GRUPOSANGUINEO VARCHAR(10) NULL,
FECHANACIO DATE NOT NULL,
PAISNACIMIENTO VARCHAR(45) NOT NULL,
IDDOCUMENTOIDENTIDAD VARCHAR(25) NULL,
IDDISTRITO VARCHAR(45) NULL,
IDPERSONAL VARCHAR(10) NULL,
CORREO VARCHAR(45) NOT NULL,
Manual De Base De Datos Con SQL-Server 109

ESCALAFON VARCHAR(45) NULL


)
GO

SELECT * FROM DATOSPERSONALES WHERE (IDDATOSPERSONALES LIKE '%AC')


GO

-- INSERCION A LA TABLA TEMPORAL

INSERT INTO DATOSPERSONALES_TEMP


(IDDATOSPERSONALES, APELLIDOPATERNO
,APELLIDOMATERNO,NOMBRE1,NOMBRE2,NOMBRE3,NUMDOCINDENTIDAD,SEXO,
ESTADOCIVIL,GRUPOSANGUINEO,FECHANACIO,PAISNACIMIENTO,
IDDOCUMENTOIDENTIDAD,IDDISTRITO,IDPERSONAL,CORREO,ESCALAFON)
SELECT IDDATOSPERSONALES, APELLIDOPATERNO
,APELLIDOMATERNO,NOMBRE1,NOMBRE2,NOMBRE3,NUMDOCINDENTIDAD,
SEXO,ESTADOCIVIL,GRUPOSANGUINEO,FECHANACIO,PAISNACIMIENTO,
IDDOCUMENTOIDENTIDAD,IDDISTRITO,IDPERSONAL,CORREO,ESCALAFON
FROM DATOSPERSONALES WHERE(IDDATOSPERSONALES LIKE '%AC')
GO

CASO DESARROLLADO 35: Implementar una consulta que permita insertar un registro a la
tabla Documento Identidad por medio de una variable temporal de tipo table.

INSERTANDO DATOS POR VARIABLE TEMPORAL TIPO TABLE

-- CREAMOS VARIABLE TEMPORAL


DECLARE @TEMP_DOCUMENTOIDENTIDAD
TABLE(ID CHAR(5) ,
TIPO VARCHAR(50)
)
INSERT DOCUMENTOIDENTIDAD
OUTPUT INSERTED.IDDOCUMENTOIDENTIDAD,
INSERTED.TIPODOCUMENTO

VALUES ('05','CERTIFICADO DE NACIMIENTO')


GO

-- MOSTRAMOS EL DATO INSERTADO

SELECT * FROM DOCUMENTOIDENTIDAD


GO
Manual De Base De Datos Con SQL-Server 110

CASO DESARROLLADO 36: Implementar una consulta que permita registrar los departamentos
a una nueva tabla temporal llamada MIS DEPARTAMENTOS, usar la instrucción with

INSERTANDO DATOS A LA TABLA MISDEPARTAMENTOS (USANDO WITH)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- CREAMOS LA TABLA TEMPORAL MISDEPARTAMENTOS

CREATE TABLE MISDEPARTAMENTOS(


idDep varchar(45),
mpart varchar(80)
)
GO

-- USAMOS EL COMANDO WITH

WITH DEPARTAMENTO_TEMP(idDep,mpart)
AS
(
SELECT * FROM departamento
)
INSERT INTO MISDEPARTAMENTOS
SELECT * FROM DEPARTAMENTO_TEMP
GO

-- VERIFICAMOS LOS REGISTROS DE LA TABLA MISDEPARTAMENTOS

SELECT * FROM MISDEPARTAMENTOS


GO
Manual De Base De Datos Con SQL-Server 111

5.3. Comando UPDATE

Update es la instrucción del lenguaje SQL que nos sirve para modificar los registros de una tabla.
Como para el caso de Delete, necesitamos especificar por medio de Where cuáles son los registros
en los que queremos hacer efectivas nuestras modificaciones. Además, obviamente, tendremos que
especificar cuáles son los nuevos valores de los campos que deseamos actualizar. UPDATE - SQL
sólo puede actualizar registros en una sola tabla.

Tenga en cuenta que no se admiten subconsultas en UPDATE – SQL.

SINTAXIS DEL COMANDO UPDATE

UPDATE nombre_tabla
SET columna_1 = 'nuevo valor'
WHERE "condición";
GO

A diferencia de REPLACE, UPDATE - SQL utiliza el bloqueo de registros cuando actualiza varios
registros de una tabla abierta para acceso compartido. Este hecho disminuye la contención de
registros en situaciones de varios usuarios, pero puede reducir el rendimiento. Para conseguir el
máximo rendimiento, abra la tabla para uso exclusivo o utilice FLOCK( ) para bloquear la tabla.

CASO DESARROLLADO 37: Implementar una consulta que permita actualizar los valores de
la situación de la tabla Personal por “ALTA”.

MODIFICACION DE COLUMNA SITUACION

--MODIFICACION DE TABLA PERSONAL


UPDATE PERSONAL
SET SITUACION = 'ALTA'
GO

--VERIFICACION

SELECT * FROM PERSONAL


Manual De Base De Datos Con SQL-Server 112

CASO DESARROLLADO 38: Implementar una consulta que permita actualizar los valores de
la situación de la tabla Personal por “BAJA”.

MODIFICACION DE COLUMNA SITUACION

--MODIFICACION DE TABLA PERSONAL


UPDATE PERSONAL
SET SITUACION = 'BAJA'
GO

--VERIFICACION

SELECT * FROM PERSONAL

CASO DESARROLLADO 39: Implementar una consulta que permita asignar a la columna
situación “ALTA” sólo al registro cuya Id personal sea “A AR” y “A BL” Económico de la tabla
tarifa.

MODIFICACION DE COLUMNA SITUACION CON PARAMETRO

--MODIFICACION

UPDATE PERSONAL
SET SITUACION= 'ALTA'
WHERE IDPERSONAL='A AR' OR IDPERSONAL ='A BL'
GO

--VERIFICACION

SELECT * FROM PERSONAL


Manual De Base De Datos Con SQL-Server 113

CASO DESARROLLADO 40: Implementar una consulta que asigne la situación ‘ALTA’ en el
campo personal que sea de número de documento de identidad “31619873”. Todo esto deberá ser
realizado en la tabla Personal. Usar subconsultas.

MODIFICACION DE COLUMNA SITUACION CON SUBCONSULTAS

--VERIFICACION DE TABLAS

SELECT*FROM DATOSPERSONALES

SELECT*FROM PERSONAL

--MODIFICACION POR SUBCONSULTAS

UPDATE PERSONAL
SET SITUACION= 'ALTA'
WHERE IDPERSONAL=(SELECT IDPERSONAL FROM DATOSPERSONALES WHERE
NUMDOCINDENTIDAD='31619873')
GO

--VERIFICAR

SELECT P.IDPERSONAL, P. SITUACION


FROM PERSONAL P , DATOSPERSONALES D
WHERE P.IDPERSONAL = D.IDPERSONAL AND D.NUMDOCINDENTIDAD='31619873'
GO

5.4. Comando DELETE

La sentencia DELETE permite eliminar todos los registros especificados en una determinada tabla.
Los registros marcados para su eliminación no se eliminarán físicamente de la tabla hasta que se
ejecute PACK. Los registros marcados para su eliminación pueden recuperarse (o quitar las
marcas) con RECALL.

Si se establece SET DELETED como ON, todos los comandos que incluyan un alcance pasarán
por alto los registros marcados para su eliminación.

A diferencia de DELETE, DELETE - SQL utiliza el bloqueo de registros cuando marca varios
registros para eliminarlos de las tablas abiertas para acceso compartido. Este hecho disminuye la
contención de registros en situaciones de varios usuarios, pero puede reducir el rendimiento. Para
conseguir el máximo rendimiento, abra la tabla para uso exclusivo o utilice FLOCK( ) para
bloquear la tabla.
Manual De Base De Datos Con SQL-Server 114

SINTAXIS DE LA SENTENCIA DELETE

DELETE [TOP (EXPRESSION)]


FROM TABLE
[WHERE {<condición>}]

- TOP: Especifica una muestra en número o porcentaje de registros


posibles a eliminar.

- TABLA O VISTA: aquí se especifica el nombre de la tabla o vista


que necesite eliminar.

- WHERE: condiciona la eliminacion de los registros que cumplan


con la condicion.

CASO DESARROLLADO 41: Implementar una consulta que permita eliminar todos los registros
de la tabla DEPARTAMENTO.

ELIMINANDO DATOS DE LA TABLA DEPARTAMENTO

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USANDO LA SENTENCIA DELETE

DELETE DEPARTAMENTO
GO

-- TAMBIEN SE PUEDE OPTAR POR LA SENTENCIA TRUNCATE TABLE.

TRUNCATE TABLE DEPARTAMENTO

CASO DESARROLLADO 42: Implementar una consulta que permita eliminar los registros de
las PROVINCIAS cuyo DEPARTAMENTO sean “AMAZONAS”. Usando sub consultas para
el proceso.

ELIMINANDO DATOS DE LA TABLA PROVINCIA (USANDO SUBCONSULTA)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- SELECCIONANDO LAS PROVINCIAS QUE PERTENECEN AL DEPARTAMENTO


'AMAZONAS'

SELECT * FROM provincia


WHERE idDepartamento=(SELECT idDepartamento
FROM departamento WHERE mondepart='AMAZONAS')
GO
Manual De Base De Datos Con SQL-Server 115

-- ELIMINANDO LOS REGISTROS MEDIANTE SUBCONSULTAS

DELETE FROM provincia


WHERE idDepartamento=(SELECT idDepartamento
FROM departamento WHERE mondepart='AMAZONAS')
GO

CASO DESARROLLADO 43: Implementar una consulta que permita eliminar el 5% de los
registros de la tabla PROVINCIA, cuyo DEPARTAMENTO sea "ANCASH". Usar sub
consultas.

ELIMINANDO DATOS DE LA TABLA PROVINCIA (USANDO SUBCONSULTA)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- SELECCIONANDO LAS PROVINCIAS QUE PERTENECEN AL DEPARTAMENTO


'ANCASH'

SELECT * FROM provincia


WHERE idDepartamento=(SELECT idDepartamento
FROM departamento WHERE mondepart='ANCASH')
GO

-- ELIMINANDO EL 5% DE LOS REGISTROS DE LA TABLA PROVINCIA

DELETE TOP (5) PERCENT


FROM provincia
WHERE idDepartamento = (
SELECT idDepartamento
FROM departamento
WHERE mondepart='ANCASH'
)
GO

CASO DESARROLLADO 44: Implementar una consulta que permita eliminar el 5% de los
registros de la tabla PROVINCIA cuyo DEPARTAMENTO sea "ANCASH", usar sub consultas
para el proceso y el operador OUTPUT.

ELIMINANDO DATOS DE LA TABLA PROVINCIA (OPERADOR OUPUT)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- DECLARAMOS LA VARIABLE @MISPROVINCIAS

DECLARE @MISPROVINCIAS TABLE (


IDPROV VARCHAR (45),
Manual De Base De Datos Con SQL-Server 116

IDDEP VARCHAR (45),


NOMBR VARCHAR (100)
)
DELETE provincia
OUTPUT deleted.idProvincia,
deleted.idDepartamento,
deleted.nomprovin
INTO @MISPROVINCIAS
FROM provincia P
WHERE idDepartamento = (
SELECT idDepartamento
FROM departamento
WHERE mondepart='ANCASH')

SELECT IDPROV, IDDEP,NOMBR FROM @MISPROVINCIAS


GO

5.5. Formas de uso del comando SELECT

Uno de los propósitos de la gestión de base de datos es almacenar información lógica y ordenada
dentro de tablas y obtener información de la misma, para logar este propósito usaremos la sentencia
SELECT y sus variadas formas de recuperación desde la tabla de una base de datos activa.

DECLARACIÓN GENERAL DEL COMANDO SELECT

SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] [Alias.] Select_Item


[[AS] Column_Name] [, [Alias.] Select_Item [[AS] Column_Name] ...]
FROM [FORCE][DatabaseName!]Table [[AS] Local_Alias]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
DatabaseName!] Table [[AS] Local_Alias] [ON JoinCondition …]
[[INTO Destination] | [TO FILE FileName [ADDITIVE] | TO PRINTER
[PROMPT] | TO SCREEN]] [PREFERENCE PreferenceName]
[NOCONSOLE] [PLAIN] [NOWAIT]
[WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]]
[GROUP BY GroupColumn [, GroupColumn ...]]
[HAVING FilterCondition] [UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]

GO
Manual De Base De Datos Con SQL-Server 117

Parámetros

SELECT
Especifica los campos, constantes y expresiones que se mostrarán en el resultado de la consulta.
ALL
De forma predeterminada, se muestran todas las filas del resultado de la consulta.
DISTINCT
Excluye duplicados de cualquier fila del resultado de la consulta.
Nota Puede utilizar DISTINCT únicamente una vez por cada cláusula SELECT.

TOP nExpr [PERCENT]


Especifica que el resultado de la consulta contenga un número determinado de filas o un
porcentaje de filas en el resultado de la consulta. Es necesario incluir una cláusula ORDER BY
si incluye la cláusula TOP. La cláusula ORDER BY especifica las columnas en las que la
cláusula TOP determinará el número de filas que se va a incluir en el resultado de la consulta.

Alias.
Califica nombres de elementos coincidentes. Cada elemento que especifique
con Select_Item genera una columna de los resultados de la consulta. Si dos o más elementos
tienen el mismo nombre, incluya el alias de la tabla y un punto antes del nombre del elemento
para impedir la duplicación de las columnas.

Select_Item especifica un elemento que se incluirá en el resultado de la consulta. Un elemento


puede ser uno de los siguientes:

 El nombre de un campo de una tabla de la cláusula FROM.


 Una constante, especificando que el mismo valor constante debe aparecer en cada fila
del resultado de la consulta.
 Una expresión que puede ser el nombre de una función definida por el usuario (FDU).

AS Column_Name
Especifica el título de una columna en el resultado de la consulta. Esta opción resulta muy útil
cuando Select_Item es una expresión o contiene una función de campo y desea dar un nombre
significativo a la columna. Column_Name puede ser una expresión, pero no puede contener
caracteres (por ejemplo, espacios) que no estén permitidos para nombres de campos de tablas.
FROM
Indica las tablas que contienen los datos que ha obtenido la consulta. Si no hay ninguna tabla
abierta, puede especificar la ubicación del archivo. Una vez abierta, la tabla permanece abierta
cuando finaliza la consulta.
Manual De Base De Datos Con SQL-Server 118

DatabaseName!
Especifica el nombre de una base de datos inactiva que contiene la tabla. Es necesario incluir el
nombre de la base de datos que contiene la tabla en caso de que no sea la base de datos activa.
Incluya el delimitador signo de exclamación (!) después del nombre de la base de datos y antes
del nombre de la tabla.

[AS] Local_Alias
Especifica un nombre temporal para la tabla indicada en Table. Si especifica un alias local, debe
utilizar el alias local en lugar del nombre de la tabla en toda la instrucción SELECT.

INNER JOIN especifica que el resultado de la consulta contenga sólo filas en una tabla con la
que coincidan una o varias filas de otra tabla.

LEFT [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas de la
tabla a la izquierda de la palabra clave JOIN y sólo las filas que coincidan procedentes de la
tabla a la derecha de la palabra clave JOIN. La palabra clave OUTER es opcional; se puede
incluir para resaltar que se ha creado una combinación externa.

RIGHT [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas de
la tabla a la derecha de la palabra clave JOIN y sólo las filas que coincidan de la tabla a la
izquierda de la palabra clave JOIN. La palabra clave OUTER es opcional; se puede incluir para
resaltar que se ha creado una combinación externa.

FULL [OUTER] JOIN especifica que el resultado de la consulta contenga todas las filas,
coincidan o no, de ambas tablas. La palabra clave OUTER es opcional; se puede incluir para
resaltar que se ha creado una combinación externa.

ON Join Condition especifica las condiciones según las cuales se combinan las tablas.

INTO Destination
Determina donde se almacenan los resultados de la consulta. Si incluye una cláusula INTO y
una cláusula TO en la misma consulta, la cláusula TO se pasará por alto. Si no incluye la
cláusula INTO, los resultados de la consulta se mostrarán en la ventana Examinar. Los
resultados de la consulta pueden dirigirse también a la impresora o a un archivo con la cláusula
TO.

Destination puede ser uno de los siguientes:

 ARRAY ArrayName, que almacena los resultados de la consulta en una matriz de variable
de memoria. Si la consulta selecciona 0 registros, la matriz no se creará.
Manual De Base De Datos Con SQL-Server 119

 CURSOR CursorName [NOFILTER | READWRITE], que almacena los resultados de


una consulta en un cursor. Si especifica el nombre de una tabla abierta.

Incluya NOFILTER para crear un cursor que se pueda usar en consultas posteriores.

SELECT *, .T. FROM customers INTO CURSOR myquery

Si se incluye NOFILTER, es posible que disminuya el rendimiento de la consulta, puesto


que se crea una tabla temporal en el disco. Cuando se cierre el cursor se eliminará del disco
la tabla temporal.
La cláusula READWRITE especifica que el cursor es temporal y se puede modificar.

 DBF | TABLE TableName[DATABASE DatabaseName [NAME LongTableName]]


almacena los resultados de una consulta en una tabla. Si especifica una tabla que ya esté
abierta y SET SAFETY está en OFF, La tabla permanecerá abierta y activa después de
ejecutar SELECT.

TO FILE FileName
Si incluye una cláusula TO pero no una cláusula INTO, puede dirigir el resultado de la consulta
a un archivo de texto ASCII llamado FileName,

ADDITIVE anexa los resultados de la consulta al contenido existente del archivo de texto
especificado en TO FILE FileName.

TO PRINTER [PROMPT] dirige los resultados de la consulta a una impresora. Utilice la


cláusula PROMPT opcional para mostrar un cuadro de diálogo antes de que empiece la
impresión. En este cuadro de diálogo puede modificar la configuración de la impresora. Las
opciones de configuración de la impresora que puede ajustar dependen del controlador de
impresora que tenga instalado actualmente. Coloque PROMPT justo después de TO PRINTER.

PREFERENCE PreferenceName
Si el resultado de una consulta se envía a una ventana Examinar, guarda los atributos y opciones
de la ventana Examinar para utilizarlos después. PREFERENCE guarda los atributos, o
preferencias, por tiempo indefinido en el archivo de recursos FOXUSER. Las preferencias se
pueden recuperar en cualquier momento.

NOCONSOLE
Impide que el resultado de la consulta se envíe a un archivo.
Manual De Base De Datos Con SQL-Server 120

PLAIN
Impide que aparezcan los encabezados de las columnas al mostrar los resultados de la consulta.
PLAIN puede utilizarse tanto si está presente una cláusula TO como si no. Si se incluye una
cláusula TO, se pasará por alto PLAIN.

NOWAIT
Continúa la ejecución del programa después de abrir la ventana Examinar y de dirigir a ella los
resultados de la consulta. El programa no esperará a que la ventana Examinar se cierre, sino que
continuará con la ejecución de la línea de programa inmediatamente siguiente a la instrucción
SELECT.

WHERE

Especifica que solo debe incluir en los resultados de la consulta los registros que satisfagan los
criterios especificados.

JoinCondition
Especifica los campos que vinculan las tablas en la cláusula FROM. Si incluye más de una tabla
en una consulta, deberá especificar una condición de combinación para cada tabla después de
la primera.

Las condiciones de combinación múltiples deben conectarse mediante el operador AND. Cada
condición de combinación tiene la forma siguiente:

FieldName1 Comparison FieldName2

FieldName1 es el nombre de un campo de una tabla, FieldName2 es el nombre de un campo de


otra tabla y Comparison es uno de los operadores siguientes:

OPERADOR COMPARACIÓN

= Igual
== Exactamente igual
LIKE SQL LIKE
<>, !=, # Distinto de
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que

Cuando utiliza el operador = con cadenas, actúa de forma distinta dependiendo del ajuste de
SET ANSI. Cuando SET ANSI está desactivado, Visual FoxPro trata las comparaciones de
cadenas en la forma habitual en Xbase. Cuando SET ANSI está activado, Visual FoxPro sigue
las normas ANSI para las comparaciones de cadenas. Vea SET ANSI y SET EXACT para
Manual De Base De Datos Con SQL-Server 121

obtener información adicional acerca de cómo realiza Visual FoxPro las comparaciones de
cadenas.

La cláusula WHERE admite el operador ESCAPE para la JoinCondition, lo que le permite


realizar consultas significativas sobre datos que contengan caracteres comodín _ y % de
SELECT - SQL.

La cláusula ESCAPE le permite especificar que se traten los caracteres comodín de SELECT -
SQL como si fueran caracteres literales. En la cláusula ESCAPE se especifica un carácter, que
si se coloca inmediatamente antes del carácter comodín, indica que se tratará al carácter
comodín como a un carácter literal.

FilterCondition

Especifica los criterios que deben satisfacer los registros para ser incluidos en los resultados de
la consulta. Una consulta puede incluir tantas condiciones de filtro como desee, conectadas con
el operador AND y OR. También puede utilizar el operador NOT para invertir el valor de una
expresión lógica o utilizar EMPTY( ) para comprobar si hay campos vacíos.

FORMAS DE USO DEL COMANDO SELECT

-- PRIMERA FORMA
SELECT * FROM distrito
GO
-- SEGUNDA FORMA
SELECT ALL * FROM distrito
GO

-- ESPECIFICANDO COLUMNAS
SELECT idDistrito,idProvincia,nomdistrit FROM distrito
GO

-- CONSULTA EN ORDEN DISTINTO


SELECT idProvincia,nomdistrit FROM distrito
GO

-- CONSULTAS CON CABECERA PRIMERA FORMA


Manual De Base De Datos Con SQL-Server 122

SELECT idDistrito AS 'IDDISTRITO',


idProvincia AS 'IDPROVINCIA',
nomdistrit AS 'DISTRITO'
FROM distrito
GO
-- CONSULTAS CON CABECERA SEGUNDA FORMA
SELECT idDistrito [IDDISTRITO],
idProvincia [IDPROVINCIA],
nomdistrit [DISTRITO]
FROM distrito
GO
-- CONSULTAS CON CABECERA TERCERA FORMA
SELECT IDDISTRITO=idDistrito,
IDPROVINCIA=idProvincia,
DISTRITO=nomdistrit
FROM distrito
GO

-- LISTANDO LOS REGISTROS DE LA TABLA DISTRITO


SELECT D.idDistrito,D.idProvincia,D.nomdistrit
FROM distrito D
GO

CASO DESARROLLADO 45: Implementar una consulta que permita mostrar los códigos
registrados de la tabla DISTRITO sin repetirlos, use la cláusula DISTINCT.

COMANDO SELECT (USANDO LA CLAUSULA DISTINCT)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USO DE LA CLAUSULA DISTINCT

SELECT DISTINCT idDistrito FROM distrito


GO

CASO DESARROLLADO 46: Implementar una consulta que permita mostrar los registros de la
tabla DISTRITO ordenados por sus nombres en forma ascendente, use la cláusula ORDER BY.
Manual De Base De Datos Con SQL-Server 123

COMANDO SELECT (USANDO LA CLAUSULA ORDER BY)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USO DE LA CLAUSULA ORDER BY

SELECT *
FROM distrito
ORDER BY nomdistrit ASC

CASO DESARROLLADO 47: Implementar una consulta que permita mostrar los registros de la
tabla PROVINCIA ordenados por su IDDEPARTAMENTO en forma ascendente, use la cláusula
ORDER BY.

COMANDO SELECT (USANDO LA CLAUSULA ORDER BY)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USO DE LA CLAUSULA ORDER BY

SELECT idProvincia,idDepartamento,nomprovin
FROM provincia
ORDER BY idDepartamento ASC

-- Orden descendente
SELECT idProvincia,idDepartamento,nomprovin
FROM provincia
ORDER BY idDepartamento DESC

CASO DESARROLLADO 48: Implementar una consulta que permita mostrar los 5 primeros
registros de la tabla DEPARTAMENTO, use la cláusula TOP.
Manual De Base De Datos Con SQL-Server 124

COMANDO SELECT (USANDO LA CLAUSULA TOP)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USO DE LA CLAUSULA TOP

SELECT TOP 5 *
FROM departamento

CASO DESARROLLADO 49: Implementar una consulta que permita mostrar los 5 últimos
registros de la tabla DEPARTAMENTO, use la cláusula TOP y ORDER BY.

COMANDO SELECT (USANDO LA CLAUSULA TOP Y ORDER BY)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USO DE LA CLAUSULA TOP Y ORDER BY

SELECT TOP 5 *
FROM departamento
ORDER BY idDepartamento DESC

CASO DESARROLLADO 50: Implementar una consulta que permita mostrar el 20% de los
primeros registros de la tabla PROVINCIA, use la cláusula TOP PERCENT.

COMANDO SELECT (USANDO LA CLAUSULA TOP PERCENT)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO
Manual De Base De Datos Con SQL-Server 125

-- USO DE LA CLAUSULA TOP PERCENT

SELECT TOP 20 PERCENT *


FROM provincia
ORDER BY nomprovin ASC

CASO DESARROLLADO 51: Implementar una consulta que permita replicar los registros de la
tabla DISTRITO en una nueva tabla llamada MISDISTRITOS, use la cláusula INTO.

COMANDO SELECT (USANDO LA CLAUSULA INTO)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USO DE LA CLAUSULA INTO

IF OBJECT_ID('MISDISTRITOS') IS NOT NULL


BEGIN
DROP TABLE MISDISTRITOS
END
GO
SELECT *
INTO MISDISTRITOS
FROM distrito
GO
SELECT * FROM MISDISTRITOS
GO

CASO DESARROLLADO 52: Implementar una consulta que permita mostrar los registros de
las tablas DEPARTAMENTO y PROVINCIA combinados.

COMANDO SELECT (SELECCIONANDO DOS TABLAS)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- SELECCIONANDO LA TABLA DEPARTAMENTO Y LA TABLA PROVINCIA


Manual De Base De Datos Con SQL-Server 126

SELECT PRO.*,DEP.*
FROM provincia PRO,departamento DEP
WHERE PRO.idDepartamento=DEP.idDepartamento

CASO DESARROLLADO 53: Implementar una consulta que permita mostrar los registros de
las PROVINCIAS cuyo DEPARTAMENTO sea "CUSCO", use sub consultas en la cláusula
FROM.

COMANDO SELECT (USANDO SUB CONSULTA)

-- USAMOS LA BASE DE DATOS LEGAJOS_CSJAN_CONSULTAS

USE LEGAJOS_CSJAN_CONSULTAS
GO

-- USANDO SUB CONSULTAS

SELECT *
FROM (SELECT P.* FROM PROVINCIA P
WHERE idDepartamento='08') D
GO
-- PRIMERA FORMA
SELECT D.idProvincia,D.nomprovin [PROVINCIA]
FROM (SELECT P.* FROM PROVINCIA P
WHERE idDepartamento='08') D
GO
-- SEGUNDA FORMA

SELECT *
FROM (SELECT P.* FROM PROVINCIA P
WHERE idDepartamento=(SELECT idDepartamento
FROM departamento
WHERE mondepart='CUSCO')) D
GO
Manual De Base De Datos Con SQL-Server 127

5.6. Operadores en SQL Server

Operadores (Transact-SQl):

Un operador es un símbolo que especifica una acción que se realiza en una o más expresiones. En
las siguientes tablas se incluyen las categorías de operadores que utiliza SQL Server.

Operadores aritméticos

Operador de asignación

Operadores lógicos

Operadores Aritméticos (Transact-SQL)

Los operadores aritméticos realizan operaciones matemáticas con dos expresiones de uno o más de
los tipos de datos de la categoría de tipos de datos numéricos.

OPERADOR SIGNIFICADO
Operador de suma numérica, concatenación de columnas en
+ (Sumar)
una consulta y para los tipos de caracteres.
Operador de restas numéricas, también representa a los
- (Restar)
números negativos.
* (Multiplicar) Operador de Multiplicación.
/ (Dividir) Operador de división entera y fraccionaria.
Operador que devuelve el resto entero de una división. Por
% (Módulo)
ejemplo, 12 % 5 = 2 porque el resto de 12 dividido entre 5 es 2.

CASO DESARROLLADO 54: Implementar un Script que permita mostrar el resultado de la


expresión 4+(6-3) use la sentencia SELECT y el PRINT.

SOLUCIÓN CON LA SENTENCIA SELECT

-- HACIENDO USO DE LA SENTENCIA SELECT

SELECT '4+(6-3)' AS EXPRECION,


4+(6-3) AS RESULTADO
GO
Manual De Base De Datos Con SQL-Server 128

SOLUCIÓN CON LA SENTENCIA PRINT

-- HACIENDO USO DE LA SENTENCIA PRINT

PRINT 'LA EXPRESION 4+(6-3) TIENE COMO RESULTADO'


+STR(4+(6-3))
GO

Se obserba que la sentencia PRINT tiene otra sintaxis. Aquí el operador se


utilizómpara unir dos expreciones la primera LA EXPRESION 4+(6-3) TIENE
COMO RESULTADO y el segundo es la exprecion STR(4+(6-3)). La funsion STR
permite convertir un vaor numerico en cadena (String)

CASO DESARROLLADO 55: Implementar un Script que permita mostrar el resultado de la


expresión Celsius = (Fahrenheit -32) * 5/9 use la sentencia SELECT y el PRINT.

SOLUCIÓN CON LA SENTENCIA SELECT

-- HACIENDO USO DE LA SENTENCIA SELECT

SELECT '100' CELSIUS,


(100-32)*5/9 FAHRENHEIT
GO

SOLUCIÓN CON LA SENTENCIA PRINT

-- HACIENDO USO DE LA SENTENCIA PRINT

PRINT '100 GRADOS CELSIUS ES IGUAL A '+


LTRIM(STR((100-32)*5/9)) + ' GRADOS FAHRENHEIT'
GO
Manual De Base De Datos Con SQL-Server 129

La funsión LTRIM permite eliminar espacios en blanco del lado izquierdo (L). Tenga
en cuenta que el parentecis es el operador con mas alta prioridad. STR convierte el
valor numerico en cadena.

CASO DESARROLLADO 56: Implementar un Script que permita mostrar el numero 45 al revés.
Usando la sentencia SELECT y PRINT.

SOLUCIÓN CON LA SENTENCIA SELECT

-- HACIENDO USO DE LA SENTENCIA SELECT

SELECT '45' AS NUMERO,


45/10 + (45%10)*10 AS REVES
GO

SOLUCIÓN CON LA SENTENCIA PRINT

-- HACIENDO USO DE LA SENTENCIA PRINT

PRINT ' EL NUMERO 45 AL REVES ES ... '+


LTRIM(STR(45/10+((45%10)*10)))
GO

La funsión LTRIM permite eliminar espacios en blanco del lado izquierdo (L). Tenga
en cuenta que el parentecis es el operador con mas alta prioridad. STR convierte el
valor numerico en cadena.

Asignación

SQL Server solos cuenta con un operador universal para la asignación de valores. El operador igual
“=” se tendrá que colocar en cualquier expresión que necesite asignar un valor de cualquier tipo.
Manual De Base De Datos Con SQL-Server 130

CASO DESARROLLADO 57: Implementar un Script que permita asignar el valor de PI=3.1416
a una variable. Usando la sentencia PRINT y SELECT.

SOLUCIÓN CON LA SENTENCIA SELECT

-- HACIENDO USO DE LA SENTENCIA SELECT, DECLARAMOS CON @

DECLARE @PI FLOAT


SET @PI=3.1416
SELECT @PI AS [VALOR PI]
GO

SOLUCIÓN CON LA SENTENCIA PRINT

-- HACIENDO USO DE LA SENTENCIA PRINT

DECLARE @PI FLOAT


SET @PI=3.1416
PRINT 'EL VALOR DE PI ES: '+ LTRIM(CAST(@PI AS FLOAT))
GO

La funsión LTRIM permite eliminar espacios en blanco del lado izquierdo (L). Tenga
en cuenta que el parentecis es el operador con mas alta prioridad. CAST permite
convertir a un tipo específico de datos.

CASO DESARROLLADO 58: Implementar un script que permita capturar en una variable el
correo electrónico de los datos personales de la tabla DATOSPERSONALES con código VVC,
de la base de datos LEGAJOS_CSJAN.

SOLUCIÓN CON LA SENTENCIA SELECT

-- HACIENDO USO DE LA SENTENCIA SELECT, DECLARAMOS CON @

DECLARE @CORREO VARCHAR(50)


SELECT @CORREO=correo
FROM datospersonales
WHERE iddatospersonales='VVC'
SELECT 'VVC' AS [IDDATOS_PERSONALES],
@CORREO AS EMAIL
GO
Manual De Base De Datos Con SQL-Server 131

SOLUCIÓN CON LA SENTENCIA PRINT

-- HACIENDO USO DE LA SENTENCIA PRINT

DECLARE @CORREO VARCHAR(50)


SELECT @CORREO=correo
FROM datospersonales
WHERE iddatospersonales='VVC'
PRINT 'EL EMAIL DE LA PERSONA CON ID DE DATOS PERSONALES
VVC ES: '+ @CORREO
GO

Lógicos

Los operadores lógicos tienen por misión comprobar la veracidad de alguna condición. Estos, como
los operadores de comparación, devuelven el tipo de datos BOOLEAN con el valor Verdadero
(TRUE), Falso (FALSE) o Desconocido (UNKNOWN).

Representa a la Y lógica en al cual dos expresiones deben ser TRUE para poder
AND
devolver verdadero.
ANY Devuelve TRUE si alguna expresión del conjunto de expresiones es TRUE.
Devuelve TRUE si el valor se encuentra dentro de un rango ya sea numérico o
BETWEEN
de cadena.
Devuelve TRUE si una determinada subconsulta devuelve por lo menos una fila
EXISTS
de registros.
Devuelve TRUE si el operando se encuentra dentro de una lista de valores
IN
específicos.
Devuelve TRUE si el operando coincide a los más con un patrón específico.
Dicho patrón contiene la cadena de caracteres que se va buscar en una expresión,
LIKE los comodines a usar son:
Representa uno o mas caracteres. Puede ser cualquier tipo de
%
carácter ya sea numérico, textual o símbolo.
Manual De Base De Datos Con SQL-Server 132

_ Representa un solo carácter de cualquier tipo.


Representa cualquier carácter individual dentro de un intervalo o
[]
conjunto de caracteres.
Representa cualquier carácter individual fuera de intervalo
[^]
específico.
IS NOT Representa que el contenido de una columna no esté vacío.
NULL
NOT Invierte el valor Booleano de una expresión de un mismo tipo.
Representa la O lógica en la cual dos expresiones solo serán de tipo FALSE
OR
cuando ambas sean falsas.
Devuelve TRUE si alguna de las comparaciones y un conjunto de
SOME
comparaciones es verdadera.

En la mayoría de los casos cuando se usa un operador lógico se necesitarán también símbolos que
representen a los operadores lógicos, como los siguientes:

= Igualdad de expresiones
<> != Diferencia de expresiones
> >= Mayor | mayor igual
< <= Menor | menor igual

CASO DESARROLLADO 59: Implementar un script que permita mostrar todos los familiares
de la tabla PERSONAFAMILIAR que sean varones y que hayan nacido a partir del año 2000.
Usando el operador lógico AND.

HACIENDO USO DEL OPERADOR LÓGICO AND

-- HACIENDO USO DE LA OPERADOR AND

SELECT*
FROM personafamiliar
WHERE sexo='MASCULINO' AND YEAR(fechanac) >='2000'
ORDER BY fechanac ASC
GO
Manual De Base De Datos Con SQL-Server 133

CASO DESARROLLADO 60: Implementar un script que permita mostrar las personas cuyo año
de nacimiento se encuentre entre 1995 y el 2000 inclusive ellos mismos de la tabla
PERSONAFAMILIAR. Use el operador BETWEEN.

HACIENDO USO DEL OPERADOR BETWEEN

-- HACIENDO USO DE LA OPERADOR ABETWEEN

SELECT apellidosynombres
FROM personafamiliar
WHERE YEAR(fechanac) BETWEEN 1995 AND 2000
GO

5.7. Comandos de tipo JOIN

La sentencia JOIN (unir, combinar) de SQL permite combinar registros de una o más tablas en una
base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL) hay tres tipos de JOIN:
interno, externo y cruzado. El estándar ANSI del SQL especifica cinco tipos de JOIN: INNER,
LEFT OUTER, RIGHT OUTER, FULL OUTER y CROSS. Una tabla puede unirse a sí misma,
produciendo una auto-combinación, SELF-JOIN.

Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra


relacional, y, generalizando, es una función de composición.

ESTRUCTURAS JOIN

--SINTAXIS JOIN

INNER JOIN <nombreTabla1>


ON <nombreTabla2>

JOIN <nombreTabla1>
ON <nombreTabla2>
Manual De Base De Datos Con SQL-Server 134

LEFT JOIN <nombreTabla1>


ON <nombreTabla2>

RIGHT JOIN <nombreTabla1>


ON <nombreTabla2>

FULL JOIN <nombreTabla1>


ON <nombreTabla2>

CROSS JOIN <nombreTabla>

CASO DESARROLLADO 61: Implementar una consulta que permita combinar la tabla Datos
Personales y la tabla Documento de Identidad.

UTILIZACION DE INNER JOIN

--INNER EN LAS TABLAS DATOS PERSONALES Y DOCUMENTO DE IDENTIDAD

SELECT DT.IDDATOSPERSONALES, DT.APELLIDOPATERNO, DT.APELLIDOMATERNO,


DT.NOMBRE1, DOC.IDDOCUMENTOIDENTIDAD, DOC.TIPODOCUMENTO
FROM DATOSPERSONALES DT
INNER JOIN
DOCUMENTOIDENTIDAD DOC
ON DT.IDDOCUMENTOIDENTIDAD=DOC.IDDOCUMENTOIDENTIDAD

En la consulta se referencia la primera tabla con la cláusula FROM y la segunda tabla


con INNER JOIN, que se les asigna un alias a cada una. Continuamente se debe
especificar cuales son las columnas de unión de esas dos tablas
DOC.IDDOCUMENTOIDENTIDAD = DT.IDDOCUMENTOIDENTIDAD.

Da como resultado la multiplicación entre las filas de la tabla DATOS PERSONALES por
las filas de la tabla DOCUMENTO DE IDENTIDAD.

CASO DESARROLLADO 62: Implementar una consulta que permita mostrar los Datos
personales con las siguientes columnas Iddatospersonales, nombre1, numerodocidentidad,
tipodocumento, situacion.
Manual De Base De Datos Con SQL-Server 135

UTILIZACION DE INNER JOIN

--INNER JOIN

SELECT DT.IDDATOSPERSONALES, DT.APELLIDOPATERNO, DT.APELLIDOMATERNO,


DT.NOMBRE1, DOC.IDDOCUMENTOIDENTIDAD, DOC.TIPODOCUMENTO
FROM DATOSPERSONALES DT
INNER JOIN
DOCUMENTOIDENTIDAD DOC
ON DT.IDDOCUMENTOIDENTIDAD=DOC.IDDOCUMENTOIDENTIDAD

En la consulta se referencia la primera tabla con la cláusula FROM y la segunda tabla


con INNER JOIN, que se les asigna un alias a cada una. Continuamente se debe
especificar cuales son las columnas de unión de esas dos tablas
DOC.IDDOCUMENTOIDENTIDAD = DT.IDDOCUMENTOIDENTIDAD.

Da como resultado la multiplicación entre las filas de la tabla DATOS PERSONALES por
las filas de la tabla DOCUMENTO DE IDENTIDAD.

OTRA FORMAR: Se utiliza es no aplicar la cláusula INNER JOIN de esta manera.


(Mostrara la misma imagen que el ejemplo anterior)
--OTRA FORMA

SELECT DT.IDDATOSPERSONALES, DT.APELLIDOPATERNO, DT.APELLIDOMATERNO,


DT.NOMBRE1, DOC.IDDOCUMENTOIDENTIDAD, DOC.TIPODOCUMENTO
FROM DATOSPERSONALES DT
JOIN DOCUMENTOIDENTIDAD DOC
ON DT.IDDOCUMENTOIDENTIDAD=DOC.IDDOCUMENTOIDENTIDAD

CASO DESARROLLADO 63: Implementar una consulta que permita mostrar todos los registros
de la tabla DatosPersonales y Documento identidad. Use LEFT JOIN

UTILIZACION DE LEFT JOIN

--CONSULTAS CON LEFT JOIN

SELECT DT.IDDATOSPERSONALES, DT.APELLIDOPATERNO, DT.APELLIDOMATERNO,


DT.NOMBRE1, DOC.IDDOCUMENTOIDENTIDAD, DOC.TIPODOCUMENTO
FROM DOCUMENTOIDENTIDAD DOC
LEFT JOIN DATOSPERSONALES DT ON
DOC.IDDOCUMENTOIDENTIDAD=DT.IDDOCUMENTOIDENTIDAD
Manual De Base De Datos Con SQL-Server 136

Al implementar esta consulta vemos que la tabla DATOS PERSONALES se referencia con
la unión externa izquierda eso quiere decir que la consulta deberá mostrar las columnas
en lado izquierdo y forzar a la otra tabla a mostrar sus filas.
Cuando ocurre el caso mostrara NULL en los valores cruzados.

UTILIZACION DE RIGHT JOIN

--CONSULTAS CON RIGHT JOIN

SELECT DT.IDDATOSPERSONALES, DT.APELLIDOPATERNO, DT.APELLIDOMATERNO,


DT.NOMBRE1, DOC.IDDOCUMENTOIDENTIDAD, DOC.TIPODOCUMENTO
FROM DOCUMENTOIDENTIDAD DOC
RIGHT JOIN DATOSPERSONALES DT ON
DOC.IDDOCUMENTOIDENTIDAD=DT.IDDOCUMENTOIDENTIDAD

Al implementar esta consulta vemos que la tabla DOCUMENTO IDENTIDAD se


referencia con la unión externa derecha eso quiere decir que la consulta deberá
mostrar las columnas en lado derecho y forzar a la otra tabla a mostrar sus filas.

CASO DESARROLLADO 64: Implementar una consulta que permita mostrar la tabla DATOS
PERSONALES y la tabla DOCUMENTO IDENTIDAD de forma que se aplique un producto
cartesiano entre sus filas. Usar CROSS JOIN

UTILIZACION DE CROSS JOIN

--CONSULTA CON CROSS JOIN

SELECT DT.IDDATOSPERSONALES, DT.APELLIDOPATERNO, DT.APELLIDOMATERNO,


DT.NOMBRE1, DOC.IDDOCUMENTOIDENTIDAD, DOC.TIPODOCUMENTO
FROM DATOSPERSONALES DT
CROSS JOIN DOCUMENTOIDENTIDAD DOC
Manual De Base De Datos Con SQL-Server 137

Capítulo 6: Transact SQL

Capítulo

6
Transact SQL
CAPACIDAD CONTENIDO

 Definiciones previas.
DOCUMENTAR CAPACIDAD
 Funciones CAST y CONVERT
BHVBEBVBBVHJ  Estructuras de Control Selectivas
 Estructuras de Control Repetitivas
GVJEVJEHVBEHJBVHJDEBVKHEV  Manejo de errores en Transact SQL
VGEVJEVUEEVE  Manejo de Cursores
 Funciones
hcbhbvhbrehvbekbvkebvbehvbekhbvebvh  Manejo de Procedimientos Almacenados
bhevevbehjvbhebvhebvhjebvhjebvhbehjbv  Comando EXECUTE
hjebvhjehjbvhjdbevhjbehjvbehbvhjedbvhe  Procedimientos Almacenados definidas por el usuario
bvhjdbvdjebvhjdebvbehjbvhebvhjebhjvbeh  Procedimiento almacenados y Cursores
jvbhjebvhjebhjvbhjevbhjebvhj  Manejo de Transacciones
 Manejo de TRIGGERS
Manual De Base De Datos Con SQL-Server 138

6.1. Definiciones previas.

Introducción al TRANSACT-SQL

TRANSACT-SQL es un lenguaje muy potente que nos permite definir casi cualquier tarea que
queramos efectuar sobre la base de datos. En este tema veremos que TRANSACT-SQL va más
allá de un lenguaje SQL cualquiera ya que incluye características propias de cualquier lenguaje de
programación, características que nos permiten definir la lógica necesaria para el tratamiento de la
información:

 Tipos de datos.
 Definición de variables.
 Estructuras de control de flujo.
 Gestión de excepciones.
 Funciones predefinidas.
Sin embargo, no permite:

 Crear interfaces de usuario.


 Crear aplicaciones ejecutables, sino elementos que en algún momento llegarán al servidor
de datos y serán ejecutados.

Debido a estas restricciones se emplea generalmente para crear procedimientos almacenados,


triggers y funciones de usuario.

Puede ser utilizado como cualquier SQL como lenguaje embebido en aplicaciones desarrolladas
en otros lenguajes de programación como Visual Basic, C, Java, etc. Y por supuesto los lenguajes
incluidos en la plataforma .NET.

También lo podremos ejecutar directamente de manera interactiva, por ejemplo desde el editor de
consultas de SSMS (SQL Server Management Studio) el entorno de gestión que ya conocemos.
Esta es la forma en que lo utilizaremos nosotros.

Características generales del lenguaje Transact-SQL

El lenguaje SQL se creó con la finalidad de ser un lenguaje muy potente y a la vez muy fácil de
utilizar, se ha conseguido en gran medida ya que con una sola frase (instrucción) podemos
recuperar datos complejos (por ejemplo, datos que se encuentran en varias tablas, combinándolos,
calculando resúmenes), y utilizando un lenguaje muy cercano al lenguaje hablado (¡suponiendo
que hablamos inglés, claro!).
Manual De Base De Datos Con SQL-Server 139

Por ejemplo:

SELECT codigo, nombre FROM Clientes WHERE localidad=’Valencia’;

Esta instrucción nos permite SELECCIONAR el código y nombre DE los Clientes CUYA
localidad sea Valencia.

La sencillez también radica en que lo que indicamos es lo que queremos obtener, no el cómo lo
tenemos que obtener, de eso se encargará el sistema automáticamente.

Las sentencias SQL además siguen todas las mismas patronas:

 Empiezan por un verbo que indica la acción a realizar,


 completado por el objeto sobre el cual queremos realizar la acción,
 seguido de una serie de cláusulas (unas obligatorias, otras opcionales) que completan la
frase, y proporcionan más detalles acerca de lo que se quiere hacer.

6.2. Funciones CAST y CONVERT

El uso de CAST y CONVERT es para pasar de un tipo de datos a otro, normalmente se hace una
conversión cuando una función requiere de un tipo especial de dato como parámetro.

Sintaxis:

TRANSACT SQL CAST CONVERT

-- SINTAXIS PARA LA FUNCION CAST

CAST (EXPRESION AS TIPO_DATOS[(LOGINTUD)])

-- SINTAXIS PARA LA FUNCION CONVERT

CONVERT (TIPO_DATOS[(LONGITUD)],EXPRESION)

CASO DESARROLLADO 65: Implementar un script, que cuente con un monto almacenado en
una variable local @TOTAL de 150.50 soles y que muestre al usuario por medio de la función
PRINT.

PRIMERA IMPLEMENTACION SIN CONVERSION

-- PRIMERA IMPLEMENTACION SIN CONVERSION

DECLARE @TOTAL MONEY


Manual De Base De Datos Con SQL-Server 140

SET @TOTAL=150.50
PRINT 'EL TOTAL INGRESADO ES: '+ @TOTAL
GO

-- USANDO LA SENTENCIA SELECT

DECLARE @TOTAL MONEY


SET @TOTAL=150.50
SELECT @TOTAL AS [TOTAL]
GO

SEGUNDA IMPLEMENTACION USANDO LA FUNCION CAST

-- SEGUNDA IMPLEMENTACION USANDO LA FUNCION CAST

DECLARE @TOTAL MONEY


SET @TOTAL=150.50
PRINT 'EL TOTAL INGRESADO ES: '+ CAST(@TOTAL AS CHAR(10))
GO

TERCERA IMPLEMENTACION USANDO LA FUNCION CONVERT

-- TERCERA IMPLEMENTACION USANDO LA FUNCION CONVERT

DECLARE @TOTAL MONEY


SET @TOTAL=150.50
PRINT 'EL TOTAL INGRESADO ES: '+ CONVERT(CHAR(10),@TOTAL)
GO
Manual De Base De Datos Con SQL-Server 141

6.3. Estructuras de Control Selectivas

A. Estructura Selectiva IF

La estructura IF evalúa una condición lógica y en función del resultado se realiza una u otra
expresión. Dicha expresión se especifica mediante una expresión lógica donde el resultado
pueda ser de tipo booleano es decir true o false.

Sintaxis

ESTRUCTURA SELECTIVA IF

--ESTRUCTURA

IF<CONDICION>

<BEGIN>

<expresiones_true>

<END>

Donde:
 CONDICION: Es la expresión que el usuario determina para realizar uno o mas
expresiones. Se utiliza operadores lógico (< <= > >= < >) y relacionales (ANDOR
NOT EXISTS).
 BEGIN: Enmarca el inicio de las expresiones cunado la condición resulta verdadera o
TRUE al ejecutarse.
 END: Es el fin a las expresiones que empezó en BEGIN.
La estructura IF tiene 2 tipos para Transact SQL:

ESTRUCTURA IF DOBLE

--ESTRUCTURA

IF(CONDICION)

<BEGIN>

<expresiones_true>

<END>

ELSE
Manual De Base De Datos Con SQL-Server 142

<BEGIN>

<expresiones_false>

<END>

Esta estructura determina si la condición ejecutada sea


TRUE realice una acción o sea FALSE realice otra acción.

ESTRUCTURA IF DOBLEMENTE ANIDADO

--ESTRUCTURA

IF(CONDICION)

<BEGIN>

<expresiones_true>

<END>

ELSE IF(CONDICION)

<BEGIN>

<expresiones_true>

<END>

<ELSE>

<BEGIN>

<expresiones_true>

<END>

Esta estructura se utiliza cuando la expresión devuelve


más de un resultado lógico, trabaja de acuerdo a las
alternativas implementadas en la estructura.

CASO DESARROLLADO 66: Implementar una consulta que permita insertar un nuevo registro
a la tabla DocumentoIdentidad, en el caso que el usuario registre duplicidad de tipodocumento
deberá mostrar un mensaje “TIPO DE DOCUMENTO DE IDENTIDAD YA ESTA
REGISTRADO”, caso contrario insertar dicho registro y mostrar un mensaje “TIPO DE
DOCUMENTO REGISTRADO CORRECTAMENTE”
Manual De Base De Datos Con SQL-Server 143

CONSULTA CON ESTRUCTURA SELECTIVA IF

--1. DECLARAR VARIABLES

DECLARE @IDOC VARCHAR(2)='06' , @TIPO VARCHAR(45)= 'DNI'

--2. ESTRUCTURA DE CONDICION

IF EXISTS(SELECT* FROM DOCUMENTOIDENTIDAD WHERE TIPODOCUMENTO=@TIPO)

BEGIN

PRINT 'TIPO DE DOCUMENTO DE IDENTIDAD YA ESTA REGISTRADO'

END

ELSE

BEGIN

INSERT INTO DOCUMENTOIDENTIDAD

VALUES (@IDOC, @TIPO)

PRINT 'TIPO DE DOCUMENTO REGISTRADO CORRECTAMENTE'

END

GO

--3. MENSAJE

CASO DESARROLLADO 67: Implementar una consulta que permita mostrar el mensaje de “NO
HAY DATOS PERSONALES CON ESTE TIPO DE DOCUMENTO”, cuando el total de Datos
personales asignados a un determinado Documentoidentidad no tenga registros en la tabla
anterior. En lo contrario determinar cuántos Datos personales tiene dicho DocumentoIdentidad
con el mensaje “EL TIPO DE DOCUMENTO… TIENE … DATOSPERSONALES”.
Manual De Base De Datos Con SQL-Server 144

CONSULTA CON ESTRUCTURA SELECTIVA IF

--1.DECLARAR VARIABLES

DECLARE @TIPO VARCHAR(45)= 'DNI'

--2. ESTRUCTURA DE CONDICION

IF (SELECT COUNT(*)

FROM DATOSPERSONALES DP

LEFT JOIN DOCUMENTOIDENTIDAD DI ON


DP.IDDOCUMENTOIDENTIDAD=DI.IDDOCUMENTOIDENTIDAD

GROUP BY DI.TIPODOCUMENTO

HAVING DI.TIPODOCUMENTO=@TIPO) IS NULL

PRINT 'NO HAY DATOS PERSONALES CON ESTE TIPO DE


DOCUMENTO'

ELSE

BEGIN

DECLARE @TOTAL INT

SELECT @TOTAL=COUNT(*)

FROM DATOSPERSONALES DP

LEFT JOIN DOCUMENTOIDENTIDAD DI ON


DP.IDDOCUMENTOIDENTIDAD=DI.IDDOCUMENTOIDENTIDAD
Manual De Base De Datos Con SQL-Server 145

GROUP BY DI.TIPODOCUMENTO

HAVING DI.TIPODOCUMENTO=@TIPO

PRINT 'EL TIPO DE DOCUMENTO ' +@TIPO+' TIENE


'+CAST(@TOTAL AS CHAR(2))+ ' DATOS PERSONALES'

END

GO

--3. MENSAJE

B. Estructura Condicional Múltiple CASE

Con frecuencia es necesario que existan más de dos posibles acciones en una determinada
condición para esto se usa las estructuras de condición múltiple. La estructura CASE evalúa una
expresión que podrá tomar N valores distintos según se elija uno de estos valores se tomara N
posibles acciones.

Sintaxis

ESTRUCTURA DE CONTROL SELECTIVA


MULTIPLE CASE … WHEN

--ESTRUCTURA

CASE <columna>

WHEN expresion THEN resultado

[... n]

ELSE expresion_false

END
Manual De Base De Datos Con SQL-Server 146

Donde:
 Columna: Es el nombre de la columna que se va comparar.
 WHEN: Enmarca las expresiones que se buscara para la condición.
 THEN: Son las especificaciones de la expresión resultante de una opción.
 END: Finalización de estructura.

CASO DESARROLLADO 68: Implementar una consulta que permita mostrar la fecha de
nacimiento en la tabla DATOS PERSONAL de esta manera si fuera 2017-03-27 se adiciona una
columna a la consulta para mostrar 27 de marzo de 2017.

CONSULTA CON ESTRUCTURA SELECTIVA CASE

--1.DECLARAR VARIABLES

SELECT iddatospersonales, nombre1, apellidopaterno, FECHANACIO,

CAST (DAY(FECHANACIO) AS CHAR(2))+

CASE MONTH(FECHANACIO)

WHEN 1 THEN ' ENERO '

WHEN 2 THEN ' FEBRERO '

WHEN 3 THEN ' MARZO '

WHEN 4 THEN ' ABRIL '

WHEN 5 THEN ' MAYO '

WHEN 6 THEN ' JUNIO '

WHEN 7 THEN ' JULIO '

WHEN 8 THEN ' AGOSTO '

WHEN 9 THEN ' SETIEMBRE '

WHEN 10 THEN ' OCTUBRE '

WHEN 11 THEN ' NOVIEMBRE '

WHEN 12 THEN ' DICIEMBRE '

END

+CAST(YEAR(FECHANACIO) AS CHAR(4)) AS FECHANAC

FROM DATOSPERSONALES

GO

--3. MENSAJE
Manual De Base De Datos Con SQL-Server 147

6.4. Estructuras de Control Repetitivas

Estructura de control WHILE


WHILE hace repetir un conjunto de instrucciones en secuencia un número determinado de veces
a esto se le denomina bucle o ciclo. Veamos si se desea acumular sumas o determinar el mayor o
menor elemento de un conjunto de valores entonces estamos frente a un caso de repeticiones que
pueden ser controlada y administrada por la estructura repetitiva WHILE.

Sintaxis

ESTRUCTURA DE CONTROL REPETITIVA


WHILE

--ESTRUCTURA

WHILE condicion
<expresion_repetitiva>
[ BREAK ]
<expresion_repetitiva>
[ CONTINUE ]
<expresion_repetitiva>

Dónde:
 Condición: Determina cuantos ciclos harán las expresiones.
 BREAK: Corta el ciclo de repeticiones y según la secuencia de instrucciones se seguirá
con la aplicación.
 CONTINUE: Regenera el ciclo de repeticiones no tomando en cuenta las instrucciones
asignadas después del operador CONTINUE.
 Es mejor manejable trabajar con la estructura While con los operadores de inicio y fin
(BEGIN END) para tener mejor control de expresiones repetitivas.
Manual De Base De Datos Con SQL-Server 148

CASO DESARROLLADO 69: Implementar una consulta que permita mostrar los números
consecutivos del 1 al 10.

CONSULTA CON ESTRUCTURA WHILE

--1. DECLARA UNA VARIABLE Y INICIALIZARLA

DECLARE @NUM INT=0

--2. REALIZAR WHILE

WHILE (@NUM<10)
BEGIN
SET @NUM+=1
PRINT 'VALOR : ' + CAST(@NUM AS CHAR(2))
END
GO

--2. IMAGEN

CASO DESARROLLADO 70: Implementar una consulta que permita mostrar los N últimos
registros de la tabla Datos Personales condicionando que las fechas de nacimiento sean las más
actuales posibles.

CONSULTA CON ESTRUCTURA WHILE Y FECHAS

--1. DECLARACION DE VARIABLES

DECLARE @NUM INT=1, @TOPE INT=3

--2. ESTRUCTURA WHILE

WHILE @NUM <=100


BEGIN

--3. ESTRUCTURA IF

IF @NUM=@TOPE
BEGIN
SELECT TOP(@NUM) * FROM DATOSPERSONALES DP
ORDER BY DP.FECHANACIO DESC
BREAK
END
Manual De Base De Datos Con SQL-Server 149

ELSE
BEGIN
SET @NUM+=1
CONTINUE
END
END

--3. IMAGEN.

CASO DESARROLLADO 71: Implementar una consulta que permita mostrar los registros de la
tabla Distrito paginados de 20 en 20.

PAGINACION DE REGISTROS DE LA TABLA DISTRITO

--PAGINAS QUE SE MOSTRARA.


DECLARE @PAGINA INT=1
--INICIAMOS EL WHILE HASTA LOS REGISTRO 20
WHILE(@PAGINA<=20)
BEGIN
--DECLARACION DE FILAS POR PAGINA.
DECLARE @CAN_FILAS INT=20
SELECT*FROM( SELECT ROWNUM = ROW_NUMBER()
OVER (ORDER BY D.IDDISTRITO),*
FROM DISTRITO D) X
WHERE
ROWNUM >(@CAN_FILAS*(@PAGINA -1)) AND
ROWNUM <=(@CAN_FILAS*(@PAGINA -1)) + @CAN_FILAS
SET @PAGINA+=1
END
GO

--IMAGEN.
Manual De Base De Datos Con SQL-Server 150

6.5. Manejo de errores en Transac SQL

Control de Errores.

Los lenguajes de programación tienen un especial control de los errores posibles que se pueda
generar a nivel de programación, SQL Server incorpora diferentes alternativas para controlar
dichos errores, no encargando esta tarea al lenguaje de programación sino al Transact SQL
desligándose un poco de las validaciones propias de SQL, por medio del TRY CATCH que permite
gestionar los errores de manera adecuada.

MANEJO DE ERRORES TRY-CATCH

--ESTRUCTURA

BEGIN TRY
Expresion
END TRY
BEGIN CATCH
Expresion
END CATCH

Dónde:
 BEGIN TRY: Es el incio del control de error en Transact SQL.
 END TRY: Es finalización del BEGIN TRY.
 BEGIN CATCH: Se encarga del trabajo al ocurri cualquier tipo de error, aquí entra
las funciones especiales de error.
 END CATCH: Es finalización del bloque BEGIN CATCH.

FUNCIONES ESPECIALES DE ERROR

 ERROR_NUMBER(): Muestra el número de error detectado.


 ERROR_MESSAGE(): Muestra texto completo de mensaje de error. Es finalización
del BEGIN TRY.
 ERROR_SEVERITY(): Muestra la gravedad del error.
 ERROR_STATE(): Muestra el número de estado de error.
 ERROR_LINE(): Muestra línea donde ocurrió el error
 ERROR_PROCEDURE(): Muestra el nombre del procedimiento almacenado en que
se produjo error.
Manual De Base De Datos Con SQL-Server 151

CASO DESARROLLADO 72: Implementar una consulta que muestre el valor devuelto por la
función de control de errores a partir de una división sin resultado como 1/0.

CONSULTA DE FUNCIONES DE ERROR

--1. ESTRUCTURA
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ERRORNUMBER,
ERROR_SEVERITY() AS ERRORSEVERITY,
ERROR_STATE() AS ERRORSTATE,
ERROR_PROCEDURE() AS ERRORPROCEDURE,
ERROR_LINE() AS ERRORLINE,
ERROR_MESSAGE() AS ERRORMENSAJE
END CATCH
GO

CASO DESARROLLADO 73: Implementar una consulta a la tabla PERSONAL, controlando los
posibles errores usando el bloque TRY CATCH

CONSULTA DE FUNCION TRY CATCH

--1. ESTRUCTURA

BEGIN TRY
DECLARE @IDPERS VARCHAR(10) ='A AR',
@SITU VARCHAR(25) ='ACTIVO'
INSERT INTO PERSONAL
VALUES (@IDPERS, @SITU)
END TRY
BEGIN CATCH
PRINT 'ERROR EN LA TABLA PERSONAL'
END CATCH
Manual De Base De Datos Con SQL-Server 152

6.6. Manejo de Cursores

En SQL Server un cursor puede definirse como un elemento que representará a un conjunto de
datos determinado por una consulta T-SQL, el cursor permitirá recorrer fila a fila, leer y
eventualmente modificar dicho conjunto de resultados.

SQL Server ofrecerá una amplia variedad de opciones y de funciones para crear y operar sobre
cursores. La creación y utilización de un cursor estará compuesta, como es de esperarse, por una
serie de instrucciones T-SQL, las cuales podrán separarse en grupos bien diferenciados, los cuales
son: Declaración, Apertura, Acceso a datos, Cierre y Desalojo, a continuación, detallaremos cada
grupo de instrucciones.

Un cursor es una estructura de datos creada en memoria RAM producto de una sentencia SELECT
y que nos permite navegar dentro de las filas para obtener la información.

Cuando trabajemos con cursores debemos seguir los siguientes pasos.

 Declarar el cursor, utilizando DECLARE


 Abrir el cursor, utilizando OPEN
 Leer los datos del cursor, utilizando FETCH ... INTO
 Cerrar el cursor, utilizando CLOSE
 Liberar el cursor, utilizando DEALLOCATE

Sintaxis de declaración de un CURSOR

MANEJO DE DECLARACIONDE UN CURSOR

--ESTRUCTURA

DECLARE NOMBRE_CURSOR [ INSENSITIVE ] [ SCROLL ] CURSOR


FOR SELECT_EXPRESION
[ FOR READ ONLY | UPDATE [ OF NOMBRE_COLUMNA [ ,...n ]]]

APERTURA DE UN CURSOR

--ESTRUCTURA

OPEN NOMBRE_CURSOR
Manual De Base De Datos Con SQL-Server 153

RECUPERACION DE REGISTROS DESDE EL CURSOR

--ESTRUCTURA

FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE n | @nvar
| RELATIVE n | @nvar
]
FROM
]

[ GLOBAL ] NOMBRE_CURSOR | @VARIABLECURSOR


[ INTO @NOMBRE_VARIABLE[ ,... N ]]

CERRANDO UN CURSOR

--ESTRUCTURA

CLOSE NOMBRE_CURSOR

LIBERAR CURSOR

--ESTRUCTURA

DEALLOCATE NOMBRE CURSOR

CASO DESARROLLADO 74: Implementar un cursor elemental donde se imprima el primer


registro de la tabla DATOSPERSONAL.

CURSOR PARA PRIMER REGISTROS

--1. DECLARO EL NOMBRE DE MI CURSOR

DECLARE MICURSORELEM CURSOR


FOR SELECT*FROM DATOSPERSONALES

--2.-APERTURO EL CURSOR

OPEN MICURSORELEM

--3.MUESTRA SIGUIENTE REGISTROS

FETCH NEXT FROM MICURSORELEM


Manual De Base De Datos Con SQL-Server 154

CASO DESARROLLADO 75: Implementar un cursor donde se genere un reporte a los registros
de la tabla DISTRITO, incluir el nombre de la provincia y departamento.

TRIGGER PARA DML


--DECLARAR VARIABLES A UTLIZAR

DECLARE @IDDIST VARCHAR(13),


@NOMDIS VARCHAR(13),
@NOMPROVI VARCHAR(13),
@NOMDEPAR VARCHAR(13)

--DECLARAR CURSOR

DECLARE MICURSORDIST CURSOR


FOR SELECT D.IDDISTRITO,
D.NOMDISTRIT,
P.NOMPROVIN,
DP. MONDEPART
FROM DISTRITO D
JOIN PROVINCIA P ON D.IDPROVINCIA=P.IDPROVINCIA
JOIN DEPARTAMENTO DP ON
DP.IDDEPARTAMENTO=P.IDDEPARTAMENTO
--INICIA CURSOR

OPEN MICURSORDIST

FETCH MICURSORDIST INTO @IDDIST, @NOMDIS, @NOMPROVI, @NOMDEPAR


PRINT 'CODIGO DISTRITO PROVINCIA DEPARTAMENTO '
PRINT '---------------------------------------------------'

--REALIZAR WHILE PARA MOSTRAR LOS REGISTROS DEL CURSOR

WHILE @@FETCH_STATUS=0
BEGIN
PRINT
@IDDIST+SPACE(5)+@NOMDIS+SPACE(5)+@NOMPROVI+SPACE(5)+@NOMDEPAR
FETCH MICURSORDIST INTO @IDDIST, @NOMDIS, @NOMPROVI, @NOMDEPAR
END

--CIERRE DE CURSOR Y LIBERACION

CLOSE MICURSORDIST
DEALLOCATE MICURSORDIST
GO

--IMAGEN
Manual De Base De Datos Con SQL-Server 155

6.7. Funciones

SQL Server proporciona al usuario la posibilidad de definir sus propias funciones, conocida como
UDF (user defined functions). Existen tres tipos de funciones. Estas son:

 Funciones escalares.
 Funciones en línea.
 Funciones en línea de múltiples sentencias

Funciones del sistema:

Función Descripción
Funciones de conjunto de filas Devuelven un objeto que se puede utilizar como las
referencias de tabla en una instrucción SQL.
 OPENDATASOURCE
 OPENJSON
 OPENROWSET
 OPENQUERY
 OPENXML
Funciones de agregado Operan sobre una colección de valores y devuelven un solo
valor de resumen.
 AVG
Manual De Base De Datos Con SQL-Server 156

 MIN
 CHECKSUM_AGG
 SUM
 COUNT
 STDEV
 COUNT_BIG
 STDEVP
 GROUPING
 VAR
 GROUPING_ID
 VARP
 MAX
Las funciones de clasificación Devuelven un valor de categoría para cada fila de una
partición.
 RANK
 NTILE
 DENSE_RANK
 ROW_NUMBER
Funciones escalares (se Operan sobre un valor y después devuelven otro valor. Las
describen a continuación) funciones escalares se pueden utilizar donde la expresión
sea válida. Veamos el cuadro siguiente:

Funciones escalares

Categoría de la función Descripción


Funciones de configuración Devuelven información acerca de la configuración actual.
 @@DATEFIRST
 @@OPTIONS
 @@DBTS
 @@REMSERVER
 @@LANGID
 @@SERVERNAME
 @@LANGUAGE
 @@SERVICENAME
 @@LOCK_TIMEOUT
 @@SPID
 @@MAX_CONNECTIONS
 @@TEXTSIZE
 @@MAX_PRECISION
Manual De Base De Datos Con SQL-Server 157

 @@VERSION
 @@NESTLEVEL
Funciones de conversión Admiten conversión y conversión de tipos de datos.
 CAST y CONVERT ( Transact-SQL )
 PARSE ( Transact-SQL )
 TRY_CAST ( Transact-SQL )
 TRY_CONVERT ( Transact-SQL )
 TRY_PARSE ( Transact-SQL )
Funciones del cursor Devuelven información acerca de los cursores.
 @@CURSOR_ROWS
 CURSOR_STATUS
 @@FETCH_STATUS
Datos de fecha y hora tipos y Llevan a cabo operaciones sobre un valor de entrada de
funciones fecha y hora, y devuelven un valor numérico, de cadena o
de fecha y hora.
Funciones de fecha y hora del sistema de precisión
elevada
 SYSDATETIME
 SYSDATETIMEOFFSET
 SYSUTCDATETIME
Funciones de fecha y hora del sistema de precisión baja
 CURRENT_TIMESTAMP
 GETDATE
 GETUTCDATE
Funciones que obtienen la fecha y hora partes
 DATENAME
 DATEPART
 DÍA
 MES
 AÑO
Funciones que obtienen valores de fecha y hora de sus
partes
 DATEFROMPARTS
 DATETIME2FROMPARTS
 DATETIMEFROMPARTS
 DATETIMEOFFSETFROMPARTS
 SMALLDATETIMEFROMPARTS
 TIMEFROMPARTS
Funciones que obtienen la fecha y hora de diferencia
Manual De Base De Datos Con SQL-Server 158

 DATEDIFF
 DATEDIFF_BIG
Funciones que modifican la fecha y hora de valores
 DATEADD
 EOMONTH
 SWITCHOFFSET
 TODATETIMEOFFSET
Funciones que establecen u obtienen formato de sesión
 @@DATEFIRST
 SET DATEFIRST
 SET DATEFORMAT
 @@LENGUAGE
 SET LENGUAGE
 SP_HELPLANGUAGE
Funciones que validan la fecha y hora de valores
 ISDATE
Funciones JSON Validar, consultar o cambiar datos JSON.
 ISJSON
 JSON_VALUE
 JSON_QUERY
 JSON_MODIFY
Funciones lógicas Realizan operaciones lógicas.
 CHOOSE
 IIF
Funciones matemáticas Realizan cálculos basados en valores de entrada
proporcionados como parámetros a las funciones y
devuelven valores numéricos.
 ABS
 GRADOS
 RAND
 ACOS
 EXP
 REDONDEAR
 ASIN
 FLOOR
 INICIO DE SESIÓN
 ATAN
 REGISTRO
 SENO
Manual De Base De Datos Con SQL-Server 159

 ATN2
 LOG10
 SQRT
 LÍMITE SUPERIOR
 PI
 CUADRADO
 COS
 POWER
 TAN
 COT
 RADIANES
Funciones de metadatos Devuelven información acerca de la base de datos y los
objetos de la base de datos.
 @@PROCID
 INDEX_COL
 APP_NAME
 INDEXKEY_PROPERTY
 APPLOCK_MODE
 INDEXPROPERTY
 APPLOCK_TEST
 VALOR SIGUIENTE PARA
 ASSEMBLYPROPERTY
 OBJECT_DEFINITION
 COL_LENGTH OBJECT_ID
 COL_NAME
 OBJECT_NAME
 COLUMNPROPERTY
 OBJECT_SCHEMA_NAME
 DATABASE_PRINCIPAL_ID
 OBJECTPROPERTY
 DATABASEPROPERTYEX
 OBJECTPROPERTYEX
 DB_ID ORIGINAL_DB_NAME
 DB_NAME
 PARSENAME
 FILE_ID
 SCHEMA_ID
 FILE_IDEX
 SCHEMA_NAME
Manual De Base De Datos Con SQL-Server 160

 FILE_NAME
 SCOPE_IDENTITY
 FILEGROUP_ID
 SERVERPROPERTY
 FILEGROUP_NAME
 STATS_DATE
 FILEGROUPPROPERTY
 TYPE_ID
 FILEPROPERTY
 TYPE_NAME
 FULLTEXTCATALOGPROPERTY
 TYPEPROPERTY
 FULLTEXTSERVICEPROPERTY
 VERSIÓN
Funciones de seguridad Devuelven Información Acerca De Usuarios Y Roles.
 CERTENCODED ( TRANSACT-SQL )
 PWDCOMPARE ( TRANSACT-SQL )
 CERTPRIVATEKEY ( TRANSACT-SQL )
 PWDENCRYPT ( TRANSACT-SQL )
 CURRENT_USER ( TRANSACT-SQL )
 SCHEMA_ID ( TRANSACT-SQL )
 DATABASE_PRINCIPAL_ID ( TRANSACT-SQL )
 SCHEMA_NAME ( TRANSACT-SQL )
 SYS.FN_BUILTIN_PERMISSIONS ( TRANSACT-SQL )
 SESSION_USER ( TRANSACT-SQL )
 SYS.FN_GET_AUDIT_FILE ( TRANSACT-SQL )
 SUSER_ID ( TRANSACT-SQL )
 SYS.FN_MY_PERMISSIONS ( TRANSACT-SQL )
 SUSER_SID ( TRANSACT-SQL )
 HAS_PERMS_BY_NAME ( TRANSACT-SQL )
 SUSER_SNAME ( TRANSACT-SQL )
 IS_MEMBER (TRANSACT-SQL)
 SYSTEM_USER ( TRANSACT-SQL )
 IS_ROLEMEMBER ( TRANSACT-SQL )
 SUSER_NAME ( TRANSACT-SQL )
 IS_SRVROLEMEMBER ( TRANSACT-SQL )
 USER_ID ( TRANSACT-SQL )
 ORIGINAL_LOGIN ( TRANSACT-SQL )
 USER_NAME ( TRANSACT-SQL )
Manual De Base De Datos Con SQL-Server 161

 PERMISOS ( TRANSACT-SQL )
Funciones de cadena Realizar operaciones en una cadena (char o varchar) valor
de entrada y devuelve un valor de cadena o numérica.
 ASCII
 CHAR
 CHARINDEX
 CONCAT
 CONCAT_WS
 DIFERENCIA
 FORMATO
 LEFT
 LEN
 INFERIOR
 LTRIM
 NCHAR
 PATINDEX
 QUOTENAME
 REPLACE
 REPLICAR
 REVERSE
 RIGHT
 RTRIM
 SOUNDEX
 ESPACIO
 STR
 STRING_AGG
 STRING_ESCAPE
 STRING_SPLIT
 STUFF
 SUBSTRING
 TRADUCIR
 RECORTE
 UNICODE
 SUPERIOR
Funciones del sistema Realizan operaciones y devuelven información acerca de
valores, objetos y configuraciones de una instancia de SQL
Server.
 $PARTITION
 ERROR_PROCEDURE
Manual De Base De Datos Con SQL-Server 162

 @@ERROR
 ERROR_SEVERITY
 @@IDENTITY
 ERROR_STATE
 @@PACK_RECEIVED
 FORMATMESSAGE
 @@ROWCOUNT
 GET_FILESTREAM_TRANSACTION_CONTEXT
 @@TRANCOUNT
 GETANSINULL
 BINARY_CHECKSUM
 HOST_ID
 SUMA DE COMPROBACIÓN
 HOST_NAME
 COMPRIMIR
 ISNULL
 CONNECTIONPROPERTY
 ISNUMERIC
 CONTEXT_INFO
 MIN_ACTIVE_ROWVERSION
 CURRENT_REQUEST_ID
 NEWID
 CURRENT_TRANSACTION_ID
 NEWSEQUENTIALID
 DESCOMPRIMIR
 ROWCOUNT_BIG
 ERROR_LINE
 SESSION_CONTEXT
 ERROR_MESSAGE
 SESSION_ID
 ERROR_NUMBER
 XACT_STATE
Funciones estadísticas del Devuelven información estadística acerca del sistema.
sistema  @@CONNECTIONS
 @@PACK_RECEIVED
 @@CPU_BUSY
 @@PACK_SENT
 fn_virtualfilestats
 @@TIMETICKS
Manual De Base De Datos Con SQL-Server 163

 @@IDLE
 @@TOTAL_ERRORS
 @@IO_BUSY
 @@TOTAL_READ
 @@PACKET_ERRORS
 @@TOTAL_WRITE
Funciones de imagen y texto Realizan operaciones sobre los valores de entrada o
columnas de texto o imagen, y devuelven información
acerca del valor.
 PATINDEX
 TEXTVALID
 TEXTPTR

Funciones definidas por el usuario

¿Por qué usarlas?


 Permiten una programación modular. Puede crear la función una vez, almacenarla en la
base de datos y llamarla desde el programa tantas veces como desee. Las funciones definidas
por el usuario se pueden modificar, independientemente del código de origen del programa.
 Permiten una ejecución más rápida. Al igual que los procedimientos almacenados, las
funciones definidas por el usuario Transact-SQL reducen el costo de compilación del código
Transact-SQL almacenando los planes en la caché y reutilizándolos para ejecuciones
repetidas. Esto significa que no es necesario volver a analizar y optimizar la función definida
por el usuario con cada uso, lo que permite obtener tiempos de ejecución mucho más rápidos.
Las funciones CLR ofrecen una ventaja de rendimiento importante sobre las funciones
Transact-SQL para tareas de cálculo, manipulación de cadenas y lógica empresarial.
Transact-SQL se adecuan mejor a la lógica intensiva del acceso a datos.
 Pueden reducir el tráfico de red. Una operación que filtra datos basándose en restricciones
complejas que no se puede expresar en una sola expresión escalar se puede expresar como
una función. La función se puede invocar en la cláusula WHERE para reducir el número de
filas que se envían al cliente.
NOTA: Las funciones Transact-SQL definidas por el usuario en consultas solo se pueden
ejecutar en un único subproceso (plan de ejecución en serie).

Tipos de funciones

Función escalar. Las funciones escalares definidas por el usuario devuelven un único valor
de datos del tipo definido en la cláusula RETURNS. En una función escalar insertada no hay
cuerpo de la función; el valor escalar es el resultado de una sola instrucción. Para una función
escalar de varias instrucciones, el cuerpo de la función, definido en un bloque
Manual De Base De Datos Con SQL-Server 164

BEGIN...END, contiene una serie de instrucciones de Transact-SQL que devuelven el único


valor. El tipo devuelto puede ser de cualquier tipo de datos excepto text, ntext, image,
cursory timestamp.

Funciones con valores de tabla. Las funciones con valores de tabla definidas por el usuario
devuelven un tipo de datos table. Las funciones insertadas con valores de tabla no tienen
cuerpo; la tabla es el conjunto de resultados de una sola instrucción SELECT. Ejemplos.

Funciones del sistema. SQL Server proporciona numerosas funciones del sistema que se
pueden usar para realizar diversas operaciones. No se pueden modificar. Para obtener más
información, vea Funciones integradas (Transact-SQL), Funciones almacenadas del sistema
(Transact-SQL) y Funciones y vistas de administración dinámica (Transact-SQL).

Instrucciones

Transact-SQL errores que producen la cancelación de una instrucción y continúan con la


siguiente instrucción del módulo, como desencadenadores o procedimientos almacenados,
se tratan de forma distinta dentro de una función. En las funciones, estos errores hacen que
se detenga la ejecución de la función. Esto hace que se cancele la función que invocó la
instrucción.

Las instrucciones de un bloque BEGIN...END no pueden producir efectos secundarios. Los


efectos secundarios de una función son cambios definitivos del estado de un recurso que está
fuera del ámbito de la función, como una modificación de una tabla de base de datos. Los
únicos cambios que pueden realizar las instrucciones de la función son cambios en objetos
locales de la función, como cursores o variables locales. En una función no se pueden llevar
a cabo algunas acciones como, por ejemplo, modificar tablas de base de datos, realizar
operaciones en cursores no locales de la función, enviar correo electrónico, intentar
modificar un catálogo o generar un conjunto de resultados que se devuelve al usuario.

NOTA: Si una instrucción CREATE FUNCTION genera efectos secundarios sobre recursos
que no existen en el momento que se emite la instrucción CREATE FUNCTION, SQL Server
ejecuta la instrucción. Sin embargo, SQL Server no ejecuta la función cuando ésta se invoca.

El número de veces que se ejecuta realmente una función especificada en una consulta puede
variar entre los planes de ejecución generados por el optimizador. Un ejemplo es una función
invocada por una subconsulta en una cláusula WHERE. El número de veces que se ejecuta
la subconsulta y su función puede variar con diferentes rutas de acceso seleccionadas por el
optimizador.
Manual De Base De Datos Con SQL-Server 165

FUNCION DEFINIDA POR EL USUARIO (SINTAXIS)

-- FUNCIONES DEFINIDAS POR EL USUARIO

CREATE FUNCTION [PROPIETARIO] NOMBRE_FUNCTION(


[@PARAMETRO [AS] TIPODATO [=VALORXDEFECTO]]
)
RETURNS TIPO_RETORNADO
[AS]
BEGIN
CUERPO_FUNCTION
RETURN EXPRESION_SALIDA
END

CASO DESARROLLADO 76: Implementar una consulta que permita implementar una función
que devuelva el promedio de tres números ingresados por el usuario.

FUNCION PROMEDIO

-- FUNCION PROMEDIO

CREATE FUNCTION MIPROMEDIO(@VALOR1 INT,


@VALOR2 INT,
@VALOR3 INT)
RETURNS DECIMAL(10,2)
AS
BEGIN
DECLARE @RESULTADO DECIMAL(10,2)
SET @RESULTADO=(@VALOR1+@VALOR2+@VALOR3)/3.0
RETURN @RESULTADO
END
GO

--EJECUTANDO LA FUNCION PROMEDIO:


-- PRIMERA FORMA

SELECT dbo.MIPROMEDIO(12,13,12) AS [PROMEDIO]


GO

-- SEGUNDA FORMA

DECLARE @N1 INT=12,@N2 INT=13,@N3 INT=12


PRINT 'EL PROMEDIO DE '+
CAST(@N1 AS CHAR(2))+' , '+CAST(@N2 AS CHAR(2))+' Y
'+CAST(@N3 AS CHAR(2))+' ES: '+
CAST(DBO.MIPROMEDIO(@N1,@N2,@N3) AS CHAR(10))
GO
Manual De Base De Datos Con SQL-Server 166

CASO DESARROLLADO 77: Implementar una consulta que permita implementar una función
que devuelva el total de PROVINCIAS de un determinado DEPARTAMENTO ingresado por el
usuario.

FUNCION PROVINCIAXDEPARTAMENTO

-- FUNCION PROVINCIAXDEPARTAMENTO

CREATE FUNCTION PROVINCIAXDEPARTAMENTO(


@DEPARTAMENTO VARCHAR(30))
RETURNS TABLE
AS
RETURN (
SELECT PROV.IDPROVINCIA,PROV.NOMPROVIN,
DEP.IDDEPARTAMENTO,DEP.MONDEPART
FROM PROVINCIA PROV
JOIN DEPARTAMENTO DEP ON
PROV.IDDEPARTAMENTO=DEP.IDDEPARTAMENTO
WHERE DEP.MONDEPART=@DEPARTAMENTO
)
GO

-- EJECUTANDO LA FUNCION PROVINCIAXDEPARTAMENTO

SELECT * FROM DBO.PROVINCIAXDEPARTAMENTO('LORETO')


GO

CASO DESARROLLADO 78: Implementar una consulta que permita implementar una función
que devuelva la factorial de un número ingresado por el usuario. Usar recursividad de la función.

FUNCION FACTORIAL

-- FUNCION FACTORIAL
CREATE FUNCTION DBO.FACTORIAL(@NUM INT)
RETURNS INT
AS
BEGIN
DECLARE @FACTOR INT
IF @NUM <= 1
SET @FACTOR = 1
ELSE
SET @FACTOR = @NUM * DBO.FACTORIAL(@NUM-1)
Manual De Base De Datos Con SQL-Server 167

RETURN (@FACTOR)
END

-- EJECUTANDO LA FUNCION FACTORIA

-- PRIMERA FORMA

DECLARE @NUM INT=10


SELECT @NUM AS [NUMERO],dbo.FACTORIAL(@NUM) AS [FACTORIAL]

-- SEGUNDA FORMA

DECLARE @NUM INT=10


PRINT 'EL FACTORIAL DEL NUMERO '+RTRIM(CAST(@NUM AS
CHAR(10)))+ ' ES '+CAST(DBO.FACTORIAL(@NUM) AS CHAR(10))

FUNCION TABLA EN LINEA:

FUNCION TABLA EN LINEA (SINTAXIS)

-- FUNCION TABLA EN LINEA

CREATE FUNCTION [PROPIETARIO] NOMBRE_FUNCION


([@PARAMETRO [AS] TIPO_DATOS [= DEFAULT]]
)
RETURNS TABLE
[AS]
RETURN [(CONSULTA)]

CASO DESARROLLADO 79: Implementar una consulta que permita implementar una función
de tabla en línea que muestre los registros de la tabla distrito.

FUNCION MISDISTRITOS

-- FUNCION DBO.MISDISTRITOS

CREATE FUNCTION DBO.MISDISTRITOS()


RETURNS TABLE
AS
RETURN (SELECT * FROM DISTRITO)
GO

-- EJECUTANDO LA FUNCION DBO.MISDISTRITOS

SELECT * FROM DBO.MISDISTRITOS()


Manual De Base De Datos Con SQL-Server 168

GO

FUNCION TABLA MULTISENTENCIA

FUNCION TABLA MULTISENTENCIA (SINTAXIS)

-- FUNCION TABLA MULTISENTENCIA


CREATE FUNCTION [PROPIETARIO] NOMBRE_FUNCION
([@PARAMETRO [AS] TIPO_DATO [=DEFAULT][,...N]])
RETURNS @RETURN_VARIABLE TABLE <TABLE_TYPE_DEFINITION>
[WITH <FUNCTION_OPTION> [,...N]]
[AS]
BEGIN
CUERPO_DE_LA_FUNCION
RETURN
END

CASO DESARROLLADO 80: Implementar una consulta que permita implementar una función
de tabla multisentencia que muestre los registros de la tabla PROVINCIA adicionando el nombre
del DEPARTAMENTO.

FUNCION TABLA MULTISENTENCIA (SINTAXIS)

-- FUNCION MISPROVINCIAS

CREATE FUNCTION MISPROVINCIAS ()


RETURNS @TAB_PRO TABLE(
IDPROV VARCHAR(45),
DEPARTAMENTO VARCHAR(100),
PROVINCIA VARCHAR(100)
)
AS
BEGIN
INSERT INTO @TAB_PRO
SELECT PROV.IDPROVINCIA,DEP.MONDEPART
[DEPARTAMENTO] ,PROV.NOMPROVIN [PROVINCIA]
FROM PROVINCIA PROV
JOIN DEPARTAMENTO DEP ON
PROV.IDDEPARTAMENTO=DEP.IDDEPARTAMENTO
RETURN
END

-- EJECUTANDO LA FUNCION MISPROVINCIAS

SELECT * FROM MISPROVINCIAS()


GO
Manual De Base De Datos Con SQL-Server 169

6.8. Manejo de Procedimientos Almacenados

Un procedimiento almacenado es un conjunto de instrucciones de Transact-SQL o una referencia


a un método de Common Language Runtime (CLR) de Microsoft .NET Framework que puede
aceptar y devolver parámetros proporcionados por el usuario.

Los procedimientos se pueden crear para uso permanente o para uso temporal en una sesión, un
procedimiento local temporal, o para su uso temporal en todas las sesiones, un procedimiento
temporal global.

El motor de base de datos considera al procedimiento almacenado como un objeto que contiene un
conjunto de instrucciones SQL que se ejecutan en conjunto con un mismo nombre y una sola
llamada.

Consideraciones generales sobre los procedimientos almacenados:

 Todo procedimiento almacenado se registra en el servidor actual.


 Pueden incluir atributos de seguridad como permisos y cadenas de propiedad; además se
les pueden asociar certificados.
 Los procedimientos almacenados mejoran la seguridad de una aplicación.
 Los procedimientos almacenados con parámetros pueden ayudar a proteger la aplicación
ante ataques por inyección de código SQL.
 Permite una programación Modular.
 Puede crear el procedimiento una vez y llamarlo desde el programa tantas veces como
desee.
 Pueden reducir el tráfico de red

Procedimientos almacenados del sistema de la API


Los usuarios que ejecutan SQL Server Profiler con aplicaciones ADO, OLE DB y ODBC pueden
observar que dichas aplicaciones usan procedimientos almacenados del sistema que no se tratan en
la Referencia de Transact-SQL. Estos procedimientos almacenados se usan por el Microsoft SQL
Manual De Base De Datos Con SQL-Server 170

Server proveedor Native Client OLE DB y el SQL Server controlador ODBC de Native Client para
implementar la funcionalidad de una API de base de datos. Estos procedimientos almacenados
simplemente son el mecanismo que el proveedor o el controlador utiliza para comunicar las
solicitudes del usuario a una instancia de SQL Server. Están destinados al uso interno del proveedor
o el controlador. Llamarlos explícitamente desde una SQL Server-no se admite la aplicación basada
en.
El almacenados sp_createorphan y sp_droporphans se utilizan procedimientos para ODBC ntext,
texto, y imagen de procesamiento.
SQL Server utiliza el procedimiento almacenado sp_reset_connection para permitir las llamadas a
procedimientos almacenados remotos en una transacción. Este procedimiento almacenado también
hace que se activen los eventos Audit Login y Audit Logout cuando se reutiliza una conexión de
un grupo de conexiones.
Los procedimientos almacenados del sistema de las siguientes tablas solo se utilizan en una
instancia de SQL Server o a través de las API cliente y no están destinados al uso general. Están
sujetos a cambios y su compatibilidad no está garantizada.
Los siguientes procedimientos almacenados están documentados en los Libros en pantalla de SQL
Server:
 sp_catalogs  sp_fkeys
 sp_column_privileges  sp_foreignkeys
 sp_column_privileges_ex  sp_indexes
 sp_columns  sp_pkeys
 sp_columns_ex  sp_primarykeys
 sp_databases  sp_prepare
 sp_cursor  sp_prepexec
 sp_cursorclose  sp_prepexecrpc
 sp_cursorexecute  sp_unprepare
 sp_cursorfetch  sp_server_info
 sp_cursoroption  sp_special_columns
 sp_cursoropen  sp_sproc_columns
 sp_cursorprepare  sp_statistics
 sp_cursorprepexec  sp_table_privileges
 sp_cursorunprepare  sp_table_privileges_ex
 sp_execute  sp_tables
 sp_datatype_info  sp_tables_ex

Los siguientes procedimientos almacenados no están documentados:


 sp_assemblies_rowset  sp_assemblies_rowset_rmt
Manual De Base De Datos Con SQL-Server 1
7
1

 sp_assemblies_rowset2  sp_ddopen;10
 sp_assembly_dependencies_rowset  sp_ddopen;11
 sp_assembly_dependencies_rowset_r  sp_ddopen;12
mt  sp_ddopen;13
 sp_assembly_dependencies_rowset2  sp_ddopen;2
 sp_bcp_dbcmptlevel  sp_ddopen;3
 sp_catalogs_rowset  sp_ddopen;4
 sp_catalogs_rowset;2  sp_ddopen;5
 sp_catalogs_rowset;5  sp_ddopen;6
 sp_catalogs_rowset_rmt  sp_ddopen;7
 sp_catalogs_rowset2  sp_ddopen;8
 sp_check_constbytable_rowset  sp_ddopen;9
 sp_check_constbytable_rowset;2  sp_foreign_keys_rowset
 sp_check_constbytable_rowset2  sp_foreign_keys_rowset;2
 sp_check_constraints_rowset  sp_foreign_keys_rowset;3
 sp_check_constraints_rowset;2  sp_foreign_keys_rowset;5
 sp_check_constraints_rowset2  sp_foreign_keys_rowset_rmt
 sp_column_privileges_rowset  sp_foreign_keys_rowset2
 sp_column_privileges_rowset;2  sp_foreign_keys_rowset3
 sp_column_privileges_rowset;5  sp_indexes_90_rowset
 sp_column_privileges_rowset_rmt  sp_indexes_90_rowset_rmt
 sp_column_privileges_rowset2  sp_indexes_90_rowset2
 sp_columns_90  sp_indexes_rowset
 sp_columns_90_rowset  sp_indexes_rowset;2
 sp_columns_90_rowset_rmt  sp_indexes_rowset;5
 sp_columns_90_rowset2  sp_indexes_rowset_rmt
 sp_columns_ex_90  sp_indexes_rowset2
 sp_columns_rowset  sp_linkedservers_rowset
 sp_columns_rowset;2  sp_linkedservers_rowset;2
 sp_columns_rowset;5  sp_linkedservers_rowset2
 sp_columns_rowset_rmt  sp_oledb_database
 sp_columns_rowset2  sp_oledb_defdb
 sp_constr_col_usage_rowset  sp_oledb_deflang
 sp_datatype_info_90  sp_oledb_language
 sp_ddopen;1  sp_oledb_ro_usrname
Manual De Base De Datos Con SQL-Server 1
7
2

 sp_primary_keys_rowset  sp_table_privileges_rowset;5
 sp_primary_keys_rowset;2  sp_table_privileges_rowset_rmt
 sp_primary_keys_rowset;3  sp_table_privileges_rowset2
 sp_primary_keys_rowset;5  sp_table_statistics_rowset
 sp_primary_keys_rowset_rmt  sp_table_statistics_rowset;2
 sp_primary_keys_rowset2  sp_table_statistics2_rowset
 sp_procedure_params_90_rowset  sp_tablecollations
 sp_procedure_params_90_rowset2  sp_tablecollations_90
 sp_procedure_params_rowset  sp_tables_info_90_rowset
 sp_procedure_params_rowset;2  sp_tables_info_90_rowset_64
 sp_procedure_params_rowset2  sp_tables_info_90_rowset2
 sp_procedures_rowset  sp_tables_info_90_rowset2_64
 sp_procedures_rowset;2  sp_tables_info_rowset
 sp_procedures_rowset2  sp_tables_info_rowset;2
 sp_provider_types_90_rowset  sp_tables_info_rowset_64
 sp_provider_types_rowset  sp_tables_info_rowset_64;2
 sp_schemata_rowset  sp_tables_info_rowset2
 sp_schemata_rowset;3  sp_tables_info_rowset2_64
 sp_special_columns_90  sp_tables_rowset;2
 sp_sproc_columns_90  sp_tables_rowset;5
 sp_statistics_rowset  sp_tables_rowset_rmt
 sp_statistics_rowset;2  sp_tables_rowset2
 sp_statistics_rowset2  sp_usertypes_rowset
 sp_stored_procedures  sp_usertypes_rowset_rmt
 sp_table_constraints_rowset  sp_usertypes_rowset2
 sp_table_constraints_rowset;2  sp_views_rowset
 sp_table_constraints_rowset2  sp_views_rowset2
 sp_table_privileges_rowset  sp_xml_schema_rowset
 sp_table_privileges_rowset;2  sp_xml_schema_rowset2
Manual De Base De Datos Con SQL-Server 173

6.9. Comando EXECUTE

Instrucción EXECUTE realiza que SqlCliente, ODBC debe ejecutarse una o varias instrucciones
en Transact-SQL, pero estas instrucciones deben de cumplir con la sintaxis evaluada desde el motor
de base de datos SQL.

Sintaxis EXECUTE:

ESTRUCTURA EXECUTE

--ESTRUCTURA

[ { EXEC | EXECUTE } ]
{
[ @RETURN_STATUS = ]
MODULE_NAME [ ;NUMBER ] | @MODULE_NAME_VAR
[ [ @PARAMETER = ] {VALUE
| @VARIABLE [ OUTPUT ]
| [ DEFAULT ]
}
]

La instrucción EXECUTESQL es un procedimiento almacenado que ejecuta una cadena Unicode


en donde acepta la sustitución de parámetros. Considere que el valor deberá ser mínimo de tipo
NVARCHAR. Se ejecuta con instrucción EXEC.

Sintaxis SP_EXECUTESQL:

ESTRUCTURA SP_EXECUTESQL

--ESTRUCTURA

SP_EXECUTESQL [ @STMT = ] STATEMENT


[
, [ @PARAMS = ] N'@PARAMETER_NAME DATA_TYPE [ OUT | OUTPUT ][
,...N ]'
, [ @PARAM1 = ] 'VALUE1' [ ,...N ]
]

Uso de instrucción EXEC y procedimiento almacenado SP_EXECUTESQL.

INSTRUCCION CON EXEC

--INSTRUCCION
DECLARE @DATOS VARCHAR(MAX)
SET @DATOS='SELECT*FROM DATOSPERSONALES'
Manual De Base De Datos Con SQL-Server 174

-- EJECUCION DE EXEC
EXEC(@DATOS)
GO

ESTRUCTURA SP_EXECUTESQL

----INSTRUCCION

DECLARE @DATOS NVARCHAR(MAX)


SET @DATOS='SELECT*FROM DATOSPERSONALES'

-- EJECUCION DE EXEC
EXEC SP_EXECUTESQL @DATOS
GO

En la siguiente imagen se muestra el resultado de ambas consultas

RESULTADOS DE AMBOS

--IMAGEN

6.10. Procedimientos Almacenados definidas por el usuario

Son procedimientos realizados de acuerdo a la necesidad del usuario, dentro de ella se puede aplicar
cualquier consulta vistas anteriormente.

Sintaxis:

PROCEDIMIENTO DEFINIDOS POR EL USUARIO

--ESTRUCTURA
CREATE PROC | PROCEDURE [PROPIETARIO].NOMBRE_PROCEDIMIENTO
[ @PARAMETRO TIPO_DATOS [ = DEFAULT ] [ OUT | OUTPUT ]
[READONLY] ]
AS
[BEGIN]
CUERPO_DEL_PROCEDIMIENTO
[END]
Manual De Base De Datos Con SQL-Server 175

CASO DESARROLLADO 81: Implementar un procedimiento almacenado


“MUESTRADATOSPERSONALES” que permita mostrar de los registros de la tabla
DATOSPERSONALES solo apellido paterno, materno y primer nombre, también la situación
actual de dicho personal.

PROCEDIMIENTO MUESTRADATOSPERSONALES

--VERIFICAR SI EXISTE YA EL PROCEDIMIENTO

IF OBJECT_ID('MUESTRADATOSPERSONALES') IS NOT NULL


BEGIN
DROP PROCEDURE MUESTRADATOSPERSONALES
END
GO

--CREACION DEL PROCEDIMIENTO

CREATE PROCEDURE MUESTRADATOSPERSONALES


AS
SELECT DT.APELLIDOPATERNO AS APPATERNO, DT.APELLIDOMATERNO AS
APMATERNO, DT.NOMBRE1 AS NOMBRE, P.SITUACION AS SITUACIONACTUAL
FROM DATOSPERSONALES DT
JOIN PERSONAL P ON P.IDPERSONAL=DT.IDPERSONAL

--EJECUCION DEL PROCEDIMIENTO

EXEC MUESTRADATOSPERSONALES
GO

--IMAGEN

CASO DESARROLLADO 82: Implementar un procedimiento almacenado que permita mostrar


los DATOS PERSONALES considerando como parámetro de entrada el primer nombre y elegir
adecuadamente la cabecera del listado e implementar un mensaje de error en el caso que los datos
del personal no existan.

PROCEDIMIENTO

--VERIFICACION DE EXISTENCIA DE PROCEDIMIENTO

IF OBJECT_ID('PROCDATOSPERSONAL') IS NOT NULL


BEGIN
DROP PROCEDURE PROCDATOSPERSONAL
END
GO
Manual De Base De Datos Con SQL-Server 176

--CREACION DE PROCEDIMIENTO CON PARAMETROS

CREATE PROCEDURE PROCDATOSPERSONAL (@NOMBRE VARCHAR(25))


AS
BEGIN

--VERIFICACION DE EXISTENCIA DE REGISTRO

IF EXISTS(SELECT IDDATOSPERSONALES
FROM DATOSPERSONALES
WHERE NOMBRE1=@NOMBRE)

SELECT DT. APELLIDOPATERNO, DT.APELLIDOMATERNO, DT.NOMBRE1, DT.SEXO


FROM DATOSPERSONALES DT
WHERE NOMBRE1=@NOMBRE

-- MENSAJE EN CASO NO EXISTA EL REGISTROS


ELSE
PRINT' LOS DATOS PERSONALES DE: "' + @NOMBRE+ '" NO SE ENCUENTRAN
REGISTRADOS'
END
GO

--EJECUCION DEL PROCEDIMIENTO

EXEC PROCDATOSPERSONAL 'ALEJANDRO'

--IMAGEN

CASO DESARROLLADO 83: Implementar un procedimiento almacenado que permita


determinar el número de datos personales con un tipo de documento de identidad que se deberá
ingresar.

PROCEDIMIENTO CON PARAMETROS DE ENTRADA Y SALIDA

--CREACION DEL PROCEDIMIENTO

CREATE PROCEDURE TOTALXTIPODOC (@NOMTIPO VARCHAR(25),


@TOTAL INT OUTPUT)
AS

SELECT @TOTAL= COUNT(*)


FROM DOCUMENTOIDENTIDAD DOC
JOIN DATOSPERSONALES DT ON
DOC.IDDOCUMENTOIDENTIDAD=DT.IDDOCUMENTOIDENTIDAD
WHERE TIPODOCUMENTO=@NOMTIPO

GO

--EJECUCION DEL PROCEDIMIENTO


DECLARE @T INT
DECLARE @TIPODOC VARCHAR(25)='DNI'
Manual De Base De Datos Con SQL-Server 177

EXEC TOTALXTIPODOC @TIPODOC, @TOTAL=@T OUTPUT


PRINT 'EL TIPO DE DOCUMENTO ' +@TIPODOC+ ' TIENE ' +CAST(@T AS
VARCHAR(10))+' REGISTROS DE DATOS PERSONALES'
GO

--IMAGEN

6.11. Procedimiento almacenados y Cursores

Cuando se habló del tema de cursores resultaba un poco incómodo ejecutarlos ya que se tenía que
seleccionar todo el bloque que encierra al cursor o ejecutarlo por bloques, los procedimientos
almacenados reducen el tiempo de ejecución llamando al cursor por medio del nombre asignado al
procedimiento almacenado que lo aloje.

CASO DESARROLLADO 84: Implementar una consulta que permita crear el procedimiento
almacenado REPORTE_PROVINCIA el cual mostrara un reporte de la tabla PROVINCIA por
medio de un CURSOR, considere que solo se deben de mostrar las PROVINCIAS de un
determinado DEPARTAMENTO.

PROCEDIMIENTO ALMACENADO Y CURSORES


-- CREANDO EL PROCEDIMIENTO ALMACENADO
CREATE PROCEDURE REPORTE_PROVINCIA (
@DEPARTAMENTO VARCHAR(100)
)
AS
BEGIN
DECLARE @IDPRO VARCHAR(45),
@NOMPRO VARCHAR(100),
@IDDEP VARCHAR(45),
@NOMDEPA VARCHAR(100),
@TOTAL INT=0
DECLARE MICURSOR CURSOR
FOR SELECT PRO.IDPROVINCIA,
DEPA.MONDEPART,
PRO.NOMPROVIN
FROM PROVINCIA PRO
JOIN DEPARTAMENTO DEPA ON
PRO.IDDEPARTAMENTO=DEPA.IDDEPARTAMENTO
WHERE DEPA.MONDEPART=@DEPARTAMENTO
OPEN MICURSOR
FETCH MICURSOR INTO @IDPRO,@NOMPRO,@NOMDEPA
PRINT 'CODIGO DEPARTAMENTO PROVINVIA'
PRINT '---------------------- --------------------'
WHILE @@FETCH_STATUS=0
BEGIN
Manual De Base De Datos Con SQL-Server 178

SET @TOTAL+=1
PRINT @IDPRO+SPACE(5)+
@NOMPRO+SPACE(25)+
RTRIM(@NOMDEPA)+SPACE(5)
FETCH MICURSOR INTO @IDPRO,@NOMPRO,@NOMDEPA
END
PRINT '--------------------------------------------'
PRINT
'EL TOTAL DE PROVINCIAS ES: '+CAST(@TOTAL AS
CHAR(6))
PRINT '--------------------------------------------'
CLOSE MICURSOR
DEALLOCATE MICURSOR
END
GO
-- EJECUTANDO EL PROCEDIMIENTO ALMACENADO
EXEC REPORTE_PROVINCIA 'ICA'

CASO DESARROLLADO 85: Implementar una consulta que permita crear el procedimiento
almacenado REPORTE_PROVINCIA_INI el cual mostrara un reporte de la tabla PROVINCIA
por medio de un CURSOR, considere que solo se deben de mostrar las PROVINCIAS de un
determinado parámetro.

PROCEDIMIENTO ALMACENADO Y CURSORES

-- CREANDO EL PROCEDIMIENTO ALMACENADO

CREATE PROCEDURE REPORTE_PROVINCIA_INI(@PROV VARCHAR(100))


AS
BEGIN
DECLARE @IDPRO VARCHAR(45),
@IDDEPAR VARCHAR(45),
@NOMPRO VARCHAR(100),
@TOTAL INT=0
DECLARE MICURSOR CURSOR
FOR SELECT *
FROM PROVINCIA P
WHERE P.NOMPROVIN LIKE '%'+@PROV+'%'
OPEN MICURSOR
FETCH MICURSOR INTO @IDPRO,@IDDEPAR,@NOMPRO
PRINT
'CODIGO_PROVINCIA CODIGO_DEPARTAMENTO PROVINCIA'
PRINT '----------------------------------------'
WHILE @@FETCH_STATUS=0
BEGIN
SET @TOTAL+=1
PRINT @IDPRO+SPACE(25)+
@IDDEPAR+SPACE(20)+
Manual De Base De Datos Con SQL-Server 179

@NOMPRO
FETCH MICURSOR INTO @IDPRO,@IDDEPAR,@NOMPRO
END
PRINT
'EL TOTAL DE PROVINCIA QUE CONTIENEN LAS
INICIALES("'+
@PROV+'") ES:'+CAST(@TOTAL AS CHAR(6))
CLOSE MICURSOR
DEALLOCATE MICURSOR
END
GO

-- EJECUTANDO EL PROCEDIMIENTO ALMACENADO

EXEC REPORTE_PROVINCIA_INI 'AI'

6.12. Manejo de Transacciones

Una transacción es una unidad única de trabajo. Si una transacción tiene éxito, todas las
modificaciones de los datos realizadas durante la transacción se confirman y se convierten en una
parte permanente de la base de datos. Si una transacción encuentra errores y debe cancelarse o
revertirse, se borran todas las modificaciones de los datos.

SQL Server funciona en los siguientes tres modos de transacción.

 Transacciones de confirmación automática. Cada instrucción individual es una


transacción.
 Transacciones explícitas. Cada transacción se inicia explícitamente con la instrucción
BEGIN TRANSACTION y se termina explícitamente con una instrucción COMMIT o
ROLLBACK.
 Transacciones implícitas. Se inicia implícitamente una nueva transacción cuando se ha
completado la anterior, pero cada transacción se completa explícitamente con una
instrucción COMMIT o ROLLBACK.
 Transacciones de ámbito de lote. Una transacción implícita o explícita de Transact-SQL
que se inicia en una sesión de MARS (conjuntos de resultados activos múltiples), que solo
es aplicable a MARS, se convierte en una transacción de ámbito de lote. Si no se confirma
Manual De Base De Datos Con SQL-Server 180

o revierte una transacción de ámbito de lote cuando se completa el lote, SQL Server la
revierte automáticamente.

MANEJO DE TRANSACCIONES (SINTAXIS)

-- SINTAXIS
BEGIN [TRAN|TRANSACTION] NOMBRE_TRANSACTION
COMMIT TRAN NOMBRE_TRANSACCION
ROLLBACK TRAN NOMBRE_TRANSACCION

CASO DESARROLLADO 86: Implementar un procedimiento almacenado que permita registrar


una PROVINCIA controlando la inserción por medio de una transacción, emitiendo un mensaje
en cada inserción, si todos es correctos mostrar el siguiente mensaje la provincia se registró con
éxito en caso contrario ocurrió un error al insertar.
MANEJO DE TRANSACCIONES

-- CREACION DEL PROCEDIMIENTO ALMACENADO NUEVAPROVINCIA

CREATE PROCEDURE NUEVAPROVINCIA(


@IDPROV VARCHAR(45),
@NOMPRO VARCHAR(100),
@NOMDEP VARCHAR(100)
)
AS
BEGIN TRANSACTION TPROVINCIA
DECLARE @IDDEPAR VARCHAR(44)
SELECT @IDDEPAR = IDDEPARTAMENTO
FROM DEPARTAMENTO WHERE MONDEPART=@NOMDEP
INSERT INTO PROVINCIA
VALUES (@IDPROV,@IDDEPAR,@NOMPRO)

IF @@ERROR=0
BEGIN
PRINT
'LA PROVINCIA SE REGISTRO CON EXITO'
COMMIT TRAN TPROVINCIA
END
ELSE
BEGIN
PRINT 'OCURRIO UN ERROR AL INSERTAR'
ROLLBACK TRAN TPROVINCIA
END
GO

-- EJECUTANDO EL PROCEDIMIENTO ALMACENADO NUEVAPROVINCIA

EXEC NUEVAPROVINCIA '2620','EJEMPLOPROV','CUSCO'

-- SI EJECUTAMOS NUEVAMENTE EL PROCEDIMIENTO ALMACENADO


NUEVAPROVINCIA
Manual De Base De Datos Con SQL-Server 181

EXEC NUEVAPROVINCIA '2620','EJEMPLOPROV','CUSCO'

MANEJO DE TRANSACCIONES (USANDO BEGIN TRY…BEGIN CATCH)

-- USANDO BEGIN TRY...BEGIN CATCH


CREATE PROCEDURE NUEVAPROVINCIA(
@IDPROV VARCHAR(45),
@NOMPRO VARCHAR(100),
@NOMDEP VARCHAR(100)
)
AS
BEGIN TRANSACTION TPROVINCIA
BEGIN TRY
DECLARE @IDDEPAR VARCHAR(44)
SELECT @IDDEPAR = IDDEPARTAMENTO
FROM DEPARTAMENTO
WHERE MONDEPART=@NOMDEP
INSERT INTO PROVINCIA
VALUES (@IDPROV,@IDDEPAR,@NOMPRO)
PRINT 'LA PROVINCIA SE REGISTRO CON EXITO'
PRINT '----------------------------------'
PRINT
'IDPROVINCIA: '+@IDPROV+' |
'+'IDDEPARTAMENTO:'+@IDDEPAR+' | '+'PROVINCIA:
'+@NOMPRO
PRINT '----------------------------------'
COMMIT TRAN TPROVINCIA
END TRY
BEGIN CATCH
PRINT 'OCURRIO UN ERROR AL INSERTAR'
PRINT '----------------------------------'
PRINT
'VERIFIQUE SU ID DE LA PROVINCIA: '+@IDPROV
PRINT
'VERIFIQUE EL NOMBRE DE LA PROVINCIA: '+@NOMPRO
PRINT '----------------------------------'
PRINT
'NO SE DEBEN DE REPETIR EL ID Y EL NOMBRE DE LA
PROVINCIA'
PRINT '-----------------------------------'
ROLLBACK TRAN TPROVINCIA
END CATCH
GO
-- EJECUTANDO EL PROCEDIMIENTO ALMACENADO NUEVAPROVINCIA

EXEC NUEVAPROVINCIA '2606','APPSWWWSCUSCO3','CUSCO'

-- SI EJECUTAMOS NUEVAMENTE EL PROCEDIMIENTO ALMACENADO


NUEVAPROVINCIA
Manual De Base De Datos Con SQL-Server 182

EXEC NUEVAPROVINCIA '2620','EJEMPLOPROV','CUSCO'

CASO DESARROLLADO 87: Implementar una consulta que permita crear un procedimiento
almacenado, el procedimiento almacenado debe de permitir registrar la provincia y a la vez
actualizar los valores de la tabla departamento.
MANEJO DE TRANSACCIONES

-- CREANDO EL PROCEDIMIENTO ALMACENADO REGISTRARPROVINCIA

CREATE PROC REGISTRARPROVINCIA(


@IDPROV VARCHAR(45),
@IDDEPAR VARCHAR(45),
@NOMPRO VARCHAR(100),
@NOMDEP VARCHAR(100)
)
AS
BEGIN TRAN T_PROVINCIA
BEGIN TRY
INSERT INTO PROVINCIA
VALUES (@IDPROV,@IDDEPAR,@NOMPRO)
UPDATE DEPARTAMENTO
SET MONDEPART=@NOMDEP
WHERE IDDEPARTAMENTO=@IDDEPAR
PRINT 'TRANSACCION CORRECTA'
COMMIT TRAN T_PROVINCIA
END TRY
BEGIN CATCH
PRINT
'OCURRIO UN ERROR AL REGISTRAR PAGO'
PRINT @@ERROR
ROLLBACK TRAN T_PROVINCIA
END CATCH
GO

-- VERIFICAMOS LOS DATOS DE NUESTRAS TABLAS

SELECT * FROM PROVINCIA

SELECT * FROM DEPARTAMENTO


Manual De Base De Datos Con SQL-Server 183

-- EJECUTANDO EL PROCEDIMIENTO ALMACENADO REGISTRARPROVINCIA

EXEC REGISTRARPROVINCIA '2615','11','EJEMPLO01','ICA_1'

-- VERIFICAMOS LOS DATOS DE NUESTRAS TABLAS

SELECT * FROM PROVINCIA

SELECT * FROM DEPARTAMENTO

6.13. Manejo de TRIGGERS

El trigger o disparador en una base de datos, se ejecuta cuando se cumple una determinada
condición al realizar operación.

Dicho triggers pueden ser para inserción (INSERT), modificación o actualización (UPDATE) o
eliminación (DELETE).

Usos:

 Permite registrar, auditar los procesos de cambio de valores en las bases de datos.
 Permite validar los valores aprobando o negando acciones hechas por las sentencias de tipo
DML.
 Preserva la consistencia y claridad de los valores con los objetos de tipo table o tabla del
base de datos.
 Se pueden crear más de un trigger para un mismo evento en una tabla, con lo cual se pueden
controlar múltiples alternativas sobre la misma tabla.
Manual De Base De Datos Con SQL-Server 184

Sintaxis para Trigger DML:

TRIGGER PARA DML

--ESTRUCTURA

CREATE TRIGGER NOMBRE_TRIGGER


ON [TABLE | VIEW ]
FOR | AFTER | INSTEAD OF
[INSERT] [,] [UPDATE] [,] [DELETE]
AS
SENTENCIA_SQL
GO

Sintaxis para Trigger DDL:

TRIGGER PARA DDL

--ESTRUCTURA

CREATE TRIGGER NOMBRE_TRIGGER


ON [ALL SERVER | DATABASE ]
FOR | AFTER
AS
SENTENCIA_SQL

Donde:

 TABLE/VIEW: es la tabla o vista en que se ejecuta el desencadenador DML; algunas veces


de denomina tabla del desencadenador o vista del mismo. Especificar el nombre completo de
la tabla o vista es opcional. Solo se puede hacer referencia a una vista, mediante un
desencadenador INSTEAD OF.
 DATABASE: aplica el ámbito de un desencadenador DDL a la base de datos actual. Si se
especifica, el desencadenador se activa cada vez que event_type o event_group tiene lugar en
la base de datos actual.
 FOR | AFTER: AFTER especifica que el desencadenador DML solo se activa cuando todas
las operaciones específicas en la instrucción SQL desencadenadora se han ejecutado
correctamente. Además, todas las acciones referenciales en cascada y las comprobaciones de
restricciones deben ser correctas para que este desencadenador se ejecute.
AFTER es el valor predeterminado cuando solo se especifica la palabra clave FOR. Los
desencadenadores AFTER no se pueden definir en las vistas.
 INSTEAD OF: Especifica que se ejecuta el desencadenador DML en vez de la instrucción
SQL desencadenadora, por lo que se suplanta las acciones de las instrucciones
desencadenadoras.
Manual De Base De Datos Con SQL-Server 185

INSTEAD OF no se puede especificar para los desencadenadores DDL. Como máximo, se


puede definir un desencadenador INSTEAD OF por cada instrucción INSERT, UPDATE,
DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que
tengan su propio desencadenador INSTEAD OF.

Mostrar todos los triggers creados:


VER TODOS LOS TRIGGERS

SELECT*FROM SYS.TRIGGERS
GO

Eliminar un trigger correctamente:


ELIMINAR UN TRIGGER

--VERIFICAR LA EXISTENCIA DE TRIGGER

IF OBJECT_ID('TRIGER_PERSONAL') IS NOT NULL


BEGIN

--ELIMINACION DE TRIGGER

DROP PROCEDURE TRIGER_PERSONAL


PRINT 'TRIGGER ELIMINADO CORRECTAMENTE'
END
ELSE

--MENSAJE DE QUE NOE XISTE EL TRIGGER

PRINT 'TRIGGER NO EXISTE'


GO

Habilitar e inhabilitar un trigger


HABILITAR e INHABILITAR

--HABILITAR

ENABLE TRIGGER MENSAJEXPERSONAL


ON PERSONAL
GO

--ELIMINACION DE TRIGGER

DISABLE TRIGGER MENSAJEZPERSONAL


ON PERSONAL
GO

CASO DESARROLLADO 88: Implementar un trigger que permita indicar un mensaje cada vez
que se inserte o actualiza un registro de la tabla PERSONAL.
Manual De Base De Datos Con SQL-Server 186

TRIGGER PARA PERSONAL

--CREACION DE TRIGGER

CREATE TRIGGER MENSAJEXPERSONAL


ON PERSONAL

FOR INSERT, UPDATE


AS

--MENSAJE DEL TRIGGER

PRINT 'MENSAJE DEL DISPARADOR POR INSERCION O ACTUALIZACION DE TABLA


PERSONAL'
GO

--INSERCION DE DATOS

INSERT INTO PERSONAL VALUES ('G EE','ALTA')

CASO DESARROLLADO 89: Implementar un trigger que permita enviar un email al


administrador de base de datos cuando se registre en la tabla DatosPersonales de la base de datos
LEGAJOS_CSJAN_CONSULTAS.
TRIGGER CON MENSAJE A “DBA”
--CREACION DE TRIGGER

CREATE TRIGGER MENSAJEXNUEVO_DATOSPERSONALES


ON DATOSPERSONALES
-- PARA INSERTAR

FOR INSERT
AS

-- DECLARACION DE VARIABLES

DECLARE @MENSAJE VARCHAR(250)


DECLARE @IDPERS VARCHAR(5)
DECLARE @IDDOC VARCHAR(5)
DECLARE @IDIST VARCHAR (15)

SELECT @IDPERS = (SELECT IDPERSONAL FROM INSERTED)


SELECT @IDDOC = (SELECT IDDOCUMENTOIDENTIDAD FROM INSERTED)
SELECT @IDIST = (SELECT IDDISTRITO FROM INSERTED)

--MENSAJE AL CREAR NUEVO REGISTRO

SELECT @MENSAJE = 'NUEVO REGISTRO DE DATOS PERSONALES'

--MENSAJE AL ADMINISTRADOR DE BASE DE DATOS

EXEC MASTER.DBO.XP_SENDEMAIL
@RECIPIENTS = 'MASTER@SERVER.COM.PE',
@SUBJECT ='** NUEVO DATOS ** ',
@MESSAGE =@MENSAJE
GO
Manual De Base De Datos Con SQL-Server 187

Capítulo 7: Ejercicios Propuestos

Capítulo

7
Ejercicios
Propuestos
CAPACIDAD

DOCUMENTAR CAPACIDAD

BHVBEBVBBVHJ

BFDBVHDBBVDBVDFHMBVDHM

hcbhbvhbrehvbekbvkebvbehvbekhbvebvhbhevevbehjvbhebvhebvhjebvhjebvhbehjbvhjebvhjehjbvhjdbev
hjbehjvbehbvhjedbvhebvhjdbvdjebvhjdebvbehjbvhebvhjebhjvbehjvbhjebvhjebhjvbhjevbhjebvhj
Manual De Base De Datos Con SQL-Server 188

CASOS PROPUESTOS: BASE DE DATOS LEGAJOS_CSJAN_PROPUESTOS

SCRIP DE LA BASE DE DATOS LEGAJOS_CSJAN_PROPUESTOS:

SCRIPT PARA EJERCICIOS PROPUESTO


--CREACION DE BASE DE DATOS

CREATE DATABASE LEGAJOS_CSJAN_PROPUESTOS


GO

USE LEGAJOS_CSJAN_PROPUESTOS
GO

---CREACION DE TABLAS

CREATE TABLE documentoidentidad(


iddocumentoidentidad varchar(25) NOT NULL,
tipodocumento varchar(45) NOT NULL
)
GO

CREATE TABLE departamento(


idDepartamento varchar(45) NOT NULL,
mondepart varchar(80) NOT NULL
)
GO

CREATE TABLE personal(


idpersonal varchar(10) NOT NULL,
situacion varchar(45) NULL
Manual De Base De Datos Con SQL-Server 189

)
GO

CREATE TABLE provincia(


idProvincia varchar(45) NOT NULL,
idDepartamento varchar(45) NULL,
nomprovin varchar(100) NULL
)
GO

CREATE TABLE distrito(


idDistrito varchar(45) NOT NULL,
idProvincia varchar(45) NULL,
nomdistrit varchar(100) NULL
)
GO

CREATE TABLE datospersonales(


iddatospersonales varchar(10) NOT NULL,
apellidopaterno varchar(45) NOT NULL,
apellidomaterno varchar(45) NOT NULL,
nombre1 varchar(45) NOT NULL,
nombre2 varchar(45) NOT NULL,
nombre3 varchar(45) NULL,
numdocindentidad varchar(45) NOT NULL,
sexo varchar(10) NOT NULL,
Estadocivil varchar(15) NOT NULL,
Gruposanguineo varchar(10) NULL,
fechanacio date NOT NULL,
paisnacimiento varchar(45) NOT NULL,
iddocumentoidentidad varchar(25) NULL,
idDistrito varchar(45) NULL,
idpersonal varchar(10) NULL,
correo varchar(45) NOT NULL,
escalafon varchar(45) NULL
)
GO

CREATE TABLE otrosdatosidentificacion(


idotrosdatosidentif varchar(10) NOT NULL,
numlibretamilitar varchar(25) NULL,
carneessalud varchar(45) NULL,
RUC varchar(45) NULL,
numlicenciaconducir varchar(45) NULL,
telefonofijo varchar(25) NULL,
telefonocelular varchar(25) NULL,
claseycategoria varchar(45) NULL,
iddatospersonales varchar(10) NULL
)
GO

CREATE TABLE personafamiliar(


idPersonaFamiliar int IDENTITY(1,1) NOT NULL,
apellidosynombres varchar(80) NOT NULL,
sexo varchar(45) NOT NULL,
fechanac date NOT NULL,
vive varchar(45) NOT NULL
)
GO
Manual De Base De Datos Con SQL-Server 190

CREATE TABLE datosfamiliares(


iddatosfamiliares int NOT NULL,
idPersonaFamiliar int NOT NULL,
idpersonal varchar(10) NOT NULL,
idtipofamiliar int NULL
)
GO

CREATE TABLE tipofamiliar(


idtipofamiliar int IDENTITY(1,1) NOT NULL,
nomtipo varchar(80) NOT NULL
)
GO

-- LLAVES PRIMARIAS

ALTER TABLE DBO.datospersonales


ADD PRIMARY KEY NONCLUSTERED (iddatospersonales)

ALTER TABLE DBO.distrito


ADD PRIMARY KEY NONCLUSTERED (idDistrito)

ALTER TABLE DBO.provincia


ADD PRIMARY KEY NONCLUSTERED (idProvincia)

ALTER TABLE DBO.departamento


ADD PRIMARY KEY NONCLUSTERED (idDepartamento)

ALTER TABLE DBO.personal


ADD PRIMARY KEY NONCLUSTERED (idPersonal)

ALTER TABLE DBO.documentoidentidad


ADD PRIMARY KEY NONCLUSTERED (iddocumentoidentidad)

ALTER TABLE DBO.otrosdatosidentificacion


ADD PRIMARY KEY NONCLUSTERED (idotrosdatosidentif)

ALTER TABLE DBO.personafamiliar


ADD PRIMARY KEY NONCLUSTERED (idPersonafamiliar)

ALTER TABLE DBO.Datosfamiliares


ADD PRIMARY KEY NONCLUSTERED (idDatosfamiliares)

ALTER TABLE DBO.tipofamiliar


ADD PRIMARY KEY NONCLUSTERED (idtipofamiliar)

-- LLAVES FORANEAS

ALTER TABLE DBO.provincia


ADD FOREIGN KEY (idDepartamento) REFERENCES departamento

ALTER TABLE DBO.distrito


ADD FOREIGN KEY (idProvincia) REFERENCES provincia

ALTER TABLE DBO.datospersonales


ADD FOREIGN KEY (idDistrito) REFERENCES distrito

ALTER TABLE DBO.otrosdatosidentificacion


ADD FOREIGN KEY (idDatospersonales) REFERENCES datospersonales
Manual De Base De Datos Con SQL-Server 191

ALTER TABLE DBO.datospersonales


ADD FOREIGN KEY (idDocumentoidentidad)
REFERENCES documentoidentidad

ALTER TABLE DBO.datospersonales


ADD FOREIGN KEY (idPersonal) REFERENCES personal

ALTER TABLE DBO.datosFamiliares


ADD FOREIGN KEY (idPersonal) REFERENCES personal

ALTER TABLE DBO.datosFamiliares


ADD FOREIGN KEY (idtipofamiliar) REFERENCES tipofamiliar

ALTER TABLE DBO.datosFamiliares


ADD FOREIGN KEY (idpersonafamiliar) REFERENCES personafamiliar

EJERCICIOS PROPUESTOS:

1. Desarrollar una consulta, que permita crear la base de datos “LEGAJOS_CSJAN_E1” con valores
estándar.

2. Desarrollar una consulta, que permita crear la tabla PERSONAFAMILIAR dentro de la base de datos
“LEGAJOS_CSJAN_E1”.

3. Desarrollar una consulta, que me permita mostrar un mensaje al usuario (“SE INSERTO
CORRECTAMENTE”) al momento de realizar una inserción a la tabla PERSONAFAMILIAR, usar
TRIGGER.

4. Desarrollar una consulta, que me permita mostrar un mensaje al usuario (“SE ACTUALIZO
CORRECTAMENTE”) al momento de realizar una actualización de los registros de la tabla
PERSONAFAMILIAR, usar TRIGGER.

5. Desarrollar una consulta, que me permita contar la cantidad de registros de la tabla


PERSONAFAMILIAR mediante un procedimiento almacenado.

6. Desarrollar una consulta, que me permita contar la cantidad de registros de la tabla


PERSONAFAMILIAR de un determinado sexo mediante una función.

7. Desarrollar una consulta, que me permita mostrar los registros contenidos de la tabla
PERSONAFAMILIAR (Apellidos y Nombres, Fecha de Nacimiento y Sexo). Usar Vistas.
Manual De Base De Datos Con SQL-Server 192

8. Desarrollar una consulta, que permita crear la Base de Datos “LEGAJOS_CSJAN_P1” ubicado en la
carpeta D:\BASE_LEGAJOS_CSJAN especificando un archivo primario con tamaño inicial de 10MB,
un tamaño máximo de 40MB y un crecimiento de 10MB, además el archivo de transacciones debe tener
un tamaño inicial de 5MB y como máximo 10MB a una tasa de crecimiento de 20%.
9. Desarrollar una consulta, que permita crear la Base de Dato “LEGAJOS_CSJAN_P2” ubicado en la
carpeta D:\BASE_LEGAJOS_CSJAN con la siguiente configuración:
 ARCHIVO DE DATOS: Un tamaño inicial de 15MB, máximo de 30MB y un factor de crecimiento
de 2MB.
 ARCHIVO SECUNDARIO: Un tamaño inicial de 5MB, máximo de 35MB y un factor de
crecimiento de 7%.
 ARCHIVO DE TRANSACCIONES: Un tamaño inicial de 2MB, máximo de 10MB y un factor de
crecimiento de 2%.

10. Desarrollar una consulta, que permita crear la Base de Datos “LEGAJOS_CSJAN_P3” ubicado en la
carpeta D:\BASE_LEGAJOS_CSJAN con la siguiente configuración:
 ARCHIVO DE DATOS: Un tamaño inicial de 10MB, máximo de 40MB y un factor de crecimiento
de 5MB.
 ARCHIVO SECUNDARIO1: Un tamaño inicial de 5MB, máximo de 30MB y un factor de
crecimiento de 1%.
 ARCHIVO SECUNDARIO2: Un tamaño inicial de 10MB, máximo de 50MB y un factor de
crecimiento de 10%.
 ARCHIVO DE TRANSACCIONES: Un tamaño inicial de 4MB, máximo de 15MB y un factor de
crecimiento de 3%.

11. Desarrollar una consulta, que permita crear la Base de Datos “LEGAJOS_CSJAN_P4” ubicado en la
carpeta D:\BASE_LEGAJOS_CSJAN con la siguiente configuración.
 ARCHIVO DE DATOS: Un tamaño inicial de 10MB, máximo de 80MB y un factor de crecimiento
de 5MB.
 ARCHIVO SECUNDARIO: Un tamaño inicial de 5MB, máximo de 50MB y un factor de
crecimiento de 5%.
 ARCHIVO DE TRANSACCIONES: Un tamaño inicial de 6MB, máximo de 60MB y un factor de
crecimiento de 10%.

12. Realizar una copia de la Base de Datos “LEGAJOS_CSJAN_P4” usando las cuatro maneras de adjuntar
y separar una Base de Datos.
Manual De Base De Datos Con SQL-Server 193

13. Desarrollar una consulta de implementación de esquemas sobre la Base de datos


“LEGAJOS_CSJAN_PROPUESTOS”.

14. Desarrollar del ejercicio anterior, crear las tablas haciendo referencia a los esquemas que usted creo por
su criterio.
15. Desarrollar una consulta que permita añadir la restricción UNIQUE a la columna NOMTIPO de la tabla
TIPOFAMILIAR, es decir solo permita registrar el tipo de familiar sin repetirse. (utilizar alter)

16. Implementar una consulta que permita restringir el campo ruc de la tabla
OTROSDATOSIDENTIFICACION, de tal manera que solo permita ingresar números (0-9) y con una
longitud igual a 11.

17. Implementar una consulta que permita añadir la restricción a la columna FECHANACIO de la tabla
DATOSPERSONALES en donde solo permitirá registrar fechas de resoluciones menores al día actual.

18. Desarrollar una consulta que permita registrar a la tabla Departamento, Provincia, Distrito usando la
versión simple de la instrucción o comando INSERT de la base de datos
“LEGAJOS_CSJAN_PROPUESTOS”.

19. Desarrollar una consulta que permita registrar a las tablas, Tipo Familiar, persona familiar, datos
familiares, personal de la base de datos “LEGAJOS_CSJAN_PROPUESTOS” aplicando el registro
múltiple de filas (criterio de por lo menos "n" filas).

20. Desarrollar una consulta que permita registrara las tablas documento Identidad, Datos personales (haber
realizado los 2 ejercicios anteriores), aplicando un orden personalizado de las columnas.

21. Desarrollar una consulta que permita ingresar solo el tipo documento en la tabla documento identidad.

22. Desarrollar una consulta que permita crear una vista y mediante ellos insertar a la tabla “otros datos
identificación”.

23. Desarrollar una consulta que permita registrar los 5 primeros “persona familiar” a una tabla llamada
PERSONAFAMILIAR_TEMP (La tabla será definida por el usuario).

24. Desarrollar una consulta que crear una tabla temporal para Distrito e ingresar los que tengan la letra “a”
al final.
Manual De Base De Datos Con SQL-Server 194

25. Desarrollar una consulta que permita registrar los tipos de documento de identidad de la tabla documento
identidad a una nueva tabla temporal llamada MISTIPODOCUMENTOIDENTIDAD, usar la
instrucción WITH.

26. Desarrollar una consulta que permita asignar a la columna situación “ALTA” sólo al registro cuya Id
personal lo especifique usted.
27. Desarrollar una consulta que actualicé la situación en el campo personal que sea de número de documento
de identidad que decida. Todo esto deberá ser realizado en la tabla Personal. Usar sub consultas.

28. Desarrollar una consulta que permita eliminar todos los registros de la tabla
PERSONAFAMILIAR_TEMP (haber realizado el ejercicio 23).

29. Desarrollar una consulta que permita eliminar los registros de los DISTRITOS cuyo PROVINCIA sean
“CHACHAPOYAS”. Usando sub consultas para el proceso.

30. Desarrollar una consulta que permita eliminar el 5% de los registros de la tabla DISTRITO cuya
PROVINCIA sea " POMABAMBA ", usar sub consultas para el proceso y el operador OUTPUT.

31. Desarrollar una consulta, que permita mostrar los Apellidos y Nombres registrados de la tabla
PERSONAFAMILIAR sin repetirlos, use la cláusula DISTINCT.

32. Desarrollar una consulta, que permita mostrar los registros de la tabla PERSONAFAMILIAR ordenados
por su Apellidos y Nombres en forma ascendente, usar la cláusula ORDER BY.

33. Desarrollar una consulta, que permita mostrar los 10 primeros registros de la tabla
PERSONAFAMILIAR, usar la cláusula TOP.

34. Desarrollar una consulta, que permita mostrar los 10 últimos registros de la tabla
PERSONAFAMILIAR, usar la cláusula TOP y ORDER BY.

35. Desarrollar una consulta, que permita mostrar el 10% de los registros de la tabla PERSONAFAMILIAR,
use la cláusula TOP PERCENT.

36. Desarrollar una consulta, que permita replicar los registros de la tabla PERSONAFAMILIAR en una
nueva tabla llamada MIPERSONAFAMILIAR, use la cláusula INTO.

37. Desarrollar una consulta, que permita mostrar los registros de la tabla PERSONAFAMILIAR y
DATOSFAMILIARES combinados.
Manual De Base De Datos Con SQL-Server 195

38. Desarrollar una consulta, que permita mostrar los registros de la tabla DATOSPERSONALES cuyo
DISTRITO sea “HUARAZ”, usar sub consultas en la cláusula FROM.

39. Desarrollar una consulta que permita combinar las tablas Persona familiar, tipo familiar, personal. Usar
INNER JOIN
40. Desarrollar una consulta que permita mostrar todos los registros de la tabla Departamento, Provincia y
Distrito. Usar LEFT JOIN

41. Desarrollar una consulta que permita mostrar la tabla DATOSPERSONALES y la tabla
OTROSDATOSIDENTIFICACION de forma que se aplique un producto cartesiano entre sus filas.

42. Desarrollar una consulta que permita insertar un nuevo registro a la tabla Datos Personales, en el caso
que el usuario registre duplicidad de Apellido paterno Y Apellido materno deberá mostrar un mensaje
“LOS APELLIDOS YA ESTA REGISTRADO”, caso contrario insertar dicho registro y mostrar un
mensaje “APELLIDOS REGISTRADOS CORRECTAMENTE”.

43. Implementar una consulta que permita mostrar el mensaje de “NO HAY DATOS PERSONALES CON
UBICACIÓN DE DISTRITO”, cuando el total de Datos personales asignados a un determinado Distritos
no tenga registros en la tabla anterior. En lo contrario determinar cuántos Datos personales tiene dicho
Distrito con el mensaje “EL DISTRITO… TIENE … DATOSPERSONALES”.

44. Desarrollar una consulta que permita mostrar la fecha de nacimiento en la tabla PERSONAFAMILIAR
de esta manera si fuera 2017-05-27 se adiciona una columna a la consulta para mostrar 27 de mayo de
2017.

45. Desarrollar una consulta que permita mostrar los N últimos registros de la tabla PERSONAFAMILIAR
condicionando que las fechas de nacimiento sean las más actuales posibles.

46. Desarrollar una consulta que permita mostrar los registros de la tabla PROVINCIA paginados de 7 en 7.

47. Desarrollar una consulta que muestre el valor devuelto por la función de control de errores a partir de una
división sin resultado como 100/0.

48. Desarrollar una consulta donde inserte datos a la tabla TIPOFAMILIAR, controlando los posibles
errores usando el bloque TRY CATCH.
Manual De Base De Datos Con SQL-Server 196

49. Desarrollar un cursor donde se imprima el primer registro de la tabla


OTROSDATOSIDENTIFIACION.

50. Desarrollar un cursor donde se genere un reporte a los registros de la tabla


OTROSDATOSIDENTIFICACION, incluir el nombre y apellido de la tabla DATOSPERSONALES.

51. Desarrollar una consulta, que permita mostrar un mensaje de información al realizar la inserción o
actualización de tabla PERSONAFAMILIAR, usar funciones.

52. Desarrollar una consulta, que permita mostrar el total de registros de la tabla DATOSPERSONALES de
un determinado DISTRITO ingresado por el usuario, usar funciones.

53. Desarrollar una consulta, que permita implementar la función de tabla en línea mostrando los registros de
la tabla DATOSPERSONALES.

54. Desarrollar una consulta, que permita implementar la función tabla multisentencia mostrando los registros
de la tabla DATOSPERSONALES adicionando el documento de identidad de la tabla
DOCUMENTOIDENTIDAD.

55. Desarrollar una consulta, que permita mostrar los registros de la tabla PERSONAFAMILIAR (Apellidos
y Nombres, sexo, fecha de nacimiento), usar procedimientos almacenados.

56. Desarrollar una consulta, que permita mostrar los registros de la tabla PERSONAFAMILIAR
considerando como el parámetro de entrada los apellidos y nombres, e implementar un mensaje de error
en caso que los datos no existan.

57. Desarrollar una consulta, que permita crear un procedimiento almacenado, el cual deberá mostrar un
reporte de la tabla PERSONAFAMILIAR por medio de un cursor.

58. Desarrollar una consulta, que permita crear un procedimiento almacenado, el cual deberá mostrar un
reporte de la tabla PERSONAFAMILIAR por medio de un cursor, considere que solo se deben de
mostrar los registros de la tabla PERSONAFAMILIAR de un determinado tipo de documento de
identidad.

59. Desarrollar una consulta, que permita crear un procedimiento almacenado a la tabla
PERSONAFAMILIAR controlando la inserción por medio de una transacción, emitiendo un mensaje
en cada inserción, si todo es correcto mostrar el siguiente mensaje “Los datos se Registraron
correctamente” en caso contrario un mensaje de error.
Manual De Base De Datos Con SQL-Server 197

60. Desarrollar una consulta, que permita crear un procedimiento almacenado a la tabla
PERSONAFAMILIAR, deberá de registrar los datos de la tabla PERSONAFAMILIAR y a la vez
actualizar los datos de la tabla DOCUMENTOIDENTIDAD.

61. Desarrollar un trigger que permita indicar un mensaje cada vez que se inserte o actualiza un registro de
la tabla DATOFAMILIARES.

62. Desarrollar un trigger que permita indicar un mensaje cada vez que se inserte un registro de la tabla
DATOPERSONALES.
BIBLIOGRAFÍA
Manual De Base De Datos Con SQL-Server 198

 Microsoft. INSERT - SQL (Comando). En: https://msdn.microsoft.com/es-


es/library/cc450996(v=vs.71).aspx
 Microsoft. UPDATE - SQL (Comando). En: https://msdn.microsoft.com/es-
es/library/cc451240(v=vs.71).aspx
 Microsoft. DELETE - SQL (Comando). En: https://msdn.microsoft.com/es-
es/library/cc467106(v=vs.71).aspx
 Microsoft. SELECT - SQL (Comando). En: https://msdn.microsoft.com/es-
es/library/cc467240(v=vs.71).aspx
 Microsoft. Operadores (Transact-SQL). En: https://msdn.microsoft.com/es-
es/library/ms174986.aspx.
 Microsoft. IF...ELSE (Transact-SQL). En https://msdn.microsoft.com/es-
pe/library/ms182717.aspx
 Campus MVP. (2015). Fundamentos de SQL: Consultas SELECT multi-tabla - Tipos de JOIN. En:
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-
Tipos-de-JOIN.aspx
 djK. (2005). Consultas combinadas. JOINS. 22/10/2005. En:
http://www.devjoker.com/contenidos/articulos/17/Consultas-combinadas-JOINS.aspx
 Microsoft. Funciones de agregado (Transact-SQL). En: https://msdn.microsoft.com/es-
pe/library/ms173454.aspx
 Microsoft. UNION (Transact-SQL). En: https://msdn.microsoft.com/en-us/library/ms180026.aspx
 Microsoft. CAST y CONVERT (Transact-SQL). En: https://msdn.microsoft.com/es-
pe/library/ms187928.aspx
 Microsoft. WHILE (Transact-SQL). En: https://msdn.microsoft.com/en-us/library/ms178642.aspx
 Microsoft. TRY...CATCH (Transact-SQL). En: https://msdn.microsoft.com/en-
us/library/ms175976.aspx
 Microsoft. @@ERROR (Transact-SQL). En: https://msdn.microsoft.com/es-
pe/library/ms188790.aspx
 Microsoft. EXECUTE (Transact-SQL). En: https://msdn.microsoft.com/es-
es/library/ms188332.aspx
 Microsoft. CREATE TRIGGER (Transact-SQL). En: https://msdn.microsoft.com/en-
us/library/ms189799.aspx
 Francisco Charte Ojeda. (2004). “Microsoft SQL Server 2000. Introducción a Transact SQL.”
Ediciones Anaya Multimedia, Tercera impresión.
 Francisco Charte Ojeda. (2005). “Microsoft SQL Server 2000. Aplicaciones de Transact-SQL.”
Ediciones Anaya Multimedia, Tercera impresión

You might also like