You are on page 1of 181

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

SSSSS

AUTOR2

SSSSS
AGRADECIMIENTOS
Manual De Base De Datos Con SQL-Server iii

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

Introducción…
Manual De Base De Datos Con SQL-Server ÍNDICE v

Items Página
Capítulo 1: Herramienta CASE CA ERWIN DATA MODELER ............................................................1
1.1. Definición, características y versiones .............................................................................................2
1.2. Requisitos e Instalación ....................................................................................................................3
1.3. Creación De Un Modelo De Base De Batos .....................................................................................9
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 ..........................................................................................67
4.8. Esquemas En SQL Server...............................................................................................................73
4.9. Tipo De Datos En SQL Server .......................................................................................................75
4.10. Tipo De Datos Definidos Por El Usuario ...................................................................................77
4.11. Propiedades De Los Atributos ....................................................................................................79
4.12. El Objeto Tabla...........................................................................................................................80
4.13. Manejo de tablas con Esquemas .................................................................................................81
4.14. Restricciones De Tipo: Unique, Check, Default ........................................................................83
4.15. Generación De Esquemas, Caso Propuesto: Gestión De Legajos ..............................................86
Capítulo 5: Lenguaje de Manipulación de Datos (LMD)..........................................................................87
5.1. Definiciones Previas .......................................................................................................................88
5.2. Comando INSERT INTO ...............................................................................................................89
Manual De Base De Datos Con SQL-Server vi

5.3. Comando UPDATE ........................................................................................................................97


5.4. Comando DELETE ........................................................................................................................99
5.5. Formas de uso del comando SELECT ..........................................................................................102
5.6. Operadores en SQL Server ...........................................................................................................113
5.7. Comandos de tipo JOIN ...............................................................................................................119
Capítulo 6: Transact SQL..........................................................................................................................123
6.1. Definiciones previas. ....................................................................................................................124
6.2. Funciones CAST y CONVERT ....................................................................................................125
6.3. Estructuras de Control Selectivas .................................................................................................127
6.4. Estructuras de Control Repetitivas ...............................................................................................133
6.5. Manejo de errores en Transac SQL ..............................................................................................135
6.6. Manejo de Cursores ......................................................................................................................137
6.7. Funciones......................................................................................................................................139
6.8. Manejo de Procedimientos Almacenados.....................................................................................153
6.9. Comando EXECUTE ...................................................................................................................157
6.10. Procedimientos Almacenados definidas por el usuario ............................................................158
6.11. Procedimiento almacenados y Cursores ...................................................................................161
6.12. Manejo de Transacciones .........................................................................................................163
6.13. Manejo de TRIGGERS .............................................................................................................167
Capítulo 7: Ejercicios Propuestos .............................................................................................................171
BIBLIOGRAFÍA ............................................................................................................................................172
RESUMEN
Manual De Base De Datos Con SQL-Server vii

jkbkuku
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

 Definición, características y versiones

 Requisitos e Instalación

 Creación De Un Modelo De Base De Batos

DDDD  Vistas de una base de datos


Manual De Base De Datos Con SQL-Server 2

1.1. Definición, características y versiones

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.

C. Versiones

VERSION AÑO DE NOMBRE DEL


LANZAMIENTO PROYECTO
4.1.4 2008
Manual De Base De Datos Con SQL-Server 3

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.

 Inicialización del instalador.


Manual De Base De Datos Con SQL-Server 4

 Leer el contrato y términos de uso hasta el final para poder dar click en “I agree”.

 Ingresar parámetros y dar click en Next


Manual De Base De Datos Con SQL-Server 5

 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 6
Manual De Base De Datos Con SQL-Server 7
Manual De Base De Datos Con SQL-Server 8

 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 9

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

 Área de trabajo (modelado)


Manual De Base De Datos Con SQL-Server 10

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 11

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 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.
Manual De Base De Datos Con SQL-Server 14

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


Designator (muestra el identificador o clave primaria).

 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.
Manual De Base De Datos Con SQL-Server 15

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

 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.


Manual De Base De Datos Con SQL-Server 16

 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.

 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

 Definición, Propiedades Y Versiones


 Requisitos Para La Instalación
 Instalación y Acceso
 Configuración Del Entorno De Trabajo
DDDD
 Conexión de CA ERWIN DATA
MODELER con SQL Server
 Crear La Base De Datos En SQL Server
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

 Definición Previas
 Sentencia CREATE
 Sentencia ALTER
 Sentencia DROP
DDDD
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 DE 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 DE 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
 Objetivos De Una Base De Datos
 Bases De Datos En SQL Server
 Estructura De Una Base De Datos
 Creación De Una Base De Datos
 Caso Práctico: Gestión De Legajos
 Adjuntar Y Separa Una Base De Datos
DDDD
 Esquemas En SQL Server
 Tipo De Datos En SQL Server
 Tipo De Datos Definidos Por El Usuario
 Propiedades De Los Atributos
 El Objeto Tabla
 Manejo de tablas con Esquemas
 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

hdbhcdh

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.
Manual De Base De Datos Con SQL-Server 68

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).

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 69

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
Manual De Base De Datos Con SQL-Server 70

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:

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 71

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


Manual De Base De Datos Con SQL-Server 72

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


Manual De Base De Datos Con SQL-Server 73

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
Manual De Base De Datos Con SQL-Server 74

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

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


Manual De Base De Datos Con SQL-Server 75

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
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
Manual De Base De Datos Con SQL-Server 76

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
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
Manual De Base De Datos Con SQL-Server 77

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
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.
Manual De Base De Datos Con SQL-Server 78

Sintaxis de creación:

CREANDO UN TIPO DEFINIDO


SP_ADDTYPE
SP_ADDTYPE NOMBRE TIPO, 'TIPO_DATOS','RESTRICCION'
GO

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ÓND E UN TIPO DEFINIDO


SP_DROPTYPE
SP_DROPTYPE 'NOMBRE_TIPO'
GO

CASO DESARROLLADO 20: 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
Manual De Base De Datos Con SQL-Server 79

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

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 80

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
Manual De Base De Datos Con SQL-Server 81

4.13. Manejo de tablas con Esquemas

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


Base de datos LEGAJOS_CSJAN5

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
Manual De Base De Datos Con SQL-Server 82

CASO DESARROLLADO 22: 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,
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)
)
Manual De Base De Datos Con SQL-Server 83

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

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 23: 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
Manual De Base De Datos Con SQL-Server 84

-- 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


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 24: 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
Manual De Base De Datos Con SQL-Server 85

-- 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 25: 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

-- 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’)
Manual De Base De Datos Con SQL-Server 86

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

Rrr
Manual De Base De Datos Con SQL-Server 87

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

Capítulo

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

 Definiciones Previas
 Comando INSERT INTO
 Comando UPDATE
DDDD  Comando DELETE
 Formas de uso del comando SELECT
 Operadores en SQL Server
 Comandos de tipo JOIN
Manual De Base De Datos Con SQL-Server 88

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 89

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 26: 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')

INSERT INTO departamento (idDepartamento,mondepart)


VALUES ('02','ANCASH')
Manual De Base De Datos Con SQL-Server 90

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 27: 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 91

CASO DESARROLLADO 28: 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 29: 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
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


Manual De Base De Datos Con SQL-Server 92

ADD PRIMARY KEY NONCLUSTERED (IDPERSONAL)


GO

--ALTER PARA QUE SEA ALTA O OBAJA


ALTER TABLE PERSONAL_TEMP
ADD CONSTRAINT SITAC CHECK (SITUACION>='ALTA' OR
SITUACION='BAJA')
GO
--INSERTANDO

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


GO

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


GO

CASO DESARROLLADO 30: 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 93

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

INSERCCION 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 32: 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 94

-- 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 33: Implementar una tabla temporal para personal e ingresar solo los
que tenga en Idepersonal “AC”

INSERCCION 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 95

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 34: 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 96

CASO DESARROLLADO 35: 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 97

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 36: 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 98

CASO DESARROLLADO 37: 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 38: 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 99

CASO DESARROLLADO 39: 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 PRO 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 100

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 40: 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 41: 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 101

-- ELIMINANDO LOS REGISTROS MEDIANTE SUBCONSULTAS

DELETE FROM provincia


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

CASO DESARROLLADO 42: 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 43: 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 102

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 103

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 104

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 105

 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 106

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 107

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


SELECT idDistrito AS 'IDDISTRITO',
idProvincia AS 'IDPROVINCIA',
nomdistrit AS 'DISTRITO'
Manual De Base De Datos Con SQL-Server 108

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 44: 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 45: 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 109

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 46: 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 47: 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 110

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 48: 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 49: 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 111

-- USO DE LA CLAUSULA TOP PERCENT

SELECT TOP 20 PERCENT *


FROM provincia
ORDER BY nomprovin ASC

CASO DESARROLLADO 50: 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 51: 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 112

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

CASO DESARROLLADO 52: 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 113

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 53: 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 114

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 54: 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 115

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 55: 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 116

CASO DESARROLLADO 56: 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 57: 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 117

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 118

_ 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 58: 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 119

CASO DESARROLLADO 59: 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>

LEFT JOIN <nombreTabla1>


ON <nombreTabla2>
Manual De Base De Datos Con SQL-Server 120

RIGHT JOIN <nombreTabla1>


ON <nombreTabla2>

FULL JOIN <nombreTabla1>


ON <nombreTabla2>

CROSS JOIN <nombreTabla>

CASO DESARROLLADO 60: 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 61: 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 121

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 62: 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 122

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 63: 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 123

Capítulo 6: Transact SQL

Capítulo

6
Transact SQL
CAPACIDAD CONTENIDO

 Definiciones previas.
 Funciones CAST y CONVERT
 Estructuras de Control Selectivas
 Estructuras de Control Repetitivas
 Manejo de errores en Transact SQL
 Manejo de Cursores
DDDD
 Funciones
 Manejo de Procedimientos Almacenados
 Comando EXECUTE
 Procedimientos Almacenados definidas por el usuario
 Procedimiento almacenados y Cursores
 Manejo de Transacciones
 Manejo de TRIGGERS
Manual De Base De Datos Con SQL-Server 124

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 125

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 64: Contamos con un monto almacenado en una variable local
@TOTAL de 150.50 soles y necesitamos mostrar al usuario por medio de la función PRINT.

PRIMERA IMPLEMENTACION SIN CONVERSION

-- PRIMERA IMPLEMENTACION SIN CONVERSION

DECLARE @TOTAL MONEY


SET @TOTAL=150.50
PRINT 'EL TOTAL INGRESADO ES: '+ @TOTAL
Manual De Base De Datos Con SQL-Server 126

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 127

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 128

<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 65: 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 129

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 66: 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 130

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 131

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 132

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 67: 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 133

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 134

CASO DESARROLLADO 68: 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 69: 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 135

ELSE
BEGIN
SET @NUM+=1
CONTINUE
END
END

--3. IMAGEN.

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.
Manual De Base De Datos Con SQL-Server 136

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.

CASO DESARROLLADO 70: 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 71: Implementar una consulta a la tabla PERSONAL, controlando los
posibles errores usando el bloque TRY CATCH
Manual De Base De Datos Con SQL-Server 137

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

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
Manual De Base De Datos Con SQL-Server 138

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

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


Manual De Base De Datos Con SQL-Server 139

CASO DESARROLLADO 72: 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

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
Manual De Base De Datos Con SQL-Server 140

 OPENQUERY
 OPENXML
Funciones de agregado Operan sobre una colección de valores y devuelven un solo
valor de resumen.
 AVG
 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
Manual De Base De Datos Con SQL-Server 141

 @@LOCK_TIMEOUT
 @@SPID
 @@MAX_CONNECTIONS
 @@TEXTSIZE
 @@MAX_PRECISION
 @@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
Manual De Base De Datos Con SQL-Server 142

 DATETIMEFROMPARTS
 DATETIMEOFFSETFROMPARTS
 SMALLDATETIMEFROMPARTS
 TIMEFROMPARTS
Funciones que obtienen la fecha y hora de diferencia
 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
Manual De Base De Datos Con SQL-Server 143

 FLOOR
 INICIO DE SESIÓN
 ATAN
 REGISTRO
 SENO
 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
Manual De Base De Datos Con SQL-Server 144

 PARSENAME
 FILE_ID
 SCHEMA_ID
 FILE_IDEX
 SCHEMA_NAME
 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 )
Manual De Base De Datos Con SQL-Server 145

 SUSER_NAME ( TRANSACT-SQL )
 IS_SRVROLEMEMBER ( TRANSACT-SQL )
 USER_ID ( TRANSACT-SQL )
 ORIGINAL_LOGIN ( TRANSACT-SQL )
 USER_NAME ( TRANSACT-SQL )
 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
Manual De Base De Datos Con SQL-Server 146

Funciones del sistema Realizan operaciones y devuelven información acerca de


valores, objetos y configuraciones de una instancia de SQL
Server.
 $PARTITION
 ERROR_PROCEDURE
 @@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
Manual De Base De Datos Con SQL-Server 147

 @@PACK_RECEIVED
 @@CPU_BUSY
 @@PACK_SENT
 fn_virtualfilestats
 @@TIMETICKS
 @@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).
Manual De Base De Datos Con SQL-Server 148

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
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
Manual De Base De Datos Con SQL-Server 149

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.

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 73: Desarrollar 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))
Manual De Base De Datos Con SQL-Server 150

GO

CASO DESARROLLADO 74: Desarrollar 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 75: Desarrollar 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
Manual De Base De Datos Con SQL-Server 151

SET @FACTOR = @NUM * DBO.FACTORIAL(@NUM-1)


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 76: Desarrollar 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


Manual De Base De Datos Con SQL-Server 152

SELECT * FROM DBO.MISDISTRITOS()


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 77: Desarrolla 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 153

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
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
Manual De Base De Datos Con SQL-Server 154

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_assembly_dependencies_rowset
 sp_assemblies_rowset_rmt  sp_assembly_dependencies_rowset_r
 sp_assemblies_rowset2 mt
Manual De Base De Datos Con SQL-Server 1
5
5

 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
 sp_ddopen;10  sp_primary_keys_rowset
 sp_ddopen;11  sp_primary_keys_rowset;2
 sp_ddopen;12  sp_primary_keys_rowset;3
 sp_ddopen;13  sp_primary_keys_rowset;5
Manual De Base De Datos Con SQL-Server 1
5
6

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

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 158

-- 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 PRO 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 159

CASO DESARROLLADO 78: 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 79: 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 160

--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 80: 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 161

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.

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 162

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 81: 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)+
@NOMPRO
FETCH MICURSOR INTO @IDPRO,@IDDEPAR,@NOMPRO
Manual De Base De Datos Con SQL-Server 163

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
o revierte una transacción de ámbito de lote cuando se completa el lote, SQL Server la
revierte automáticamente.
Manual De Base De Datos Con SQL-Server 164

MANEJO DE TRANSACCIONES (SINTAXIS)

-- SINTAXIS
BEGIN [TRAN|TRANSACTION] NOMBRE_TRANSACTION
COMMIT TRAN NOMBRE_TRANSACCION
ROLLBACK TRAN NOMBRE_TRANSACCION

CASO DESARROLLADO 82: 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

EXEC NUEVAPROVINCIA '2620','EJEMPLOPROV','CUSCO'


Manual De Base De Datos Con SQL-Server 165

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

EXEC NUEVAPROVINCIA '2620','EJEMPLOPROV','CUSCO'


Manual De Base De Datos Con SQL-Server 166

CASO DESARROLLADO 83: 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

-- EJECUTANDO EL PROCEDIMIENTO ALMACENADO REGISTRARPROVINCIA


Manual De Base De Datos Con SQL-Server 167

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 168

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 169

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 84: 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 170

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 85: 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 171

Capítulo 7: Ejercicios Propuestos

Capítulo

7
Ejercicios
Propuestos
CAPACIDAD CONTENIDO

DDDD DDDD
Manual De Base De Datos Con SQL-Server 172

hjvjh
BIBLIOGRAFÍA
Manual De Base De Datos Con SQL-Server 173

You might also like