CESAR P
Consultor Especiali
DEDICATORIA
Un da vi pasar tan rpido las cosas alrededor de mi, tanto
fue que no pude darme cuenta lo hermoso de los das tan
valiosos que estuve perdiendo y no pude estar mas cerca de
EL, es por esto dedico este libro a La Gran Misericordia de
DIOS por darme una linda familia Y una Hija Bendita, unos
Padres Maravillosos y una Hermanita quienes estuvieron
siempre a mi lado en los momentos difciles y por todas las
Bendiciones que da a da ha puesto en mis caminos.
Da a da ha sido para mi incontables poder editar este libro
pero aprendi que DIOS tiene un propsito con cada uno de
nosotros, aun cuando para uno no fuese lo que uno quisiera,
pero DIOS sabe en que momento se hacen las cosas cuando
se las entregamos a EL.
El Plan que yo tengo para tu futuro esta lleno de esperanza
Jeremias 29:11
Si me buscas con todo tu corazn me encontraras
Deuteronomio 4:29
Dentro de mi experiencia
siete aos he dictado cu
Macros, as como entorno
registros en los lenguajes d
Asimismo he vendio desa
manuales de ayuda para el
operador y usuario pueda
como : Manual de Bolsi
Conexiones, Manual de Ay
Bolsillo de EXCEL Avanza
Servidores WINDOWS SERV
INTR
Microsoft SQL Ser
herramientas grficas y utilidades
OPERADORs, programadores y adm
Agradecimientos:
Sobre todo doy Gracias al DIOS ALTISIMO y
Dedico este libro A todos aquellos quienes
Estn conmigo apoyndome dia a dia
Lopez
El lenguaje de consu
datos normalizado, utilizado por los di
determinadas operaciones sobre los
como sucede con cualquier sistema
de hecho, cada motor de bases de da
otro motor, por lo tanto, el lenguaj
resolver todos los problemas, aunqu
escrita en ANSI ser interpretable por
SQL Server 2008 Da
Server 2008) de Microsoft es el serv
datos. El Database Engine (Motor de
procesamiento de transacciones r
aplicaciones consumidoras de datos m
(Motor de base de datos) tambin pr
una alta disponibilidad.
Microsoft SQL Server consolida la administracin de servidores y la
creacin de objetos comerciales en dos entornos integrados: SQL Server Management
Studio y Business Intelligence Development Studio. Ambos entornos utilizan soluciones
y proyectos para fines de administracin y organizacin. Adems, ambos ofrecen una
funcionalidad de control de cdigo fuente totalmente integrada (si hay un proveedor de
control de cdigo fuente como Microsoft Visual SourceSafe instalado).
Aunque ambos entornos de estudio usan los contenedores y los elementos visuales
establecidos en Microsoft Visual Studio 2005, (por ejemplo, proyectos, soluciones,
Explorador de soluciones y Cuadro de herramientas) estos entornos no forman parte,
por s mismos, de Visual Studio 2005. En su lugar, los entornos de estudio incluidos con
SQL Server son entornos independientes que estn diseados para programadores de
aplicaciones empresariales que funcionan con SQL Server, SQL Server Compact 3.5
SP1, Analysis Services, Integration Servicesy Reporting Services. No es posible utilizar
estas herramientas para crear aplicaciones personalizadas o acometer grandes
proyectos de desarrollo.
SQL Server Management Studio
SQL Server Management Studio es un entorno integrado para obtener acceso a todos
los componentes de SQL Server, as como para configurarlos y administrarlos. SQL
Server Management Studio combina un amplio grupo de herramientas grficas con un
editor de texto enriquecido para ofrecer acceso a SQL Server a los programadores y
administradores, sin importar su nivel de especializacin.
SQL Server Management Studio combina las funciones del Administrador corporativo y
el Analizador de consultas, herramientas incluidas en versiones anteriores de SQL
Server, en un nico entorno. Adems, SQL Server Management Studio proporciona un
entorno para administrar Analysis Services, Integration Services, Reporting Services y
XQuery. Este entorno ofrece a los programadores una experiencia familiar y proporciona
a los administradores de bases de datos una herramienta nica para realizar sus tareas
con la facilidad de las herramientas grficas y una experiencia de Scripts enriquecida.
Business Intelligence Development Studio
Business Intelligence Development Studio es un entorno integrado para desarrollar
construcciones de inteligencia empresarial, como cubos, orgenes de datos, informes y
paquetes de Integration Services. Business Intelligence Development Studio incluye
plantillas de proyecto que proporcionan un contexto para desarrollar construcciones
especficas. Por ejemplo, se puede optar por un proyecto de Analysis Services si el
objetivo es crear una base de da
dimensiones o modelos de minera de
En Business Intelligence Developm
formen parte de una solucin indep
puede incluir un proyecto de Analysis
Services en la misma solucin. Puede
para probarlos durante el desarrollo
proyectos en uno o ms servidores de
Soluciones, proyectos y elem
Tanto SQL Server Management Stud
proporcionan proyectos que se organ
se guardan como Scripts de SQL Ser
3.5 SP1. Los proyectos de Business
proyectos de Analysis Services, de
deben abrirse en la misma herramien
Elegir entre SQL Serve
Intelligence Development Stu
SQL Server Management Studio est
base de datos y para administrar y c
Business Intelligence Development S
de Business Intelligence. Si est imp
bases de datos de SQL Server o si es
SQL Server, Analysis Services, Integ
SQL Server Management Studio. Si e
Services, Integration Services o Rep
Development Studio.
Parte del estudio recopilado del porta
una fuente de ayuda web.
http://technet.microsof
CARACTERISTICAS DE SQL SERVER 2008
La intencin de este artculo es la de comentar una de las nuevas capacidades de SQL
Server 2008 que es la posibilidad de crear ndices filtrados, pero me parece que es una
buena oportunidad para mencionar que son los ndices, cual es su objetivo, que tipos de
ndices existen y dejar para final del artculo este asunto de los ndices filtrados.
Comencemos por la idea ms bsica que es la de preguntarse qu es un ndice y para
qu sirve, un ndice es un mecanismo que permite acceder a un conjunto de datos en
forma ms eficiente que si no se utilizase dicho mecanismo, considerando a la velocidad
de acceso a los datos como el factor de eficiencia que los ndices optimizan. En el
primer tipo de ndice que vamos a comentar la estrategia de optimizacin consiste en
ordenar fsicamente los datos de forma que puedan encontrarse ms rpidamente, esto
significa que en este tipo de ndice existir una o varias columnas que definirn de que
manera estar la tabla fsicamente ordenada.
Esta idea no es nueva, para quienes hayan programado alguna vez en cualquier
lenguaje sabrn que si debemos buscar un valor en un vector ordenado, podremos
utilizar algunas tcnicas como por ejemplo la bsqueda binaria que permitirn encontrar
los datos buscados en orden logartmico a diferencia del inmejorable orden lineal
cuando los valores dentro del vector estn desordenados. Para quien nunca haya
programado podr recordar un diccionario, en un diccionario un usuario busca una
definicin (datos) a partir de una clave (palabra a buscar) y el hecho de que los datos
estn ordenados por la clave (o sea las definiciones por las palabras) permitir que el
usuario no tenga que recorrer todas las palabras del diccionario hasta encontrar la
palabra deseada. De forma similar dentro de la estructura de tablas del SQL Server el
hecho que los datos se encuentren ordenados fsicamente por la clave permitir un
acceso ms rpido a los mismos. No estar quien se pregunte qu suceder cuando se
inserte un nuevo registro con la performance, y no hay dudas que ser menos eficiente
que si los datos estuviesen desordenados, pero no hay que olvidar que lo que se desea
es eficiencia en las operaciones de bsquedas, que son las que se realizan con mayor
frecuencia.
La forma ms sencilla de ver la difere
crear una tabla simple en nuestro mo
ejecucin en ambos casos (con y
agregando algunos valores:
CREATE TABLE [dbo].[Datos1](
[ID] [int] NOT NULL,
[Numero] [int]NOT NULL,
[Descripcion] [nvarchar](50) NOT N
)
INSERT INTO Datos1 ([ID],[Numero]
INSERT INTO Datos1 ([ID],[Numero]
INSERT INTO Datos1 ([ID],[Numero]
INSERT INTO Datos1 ([ID],[Numero]
Luego iniciaremos una bsqueda y v
mostrar de qu manera el query op
consulta, (El query optimizer es el en
datos).
Existen varias maneras de ver el pla
forma grafica.
Luego de haber ejecutado el script p
analizer:
SELECT [ID], [Numero], [Descripcion
Y luego presionar CTRL+L. Se obtend
CREATE CLUSTERED INDEX IX_1
Donde hemos indicado la creacin
CLUSTERED indicar que la tabla s
luego veremos que existe otro ti
Si volvemos a ejecutar la consulta a
formato:
Los planes de ejecucin en formato grfico deben leerse de izquierda a derecha y de
arriba hacia abajo, y aunque pueden ser extremadamente largos y complejos de leer, en
nuestro caso podemos ver el mismo est compuesto por solamente dos iconos y una
flecha que los une a ambos. Cada icono representar una operacin y la flecha
simbolizar el movimiento de datos entre las dos operaciones, indicndonos que la
operacin Table Scan ha tomado los datos que la operacin SELECT procesar, en
realidad la operacin SELECT no ha hecho nada en este caso. Este diagrama nos
indica que est haciendo interNombresnte el motor de base de datos.
Una operacin Table Scan nos est indicando que el motor ha necesitado recorrer
secuencialmente la tabla Datos1 para poder encontrar los registros que cumplan con la
condicin pedida.
La operacin Table Scan es equivalente a tener un diccionario desordenado donde es
necesario recorrerlo secuencialmente hasta encontrar la palabra que deseamos buscar,
pero adems la palabra puede existir ms de una vez, as que siempre deberemos
recorrerlo hasta la ltima palabra para asegurarnos que hemos encontrado todas las
definiciones. Cuando no hay ndices creados la performance de las bsquedas quedan
gravemente comprometidas.
En contraposicin crearemos un ndice y veremos que cambios se producen en el plan
de ejecucin, ejecutaremos la siguiente lnea de cdigo:
Indicando que en este caso la bsq
manera que el motor ya no debe r
pedidos.
Podemos ahora preguntarnos que pa
por otro campo, supongamos por e
reordenar la tabla fsicamente por Nu
fsico que ya habamos establecido po
establecerse solo para una clave (ya
estos casos existen otro tipo de ndic
no modifican el orden fsico de los reg
en otra estructura una copia de los
registro original de la tabla. Para pro
comando:
CREATE INDEX IX_2 ON [dbo].[Datos1] (Numero)
Y luego veremos el plan de la siguiente bsqueda:
El query optimizer puede utilizar otras
veremos a continuacin. Si ejecutamo
DELETE FROM Datos1
DECLARE @C int =1
WHILE @C < 10000
BEGIN
INSERT INTO Datos1 ([ID],[Nume
VALUES (@C,@C + 1,'D1' + cast(
SET @C+=1
END
Donde solamente hemos agregado m
veremos lo siguiente:
Donde puede verse que el query optimizer ha decidido utilizar el nuevo ndice IX_2.
Habr seguramente quien se haya percatado que en este ltimo query solo estamos
incluyendo a la columna Numero y se pregunte el por qu de esta decisin?, y ms
aun, habr quien parecindole extrao realizar la misma bsqueda pero esta vez con
todos los campos (al menos eso espero). Si es as, quien realice esta prueba descubrir
algo pertubador, y es que el query optimizer habr decidi utilizar el ndice IX_1, y no
IX_2, pero por que? podrn preguntarse y la respuesta es la siguiente:
Como comentamos previamente los ndices non-clustered guardan una copia de las
claves y un puntero al registro original, de esta manera cuando hemos buscado
solamente por Numero el ndice IX_2 es capaz de devolver la informacin solicitada ya
que posee el valor de la columna Numero, pero cuando hemos pedido otros datos
como ID y Descripcion que no existen en IX_2 el query optimizer ha decidido que es
menos costoso recorrer la tabla por IX_1 para devolver los datos que IX_2 no posee.
Cuando un ndice non-clustered cubre todos los datos solicitados en la consulta se dice
que es un covered-index, el caso contrario no ser un covered-index y el query optimizer
deber buscar alguna estrategia para obtener los datos faltantes, obviamente los
clustered index son siempre covered index, ya que poseen el registro completo.
Ahora el query optimizer ha utilizado nuestro ndice IX_2 pero para recuperar los datos
faltantes a requerido efectuar una operacin de Key Lookup extra utilizando el ndice
IX_1, para finalmente unir los datos en la operacin Nested Loops. Si creamos un nuevo
ndice que cubra todos los datos pedidos de la siguiente forma:
En Sql Server 2008 existe adems la
que se aplican solo a un grupo de d
IX_2 e IX_3 y crear un nuevo ndi
efectuan estas operaciones:
1 CREATE INDEX IX_3 ON [dbo].[Datos1] (Numero,ID,Descripcion)
1 DROP INDEX IX_2 ON [dbo].[Datos
2 DROP INDEX IX_3 ON [dbo].[Datos
No debera sorprendernos el siguiente resultado:
3
4
CREATE INDEX IX_4 ON [dbo].[Da
100
De esta forma el ndice IX_4 ser a
ejemplo si ejecutamos el siguiente qu
Otra opcin para incluir las columnas restantes es utilizar la sentencia INCLUDE de la
siguiente forma:
1 CREATE INDEX IX_3 ON [dbo].[Datos1] (Numero) INCLUDE (Descripcion, ID)
En el segundo caso, las columnas son agregadas al ndice pero no forman parte del
mismo.
En ambos tipos de ndices, clustered o non-clustered existe la posibilidad de definirlos
como nicos (unique), un ndice nico no admite repeticin de valores, y permite una
mayor optimizacin en las bsquedas. Las claves primarias de las tablas estn
compuestas por ndices unique que pueden ser o no clustered.
El query optimizer ha decidido emplea
INSTALACION DE SQL SERV
Para iniciar con el proceso de insta
\Servers\ e inicie setup.exe. Si est
navegue a la carpeta \Servers\ en la c
Si aparece el cuadro de dilogo de i
haga clic en la casilla para aceptar e
continuacin, haga clic en Siguien
instalacin de SQL Server 2008,
instalacin de .NET Framework 2.0, h
En la pgina SQL Server 2008 Ins
instalacin.
En la pgina Trminos de licencia, lea el contrato de licencia y active la casilla para
aceptar los trminos y condiciones de la licencia. Una vez aceptado el contrato de
licencia, se activar el botn Siguiente. Para continuar, haga clic en Siguiente. Para
salir del programa de instalacin, haga clic en Cancelar.
El Asistente para la instalacin instalar los requisitos previos de SQL Server si an no
estn en el equipo. Son los siguientes:
.NET Framework 2.0
SQL Server Native Client
Archivos auxiliares de instalacin de SQL Server
Para instalar los requisitos previos, haga clic en Instalar.
Al hacer clic en el vnculo de instalacin, el Comprobador de configuracin del sistema
comprobar el equipo donde se est ejecutando la instalacin. Las comprobaciones de
esta versin incluyen:
Comprobacin de la versin del sistema operativo: comprueba que el sistema
operativo se admite en esta versin. Para obtener informacin de los requisitos,
Comprobacin del servicio WMI: comprueba que el servicio Windows Installer se
est ejecutando.
Comprobacin de la coherencia de los contadores de rendimiento: comprueba
los valores de las claves del Registro para comprobar el incremento correcto de
la instalacin de los contadores de perfmon de SQL Server.
Comprobacin de Business Intelligence Development Studio: comprueba que
Business Intelligence Development Studio no est instalado, ya que la
actualizacin de este componente no se admite.
Comprobacin de la instalacin de SQL Server 2008 anterior: comprueba que las
instalaciones de CTP anteriores de SQL Server 2008 no estn presentes en el
equipo donde se est ejecutando el programa de instalacin.
En la pgina Seleccin de carac
instalacin. Despus de seleccionar
cada grupo de componentes aparece
verificacin que desee. Para obtener m
Para cambiar la ruta de instalacin
nombre de ruta en el campo que s
dilogo o haga clic en el botn par
acceso de instalacin predetermina
Server\.
utilizar un sufijo de identificador de
casilla Sufijo de id. de instancia y su
Las
instancias
independientes
predeterminadas como si son ins
predeterminado para la casillaSufijo d
Directorio raz de instancia: de form
es C:\Archivos de programa\Microsoft
predeterminado, utilice el campo pr
navegue a una carpeta de instalacin
Todos los componentes de una inst
como una unidad. Todos los Serv
aplicarn a cada componente de una
En la pgina Configuracin de instancia, especifique si desea instalar una instancia
predeterminada o una instancia con nombre. Para tener en cuenta consideraciones
sobre la denominacin de instancias,
Instancias detectadas y caracterst
Server que estn en el equipo en e
actualizar una de esas instancias en
Sufijo de id. de instancia: de forma predeterminada, el nombre de instancia se utiliza
como sufijo del identificador de instancia. Se usa para identificar los directorios de
instalacin y las claves del Registro para la instancia de SQL Server. Es as en las
instancias predeterminadas y en las instancias con nombre. Con una instancia
predeterminada, el nombre y el sufijo del identificador seran MSSQLSERVER. Para
compruebe que aparece en el, a
Para especificar la misma cuenta de
en esta instancia de SQL Server, las
parte inferior de la pgina.
Nota de seguridad No utilice una con
Cuando termine de especificar inform
Server, haga clic en Siguiente.
Utilice
la
ficha Configuracin
intercalaciones no predeterminadas p
Analysis Services. Para obtener ms
En la pgina Configuracin del servidor: Cuentas de servicio, especifique las
Use la pgina Configuracin del m
cuentas de inicio de sesin para los servicios de SQL Server. Los servicios reales
cuentas para especificar lo siguiente:
configurados en esta pgina dependen de las caractersticas seleccionadas para ser
instaladas.
Modo de Seguridad: seleccione la aut
mixto para su instancia de SQL Serve
Puede asignar la misma cuenta de inicio de sesin a todos los servicios de SQL Server,
o configurar cada cuenta de servicio individualmente. Tambin puede especificar si los
servicios se inician automtica o manualmente, o estn deshabilitados. Microsoft
recomienda que configure de forma individual las cuentas de servicio para proporcionar
los mnimos privilegios para cada servicio, donde a los servicios de SQL Server se les
conceden los permisos mnimos que necesitan para completar sus tareas. Para obtener
ms informacin,.
Si selecciona la autenticacin de m
confirmar una contrasea segura par
Server integrada.
Una vez que un dispositivo establ
mecanismo de seguridad es el mismo
mixto. Para obtener ms informa
Cuando termine de modificar la lista,
la lista de administradores en el cuad
completa, haga clic en Siguiente para
Administradores de SQL Server: debe especificar al menos un administrador del sistema
para la instancia de SQL Server.
Para agregar la cuenta en la que se ejecuta el programa de instalacin de SQL Server,
haga clic en el botn Agregar OPERADOR actual. Para agregar o quitar las cuentas de
la lista de administradores del sistema, haga clic en Agregar o en Quitar, y a
Utilice la pgina Configuracin de
continuacin modifique la lista de OPERADORs, grupos o equipos que tendrn
datos para especificar los directorios
privilegios de administrador para la instancia de SQL Server. Para obtener ms
en los directorios predeterminados, ha
informacin acerca de cmo aprovisionar las cuentas,
Luego veremos un compendio de to
SERVER 2008 y elegimos si deseam
proceder con la Instalacin haciendo
Podemos ver que comienza el proce
todos los servicios del SQL Server 20
Despus de terminado podemos ver
proceso de instalacin.
Recopilacin de memoria ayuda por
Aadiendo ante ello, debemos con
privilegios de administrador del equipo
1.
2.
3.
4.
5.
Inserte el disco de instalacin
clic en setup.exe. Para realiz
red, localice la carpeta raz d
en setup.exe. Si aparece e
Microsoft SQL Server 2008,
previos y, a continuacin, ha
SQL Server 2008.
Si aparece el cuadro de di
active la casilla para acepta
SP1. Haga clic en Siguiente
haga clic en Cancelar. Cuan
3.5 SP1, haga clic en Finaliza
Tambin se requiere Windo
Asistente para la instalacin.
continuacin, reinicie el archiv
Una vez instalados los req
ejecutar el Centro de inst
instalacin de SQL Serv
independiente de SQL Serv
existente.
El Comprobador de configu
deteccin en su equipo. Pa
archivos de registro de la inst
6. En la pgina Clave del producto, seleccione un botn de opcin para indicar si
est instalando una edicin gratuita de SQL Server o una versin de produccin
del producto que tiene una clave de PID. Para obtener ms informacin,
7. En la pgina Trminos de licencia, lea el contrato de licencia y active la casilla
para aceptar los trminos y condiciones de la licencia.
8. El Asistente para la instalacin instalar los requisitos previos de SQL Server si
an no estn en el equipo. Entre ellos, figuran:
o .NET Framework 3.5 SP1
o SQL Server Native Client
o Archivos auxiliares del programa de instalacin de SQL Server
Para instalar los requisitos previos, haga clic en Instalar.
9. El Comprobador de configuracin del sistema comprobar el estado del sistema
de su equipo antes de seguir con la instalacin.
10. En la pgina Seleccin de caractersticas, seleccione los componentes de la
instalacin. Despus de seleccionar el nombre de la caracterstica se muestra
una descripcin de cada grupo de componentes en el panel derecho. Puede
activar una combinacin de casillas. Para obtener ms informacin,
Si desea especificar un directorio personalizado para los componentes
compartidos, use el campo situado en la parte inferior de la pgina Seleccin de
caractersticas. Para cambiar la ruta de instalacin de los componentes
compartidos, actualice el nombre de ruta en el campo situado en la parte inferior
del cuadro de dilogo o haga clic en Examinar para moverse a un directorio de
instalacin. La ruta de instalacin predeterminada es C:\Archivos de programa \
Microsoft SQL Server\100\.
11. En la pgina Configuracin de instancia, especifique si desea instalar una
instancia predeterminada o una instancia con nombre. Para obtener ms
informacin, Para continuar, haga clic en Siguiente.
Id. de instancia: de forma predeterminada, el nombre de instancia se utiliza
como identificador de la instancia. Se usa para identificar los directorios de
instalacin y las claves del Registro para la instancia de SQL Server. Es as en
las instancias predeterminadas y en las instancias con nombre. En el caso de
una instancia predeterminada, el nombre y el identificador de la citada instancia
seran MSSQLSERVER. P
predeterminado, active la cas
Directorio raz de instancia
instancia es C:\Archivos d
especificar un directorio raz
o haga clic en Examinar para
Todos los Service Pack y ac
componente de una instancia
Caractersticas e instancias
de SQL Server que estn e
instalacin. Si ya hay una ins
instalar una instancia con nom
12. La pgina Requisitos de espa
para las caractersticas que h
necesario con el espacio en d
13. El flujo de trabajo en el resto
especificado en la instalacin
no vea todas las pginas.
14. En la pgina Configuracin d
cuentas de inicio de sesin
reales que se configuran en e
van a instalar.
Puede asignar la misma cuen
Server, o configurar cada cu
especificar si los servicios s
deshabilitados. Microsoft rec
cuentas de servicio para prop
donde a los servicios de SQL
necesitan para completar sus
Para especificar la misma cuenta de inicio de sesin para todas las cuentas de
servicio en esta instancia de SQL Server, las credenciales se proporcionan en
los campos de la parte inferior de la pgina.
Cuando haya terminado de m
la lista de administradores en
lista est completa, haga clic
Nota de seguridad No utilice una contrasea en blanco. Utilice una
contrasea segura.
17. Use la pgina Configuracin
Directorios de datos para
predeterminados. Para insta
en Siguiente.
18. Para obtener ms informacin
19. Use la pgina Configuracin
FILESTREAM para habilitar
Para obtener ms informacin
20. Use la pgina Configuraci
cuentas para especificar los
de administrador para Ana
administrador del sistema pa
que se ejecuta el programa d
OPERADOR actual. Para
administradores del sistema,
modifique la lista de OPERAD
administrador para Analysis S
Cuando termine de especificar la informacin de inicio de sesin para los
servicios de SQL Server, haga clic en Siguiente.
15. Utilice la ficha Configuracin del servidor - Intercalacin para especificar
intercalaciones no predeterminadas para Database Engine (Motor de base de
datos) y Analysis Services.
16. Use la pgina Configuracin de Database Engine (Motor de base de datos) Aprovisionamiento de cuentas para especificar lo siguiente:
o Modo de Seguridad: seleccione la autenticacin de Windows o la
autenticacin de modo mixto para su instancia de SQL Server. Si
selecciona la autenticacin de modo mixto, debe proporcionar una
contrasea segura para la cuenta de administrador del sistema de SQL
Server integrada.
Una vez que un dispositivo establezca una conexin correcta con SQL
Server, el mecanismo de seguridad ser el mismo para la autenticacin
de Windows y para el modo mixto. Para obtener ms informacin, .
o
Administradores de SQL Server: debe especificar al menos un
administrador del sistema para la instancia de SQL Server. Para
agregar la cuenta en la que se ejecuta el programa de instalacin de
SQL Server, haga clic en Agregar OPERADOR actual. Para agregar o
quitar cuentas de la lista de administradores del sistema, haga clic
en Agregar o en Quitar y, a continuacin, modifique la lista de
OPERADORs, grupos o equipos que tendrn privilegios de
administrador para la instancia de SQL Server. Para obtener ms
informacin .
Cuando haya terminado de m
la lista de administradores en
lista est completa, haga clic
21. Use la pgina Configuracin
especificar los directorios de
los directorios predeterminado
22. Use la pgina Configuracin
instalacin de Reporting Serv
encuentran las siguientes:
o Configuracin predete
o Configuracin predete
o Instalacin de Report
23. En la pgina Informes de e
desee enviar a Microsoft y
24.
25.
26.
27.
28.
predeterminada, las opciones para los informes de errores y el uso de
caractersticas estn habilitadas
El Comprobador de configuracin del sistema ejecutar uno o varios conjuntos
de reglas para validar la configuracin del equipo con las caractersticas de SQL
Server que ha especificado.
La pgina Listo para instalar muestra una vista de rbol de las opciones de
instalacin que se especificaron durante la instalacin. Para continuar, haga clic
en Instalar.
La pgina Progreso de la instalacin muestra el estado para que pueda
supervisar el progreso de la instalacin durante la ejecucin del programa de
instalacin.
Despus de la instalacin, la pgina Operacin completada proporciona un
vnculo al archivo de registro de resumen para la instalacin y otras notas
importantes. Para completar el proceso de instalacin de SQL Server, haga clic
en Cerrar.
Si el programa indica que se reinicie el equipo, hgalo ahora. Es importante leer
el mensaje del Asistente para la instalacin tras finalizar el programa de
instalacin.
MEMORIA AYUDA
Que se debe considerar en
instalacin de SQL SERVER
Windows XP
Recordemos que la pregunta existe
Server 7 y las nuevas actualizaciones
No puedes, necesitas la versin profe
tu sistema operativo a Windows 2000
La versin Enterprise de SQL ser
servidores, tanto vista como XP so
necesitas la versin Professional o sta
Con la versin Enterprise podrs inst
SQL server remoto pero nunca un
servidor.
Cmo actualizar a SQL Server 2008
El Asistente para la instalacin de SQL Server proporciona un nico rbol de
caractersticas para la actualizacin de los componentes de SQL Server. Tambin
puede instalar SQL Server 2008 en paralelo con una versin anterior, o migrar los
valores de configuracin y las bases de datos existentes de una versin anterior de SQL
Server y aplicarlos a una instancia de SQL Server 2008.
SQL Server 2005 (32 bits) Standard1
SQL Server 2005 (32 bits) Developer1
SQL Server 2005 (32 bits) Enterprise1
Debemos considerar las actualizaciones de cada versin.
Los siguientes escenarios de actualizacin se admiten en esta versin de SQL Server.
SQL Server 2005 Enterprise Evaluation (32 bit
X64)
SQL Server 2005 IA64 (64 bits) Developer
SQL Server 2005 IA64 (64 bits) Standard
SQL Server 2000 (32 bits) Developer SP41,4
SQL Server 2008 Developer
SQL Server 2000 (32 bits) Enterprise SP41,4
SQL Server 2008 Enterprise
SQL Server 2000 Enterprise Evaluation (32 bits,
IA64)4,5
SQL Server 2000 (64 bits) Developer SP41,4
No se admite la actualizacin.
SQL Server 2000 (64 bits) IA64 Enterprise SP43,4,5
SQL Server 2008 (64 bits) IA64 Enterprise
SQL Server 2000 (32 bits) Personal SP4
No se admite la actualizacin.
SQL Server 2005 X64 (64 bits) Enterprise
SQL Server 2005 (32 bits) Express1
SQL Server 2008 Express
SQL Server 2008 Express1
SQL Server 2008 Express Advanced
SQL Server 2008 Workgroup
SQL Server 2008 Express Advanced
SQL Server 2008 Workgroup
SQL Server 2005 (32 bits) Workgroup1
SQL Server 2005 X64 (64 bits) Developer
SQL Server 2005 X64 (64 bits) Standard
SQL Server 2008 (64 bits) IA64 Developer
SQL Server 2008 Express Tools
SQL Server 2005 (32 bits) Express1 Advanced1
SQL Server 2005 IA64 (64 bits) Enterprise
SQL Server 2008 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Enterprise
SQL Server 2008 Express Tools
SQL Server 2008 Express Tools
SQL Server 2008 Express Advanced
SQL Server 2008 Workgroup
SQL Server 2008 Express Tools x64 (64 bits)
SQL Server 2008 Standard
SQL Server 2008 Developer
SQL Server 2008 Enterprise
SQL Server 2008 Express Advanced1
SQL Server 2008 Express Advanced
SQL Server 2008 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Express Advanced x64 (64 b
SQL Server 2008 Developer
SQL Server 2008 Enterprise
SQL Server 2008 Express x64 (64 bits)
SQL Server 2008 Express x64 (64 bits)
SQL Server 2008 Express Tools x64 (64 bits)
SQL Server 2008 Workgroup1
SQL Server 2008 Express Advanced x64 (64 bits)
SQL Server 2008 Workgroup x64 (64 bits)
SQL Server 2008 Web1
SQL Server 2008 Standard1,2
SQL Server 2008 Standard
SQL Server 2008 Enterprise
SQL Server 2008 Developer1,2
SQL Server 2008 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Developer
SQL Server 2008 Enterprise
SQL Server 2008 Enterprise1,2
SQL Server 2008 Enterprise
SQL Server 2008 Enterprise Evaluation2
SQL Server 2008 Enterprise Evaluation
SQL Server 2008 Web
SQL Server 2008 IA64 (64 bits) Developer2
SQL Server 2008 Developer x64 (64 bits)2
SQL Server 2008 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Developer
SQL Server 2008 x64 (64 bits) Standard2
SQL Server 2008 Enterprise
SQL Server 2008 IA64 (64 bits) Enterprise Evaluation2
SQL Server 2008 IA64 (64 bits) Enterprise
SQL Server 2008 IA64 (64 bits) Enterprise2
SQL Server 2008 x64 (64 bits) Enterprise Evaluation2
SQL Server 2008 IA64 (64 bits) Developer
SQL Server 2008 x64 (64 bits) Enterprise2
SQL Server 2008 IA64 (64 bits) Enterprise
Evaluation
SQL Server 2008 Enterprise Evaluation
No puede agregar componentes a u
actualizacin a SQL Server 2008.
Server a SQL Server 2008, podr
instalacin de SQL Server 2008: Setu
Compatibilidad entre idiomas
La versin en ingls de SQL Server es compatible con todas las versiones
traducidas de los sistemas operativos admitidos.
Las versiones traducidas de SQL Server son compatibles con sistemas
operativos traducidos que estn en el mismo idioma que la versin traducida de
SQL Server.
Las versiones localizadas de SQL Server se pueden actualizar a versiones
localizadas de SQL Server 2008 del mismo idioma.
Las versiones localizadas de SQL Server no se pueden actualizar a la versin
en ingls de SQL Server 2008.
Las versiones localizadas de SQL Server no se pueden actualizar a versiones
localizadas de SQL Server 2008 de un idioma distinto.
Las versiones traducidas de SQL Server tambin son compatibles con las
versiones en ingls de los sistemas operativos admitidos mediante la
configuracin del Paquete de interfaz de OPERADOR multilinge (MUI) de
Windows. No obstante, deber comprobar algunas configuraciones del sistema
operativo antes de instalar una versin traducida de SQL Server en un servidor
que ejecute un sistema operativo en ingls con una configuracin de MUI que
no sea en ingls. Compruebe que las siguientes configuraciones del sistema
operativo coinciden con el idioma de SQL Server que desea instalar:
o Configuracin de la interfaz de OPERADOR del sistema operativo
o Configuracin regional del OPERADOR del sistema operativo
o Configuracin regional del sistema
Tal y como habrs visto en la pre
lenguaje T-SQL, lenguaje basado en
disear cdigo con mayores posibi
tampoco es necesario conocimientos
un principio.
Para aquellos alumnos que ya teng
afiancen y amplen esos conocimie
administracin de uno de los servido
2008. Por otro lado, este curso esta
dedican al desarrollo de aplicacion
programas de escritorio, con el apren
datos, comprendern mejor el enlac
sern capaces de separar el desarro
supone la parte de la base de datos,
que realicen tareas que solucionan c
desarrollo de aplicaciones, mejorand
aplicaciones.
Con la aparicin de la informtica, la
Si estas configuraciones del sistema operativo no coinciden con el idioma de la
versin traducida de SQL Server, deber establecerlas correctamente antes de
instalar SQL Server 2008.
datos en unas horas que lo que ante
modernizando las caractersticas de
cubrir la necesidad del control de
crecimiento de un modo sencillo y ren
Actualmente podemos encontrarnos c
Oracle, DB2, MySQL, SQL Server, Y
Adems la reciente aparicin de SQL Server 2008, conlleva que este preparado para la
Capacidad para interpretar funciones
expansin por la red de redes (Internet) ya que por ejemplo es capaz de generar
de plataformas .NET, esto nos perm
automticamente Libroos XML, se trata del formato estndar de datos que facilita la
como Visual Basic o C#.
transmisin de datos en Internet.
Como veremos en el siguiente punto, tenemos diferentes versiones de SQL Server ,
En cualquier caso, si vamos a realiz
recomendable realizar una copia de
nuestras bases de datos, para evitar p
cada una orientada a cubrir unas determinadas necesidades de diferentes tipos de
codigocli o clientes, pero podemos enumerar una serie de propiedades comunes para
Actualizar SQL Server con el Asiste
todas ellas, que demuestran que SQL Server es bastante ms que un servidor de base
de datos:
Servidor de base de datos, de gran rendimiento.
RDBMS que pueden ser instalados tanto en sistemas de OPERADORs como
Windows XP, mquinas de multiprocesador de 64 bits, redes de ordenadores.
datos, tenga en cuenta los siguientes
Antes de proceder a la ac
La administracin se facilita mediante interfaz grfica de OPERADOR.
aplicacin o servicio tratando
Capaz de tener varias instancias del servido en una nica mquina.
modo de slo lectura ya que o
Acceso directo a datos desde pgina Web, gracias a la generacin automtica
de Libroos XML, consiguiendo una completa integracin con Internet.
Posibilidades de data warehousing y data mining, para almacenar y analizar
datos, funcionando como Online Transaction Processing (OLTP) y con servicios
En este tema se describe cmo utili
actualizar una base de datos de SQL
Cuando utilice el Asistente para cop
Online Analytical Processing (OLAP).
Comunicacin perfecta con otras aplicaciones Microsoft, pudiendo presentar
informacin en hojas de Excel, por citar un ejemplo.
Integracin perfecta con herramientas de desarrollo de software como Visual
Studio 2005.
Lenguaje T-SQL para ampliar las posibilidades de las tareas a realizar.
No se puede cambiar el nomb
Para actualizar una base de datos de SQL Server 2000 a una versin posterior
1. Conctese a cualquier instancia de SQL Server Database Engine (Motor de
base de datos de SQL Server) utilizando el Explorador de objetos en SQL
Server Management Studio.
2. Expanda Bases de datos, haga clic con el botn secundario,
seleccione Tareasy, a continuacin, haga clic en Copiar base de datos.
3. Complete los pasos del asistente.
Para asegurarse del rendimiento ptimo de una base de datos actualizada,
ejecute sp_updatestats (actualizar estadsticas) en la base de datos actualizada.
Despus de utilizar el Asistente para copiar bases de datos con el fin de actualizar
una base de datos de SQL Server 2005 o SQL Server 2000 a SQL Server 2008, la
base de datos est disponible inmediatamente y se actualiza de forma automtica a
continuacin. Si la base de datos tiene ndices de texto completo, el proceso de
actualizacin los importa, los restablece o los vuelve a generar, dependiendo del
valor de la propiedad del servidor Opcin de actualizacin de texto completo. Si
la opcin de actualizacin se establece en Importar o enVolver a generar, los
ndices de texto completo no estarn disponibles durante la actualizacin.
Dependiendo de la cantidad de datos que se indicen, la importacin puede requerir
varias horas y volver a generar puede requerir hasta diez veces ms. Observe
tambin que cuando la opcin de actualizacin se establece en Importar, si no se
dispone de un catlogo de texto completo, se vuelven a generar los ndices de texto
asociados. Para obtener informacin sobre cmo ver o cambiar la configuracin de
la propiedad Opcin de actualizacin de texto completo,
El formato de las copias de seguridad
7.0 o versiones anteriores no es com
pueden restaurarse en SQL Server
migrar una base de datos creada m
SQL Server 2005,
SQL Server 2008 utiliza una ruta
versiones anteriores. Por lo tanto,
ubicacin predeterminada de SQL S
copias de seguridad, es preciso uti
acerca de la nueva ruta de acceso pr
Pasos generales para utilizar las fu
para copiar una base de datos
Cuando se utiliza la copia de segurida
a otra versin de SQL Server, los
cualquier plataforma en la que se ejec
Los pasos generales son:
1. Cree una copia de seguridad
en una instancia de SQL Ser
equipo en el que se ejecute
origen.
2. En el equipo al que desee
Copiar bases de datos con Copia de seguridad y restauracin
conctese a una sesin de
base de datos. Si es necesa
En SQL Server 2008, se puede crear una base de datos nueva restaurando una copia
de seguridad de una base de datos que se cre con SQL Server 2000, SQL Server 2005
o SQL Server 2008. Sin embargo, las copias de seguridad las bases de datos maestra,
de modelo y msdb creadas mediante SQL Server 2000 o SQL Server 2005 no pueden
restaurarse con SQL Server 2008. Asimismo, las copias de seguridad de SQL Server
2008 no se pueden restaurar con versiones anteriores de SQL Server.
mismos dispositivos de copia
de las bases de datos de orig
3. Restaure la copia de segurid
destino. Al restaurar la bas
archivos de la base de datos.
En los siguientes temas se abordan aspectos adicionales que pueden afectar al
proceso.
ANTES DE RESTAURAR LOS ARCHIVOS DE BASE DE DATOS
La restauracin de una base de datos crea automticamente los archivos necesarios
para la base de datos que se restaura. De forma predeterminada, los archivos que crea
SQL Server durante el proceso de restauracin utilizan el mismo nombre y las mismas
rutas de acceso que los archivos de la base de datos original en el equipo de origen.
Para evitar errores y consecuencias no deseadas, determine los archivos que se crean
de forma automtica al realizar la restauracin antes de ejecutarla porque:
Es posible que los nombres de archivos ya existan en el equipo, lo que
provocar un error.
Es posible que no haya espacio suficiente en la ubicacin de destino.
Es posible que la estructura de directorios o asignacin de unidades no exista
en
el
equipo.
Por ejemplo, la copia de seguridad contiene un archivo que es necesario
restaurar en la unidad E:, pero el equipo de destino no contiene una unidad E:.
Si se pueden reemplazar los archivos de la base de datos, se sobrescriben las
bases de datos y archivos existentes que tengan los mismos nombres en la
copia de seguridad, a menos que dichos archivos pertenezcan a una base de
datos diferente.
Tenga en cuenta que si reutiliza un nombre de base de datos y un destino existentes
cuyos archivos se puedan sobrescribir, se sobrescribirn todos los archivos existentes
cuyo nombre sea idntico al de los de la copia de seguridad.
Si es preciso, se puede especificar la asignacin de dispositivos, los nombres de archivo
o la ruta de acceso para restaurar una base de datos.
Suponga que desea restaur
seguridad creadas en la ubic
Server 2005.
Puede ser necesario restaura
de seguridad en una unidad
Probablemente se trate de u
equipos de una organizacin
de disco o idnticas configura
Puede ser necesario crear u
mismo equipo para realizar p
datos original ya existen, por
de archivo al crear la copia
restauracin.
Cambiar el nombre de la base de d
Se puede cambiar el nombre de la b
destino, sin necesidad de restaurar
manualmente el nombre. Por ejemplo
de la base de datos de Contenidos a
copia de la base de datos.
El nombre de base de datos que se p
datos se utiliza de forma automtica c
a que el nombre de la base de datos
copia de seguridad.
Actualizar una base de datos utiliza
MOVER LOS ARCHIVOS DE BASE DE DATOS
Si no se puede restaurar los archivos de la copia de seguridad de la base de datos en el
equipo de destino debido a las raLugars mencionadas anteriormente, es necesario
mover los archivos a una nueva ubicacin a medida que se restauran. Por ejemplo:
Al restaurar copias de seguridad de
conocer de antemano si la ruta de
catlogos de texto completo de una c
Para obtener una lista de los nombres
todos los archivos de una copia de seguridad, incluidos los archivos de catlogo, utilice
una instruccin RESTORE FILELISTONLY FROM <backup_device>.
Si no existe la misma ruta de acceso en el equipo de destino, son dos las alternativas
vlidas:
existentes. Para copiar una base de
mtodos de copia compatibles con las
Para obtener informacin sobre cmo
Bases de datos de SQL Server 7.0
Cree la asignacin de unidades/directorios equivalente en el equipo de destino.
Mueva los archivos de catlogo a una ubicacin nueva durante la operacin de
restauracin con la clusula WITH MOVE de la instruccin RESTORE
DATABASE.
Puede convertir una base de datos
usando uno de los mtodos siguiente
Propiedad de la base de datos
Cuando se restaura una base de datos en otro equipo, el inicio de sesin de SQL Server
o el OPERADOR de Microsoft Windows que inicia la operacin de restauracin se
convierte automticamente en el propietario de la nueva base de datos. Una vez
restaurada la base de datos, el administrador del sistema o el nuevo propietario de la
base de datos pueden cambiar la propiedad de la base de datos. Para evitar
restauraciones no autorizadas de una base de datos, utilice contraseas en los medios
o en el conjunto de copia de seguridad. .
Administrar metadatos al restaurar una base de datos en otra instancia de
servidor
Para actualizar una base de d
Server 2005, adjunte la base
dichas versiones. A continua
Server
2008.
Generalm
Para obtener informacin s
actualizar una base de datos
Utilice el Asistente para imp
los datos entre varias instan
cualquier origen y destino p
producirse problemas en la
stos.
Para migrar los datos de una
las operaciones siguientes:
1. Utilice la versin 7.0
datos mediante un co
2. Utilice la versin de
Al restaurar una base de datos en otra instancia de servidor, para proporcionar una
experiencia coherente a los OPERADORs y las aplicaciones, puede que tenga que
volver a crear algunos o todos los metadatos de la base de datos, por ejemplo los inicios
de sesin y los trabajos, en la otra instancia de servidor.
importar los datos de
dicho archivo contie
opciones -V70 y n, q
tipos de datos nativos
Copiar bases de datos de SQL Server 7.0 o anterior
Al instalar SQL Server 2008, se actualizarn automticamente las bases de datos
Bases de datos de SQL Server 6.0 o SQL Server 6.5
Para migrar los datos de una base de datos de SQL Server versin 6.0 o SQL
Server versin 6.5, use el programa bcp de dicha versin de SQL Server para exportar
los datos a un archivo en modo de carcter (bcpout). A continuacin, podr importar los
datos de caracteres en una base de datos de SQL Server 2008. Sin embargo, SQL
Server 2008 no admite los formatos de datos nativos de SQL Server 6.0 y SQL Server
6.5. Esto significa que la versin de bcp.exe de SQL Server 2008 no admite la opcin de
lnea de comandos -6, ni las opciones 60 y 65 de la opcin de lnea de comandos V.
El formato de las copias de seguridad de bases de datos creadas mediante SQL Server
6.5 o versiones anteriores no es compatible y, por lo tanto, estas bases de datos no
pueden restaurarse en SQL Server 2005 ni en versiones posteriores
Nivel de compatibilidad de la base de datos despus de actualizar
Los niveles de compatibilidad de las bases de datos tempdb, model, msdb
y Resource quedan establecidos en 100 despus de la actualizacin.
La base de datos maestra del sistema conserva el nivel de compatibilidad que tena
antes de la actualizacin, a menos que dicho nivel sea inferior a 80. Si el nivel de
compatibilidad de la base de datos maestra era inferior a 80 antes de la actualizacin,
se establece en 80 despus de la misma.
Si el nivel de compatibilidad de una base de datos de OPERADOR era 80 o 90 antes de
la actualizacin, permanece igual despus de la misma. Si el nivel de compatibilidad era
igual o inferior a 70 antes de la actualizacin, en la base de datos actualizada, el nivel
de compatibilidad se establece en 80, que es el nivel de compatibilidad mnimo admitido
en SQL Server 2008.
Las nuevas bases de datos de OPERADOR heredarn el nivel de compatibilidad de la
base de datos model.
BASE DE DATOS
El Database Engine (Motor de base de datos) es el servicio principal para almacenar,
procesar y proteger datos. El Database Engine (Motor de base de datos) proporciona
acceso controlado y procesamiento de transacciones rpido para cumplir con los
requisitos de las aplicaciones consumidoras de datos ms exigentes de su empresa.
Use Database Engine (Motor de base de datos) para crear bases de datos relacionales
para el procesamiento de transacciones en lnea o datos de procesamiento analtico en
lnea. Esto incluye la creacin de tablas para almacenar datos y objetos de base de
datos (p.ej., ndices, vistas y procedimientos almacenados) para ver, administrar y
proteger datos. Puede usar SQL Server Management Studio para administrar los
objetos de bases de datos y SQL Server Profiler para capturar eventos de servidor .
Base de datos: Cuarto y ltim
de datos, relacionada con el
que queremos almacenar los
este nivel guarda informaci
MOVIMIENTOS, compras, cl
un modo muy simple y muy g
Acabamos de mencionar los cuatro c
primera vez que te introduces en este
pilares de informacin.
El concepto ms general de una base de datos es el lugar donde se guardan los datos.
Tal y como hemos avisado, esta defin
Campo: Contiene un dato en particular, como puede ser el primer punto que
hace referencia al precio de un libro.
Registro: Almacena todos los datos de un determinado objeto de informacin,
que la base de datos se encarga d
cuatro niveles es decir demasiado po
la posibilidad de almacenar muchas m
vemos que el segundo punto de nuestras necesidades reclama los aspectos
ms importantes de un libro. En este caso, el libro es el objeto de informacin, y
Microsoft SQL Server 2008ofrece una
sus aspectos (Ttulo, Autor, ISBN, Pginas,...) de ese objeto de informacin
datos se almacenan en la base de da
seran un grupo de campos, al igual que sucede con el precio.
sino trabajar con ella. As a primera
Tabla: Almacena informacin de varios objetos de informacin que comparten
datos almacena algo ms que da
aspectos similares. Estamos mencionando el tercer punto de nuestra librera,
importancia grandsima, ya que tiene
donde queremos almacenar la informacin de todos los libro, podemos pensar,
datos se almacenan correctamente, d
pero cada libro es diferente al resto, y es cierto, pero todos los libros tienen en
esos datos, etc...Pero como te digo, lo
comn que cada uno de ellos tiene un determinado Ttulo, Autor, ISBN, Pginas,
Gnero, etc... Por lo tanto, si hemos entendido bien, los conceptos de los dos
anteriores niveles, podemos asegurar que una tabla almacena una serie de
registros (libros).
ESTRUCTURACIN DE UNA BASE DE DATOS
pensamos que nuestra base de datos
que nuestros datos se almacenen
Estructura fsica
Una base de datos se almacena en varios ficheros o archivos en disco. Como mnimo
tendremos dos ficheros que explicaremos ms adelante.
Tenemos la posibilidad de almacenar estos ficheros en discos que no estn ni tan
siquiera formateados o que no tengan una particin hecha, pero este mtodo no es el
ms aconsejable. Es ms razonable almacenar estos archivos en un disco ya
formateado, con formato NTFS.
En codigocli cuyo volumen de datos es altsimo y el trabajo que se realiza sobre la base
ordenadores, y de este modo perm
informacin en paralelo.
Centrndonos en lo principal:
tendrn almacenada la inform
que SQL Server 2008 nos pe
de datos soporta una actividad elevada, se almacenan los archivos en grupos de discos
slo informacin, sino tamb
denominados RAID por hardware. Este mtodo mejora considerablemente el
informacin. Pues bien, esta s
rendimiento, y nos asegura que en caso de fallos inesperados no perdamos esa valiosa
informacin.
Como es lgico, nosotros para realizar nuestros ejemplos, no vamos a basarnos en esta
tipo de estructuras de hardware, lo almacenaremos en nuestro disco duro, aunque
veremos como asegurar nuestros datos mediante planes de mantenimiento con copias
El archivo de datos, o aquello
de datos.
Por otro lado, tenemos el arc
tan importante como el anteri
de datos permanece integra.
ms de uno), en caso de ser
ya que almacena las modifica
explotacin de la base de dat
de seguridad automticas.
Nombres de archivos.
Como hemos mencionado, como mnimo tendremos dos archivos donde almacenar la
base de datos:
Archivo de datos.
Archivo de registro de transacciones.
Pero debes saber que tenemos otras posibilidades y podemos utilizar archivos extras
para mejorar el rendimiento de nuestra base de datos, podemos usar varios archivos, si
El modo de nombrar una base de da
que generalmente entrega el adminis
este nombre principal, SQL Server 2
determinadas extensiones, a ese
seleccionar el nombre principal, pue
ficheros que forman la base de datos.
Vamos a suponer que estamos en una empresa como administradores, y estamos
Tamao de la base de datos.
creando su base de datos. Nosotros como administradores le damos el nombre principal
" miEmpresa ". Ese ser el nombre de la base de datos, pero los ficheros donde se
almacenar su informacin y el registro de transacciones, sern:
Archivo de datos: miEmpresa_Data.MDF
Archivo de registro de tranasacciones: miEmpresa_Log.LDF
En caso de tener archivos extras, nosotros como administradores tambin podremos
darles su nombre principal, y la extensin que suele utilizarse es .NDF
Siguiendo con nuestra tarea de administrador, ahora sera el momento de seleccionar el
lugar de almacenamiento, como ya sabes podemos seleccionar una determinada
carpeta o directorio, incluso diferentes unidades fsicas. Lo ms aconsejable es guardar
en diferentes unidades, por un lado el archivo de datos, y por otro el archivo de registro
de transacciones. De modo que en caso de fallo, por lo menos tengamos uno de ellos.
A continuacin puedes ver una figura que representa la estructura fsica de la base de
datos, tomando como ejemplo el nombre principal "MiEmpresa".
No debes quedarte con la idea de que una base de datos, se compone sencillamente de
dos archivos, es algo mucho ms completo que todo eso lo que representa una base de
datos como entidad.
En el momento de crear la base de
memoria que necesitar para almace
tcnicas que nos permiten calcular el
estas estimaciones pueden venirse a
ser el crecimiento de la empresa y q
informacin, por citar un ejemplo.
Tampoco es nada aconsejable pecar
exagerada, y pensar que con esta c
espacio para nuestros datos. De acu
quiz si), pero lo que es seguro
rendimiento, de fragmentacin etc...
SQL Server 2008 nos permite olvid
archivos de datos y de registro, crece
se aade. Nosotros como administr
estimar ( una cantidad muy pequea
2008 crea la estructura correcta para
datos est en explotacin cuando alc
dada por un factor predeterminado.
Estructura lgica
Para entender que es la estructura
sencillo ejemplo.
Cuando nosotros nos compramos
funcionan los circuitos integrados, lo
equipo. En este caso, esos circuitos,
fsica del equipo de msica, al igual q
de datos.
A lo que nosotros como OPERADOR
de msica: como subir el volumen, e
De igual modo, como OPERADORs
lgica de la base de datos para poder
Una estructura lgica mnima puede
modo de introduccin en esta leccin.
Lo que vamos a exponer a continuacin a modo de introduccin son los elementos
principales que componen la estructura lgica de una base de datos, de modo que
sepas de que estamos hablando en caso de que se mencionen en las diferentes
lecciones. Sin embargo, los iremos viendo con ms detenimiento ms adelante, de
momento es suficiente con que te suenen y las vayas conociendo.
Los pasos siguientes muestran como creamos una base de datos usando SQL
Server Management Studio.
1. Dar click derecho en la opcin "Databases" y seleccionar "New Database..."
2. Luego dar click sobre el nombre de la Base de datos
Ahora se dar cuenta de su nueva b
SQL Server Management Studio.
Su nueva base de datos se basa en el modelo de "base de datos. La base de datos de
Acabamos de crear una base de dato
modelo es una base de datos del sistema que se utiliza como una plantilla cada vez que
creamos la base de datos, un "Archiv
una nueva base de datos se crea. Si utiliza el panel de la izquierda para navegar hasta
creadas. Fueron creados en la ubicac
su base de datos y expanda el rbol, te dars cuenta de que su base de datos ya
contiene una serie de objetos.Por ejemplo, ya contiene las funciones del sistema, las
vistas del sistema, procedimientos almacenados del sistema, y (oculta) las tablas del
Si hubiramos querido, podramos
sistema. Estos son los objetos del sistema que proporcionan informacin sobre la base
estos archivos. Tambin podra habe
de datos.
el archivo de crecer de forma autom
caso afirmativo, cmo que el crec
hecho eso en el paso 2.Pero no todo
hemos creado la base de datos.Po
Propiedades.
Para ver o cambiar las propiedades
sobre la base de datos y seleccionar "
El cuadro de dilogo Propiedades contiene un gran nmero de opciones para cambiar la
configuracin de su base de datos. Por ahora, podemos dejar todo en su configuracin
por defecto.
SINTAXIS DE CREAR UNA BASE DE DATOS
CREATE DATABASE database_Nombres
[ ON
[ PRIMARY ] [ <filespec> [ ,...n ]
[ , <filegroup> [ ,...n ] ]
[ LOG ON { <filespec> [ ,...n ] } ]
]
[ COLLATE collation_Nombres ]
[ WITH <external_access_option> ]
]
[;]
To attach a database
CREATE DATABASE database_Nombres
ON <filespec> [ ,...n ]
FOR { ATTACH [ WITH <service_broker_option> ]
| ATTACH_REBUILD_LOG }
[;]
<filespec> ::=
{
(
NOMBRES = logical_file_Nombres ,
UBICACION = { 'os_file_Nombres' | 'filestream_path' }
[ , SIZE = size [ KB | MB | GB | TB ] ]
[ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
[ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
}
<filegroup> ::=
{
FILEGROUP filegroup_Nombres [ CONTAINS FILESTREAM ] [ DEFAULT ]
<filespec> [ ,...n ]
}
<external_access_option> ::=
{
[ DB_CHAINING { ON | OFF } ]
[ , TRUSTWORTHY { ON | OFF } ]
}
<service_broker_option> ::=
{
ENABLE_BROKER
| NEW_BROKER
| ERROR_BROKER_CONVERSATI
}
Create a database snapshot
CREATE DATABASE database_snap
ON
(
NOMBRES = logical_file_Nombr
UBICACION = 'os_file_Nombres
) [ ,...n ]
AS SNAPSHOT OF source_databa
[;]
database_Nombres
Es el nombre de la nueva base de
dentro de una instancia de SQL Serv
database_Nombres puede ser un m
lgico, no se especifica para el archiv
lgico
no
se
especifica,
SQL
os_file_Nombres para el registro aad
123 caracteres database_Nombres p
es ms que 128 caracteres.
Si los datos de nombre de archivo no se especifica, SQL Server
utiliza
datos para la base de datos o 512 K
database_Nombres ya que tanto el logical_file_Nombres y como el os_file_Nombres.
especificar en una instantnea de bas
ON
COLLATE
Especifica que los archivos de disco utilizado para almacenar las secciones de datos de
Especifica la colacin por defecto par
la base de datos, archivos de datos, se definen explcitamente. ON se requiere cuando
ser un nombre de intercalacin de Wi
es seguida por una lista separada por comas de <filespec> artculos que definen los
se especifica, la base de datos se
archivos de datos para el grupo de archivos primario. La lista de archivos del grupo de
instancia de SQL Server. A nombre
archivos principal puede ser seguido por una lista opcional, separada por comas de
instantnea de base de datos.
<filegroup> artculos que definen los grupos de archivos de OPERADOR y sus archivos.
A nombre de la colacin no se puede
PRIMARIA
o ATTACH_REBUILD_LOG. Para o
Especifica que la lista de asociados <filespec> define el archivo principal. El primer
intercalacin de una base de dato
archivo especificado en la entrada <filespec> del grupo de archivos principal se
convierte en el archivo principal. Una base de datos slo puede tener un archivo
Para obtener ms informacin acerca
principal. Para obtener ms informacin,
vea COLLATE (Transact-SQL).
Si no se especifica PRIMARIA, el primer archivo enumerados en la instruccin CREATE
PARA COLOCAR
DATABASE se convierte en el archivo principal.
Especifica que la base de datos se c
LOG ON
del sistema operativo. Debe haber u
principal. Las entradas slo otros <f
Especifica que los archivos de disco utilizado para almacenar el registro de base de
tienen un camino diferente de cuan
datos, archivos de registro, se definen explcitamente. LOG ON es seguido por una lista
adjunta. Una
separada por comas de <filespec> artculos que definen los archivos de registro. Si LOG
ON no se especifica un archivo de registro se crea automticamente que tiene un
tamao que es un 25 por ciento de la suma de los tamaos de todos los archivos de
entrada
<filespec>
PARA COLOCAR requiere lo siguiente:
Todos
los
archivos
de
datos
Nota de seguridad:
(MDF
NDF)
deben
estar
disponibles.
Si existen varios archivos de registro, todos ellos deben estar disponibles.
Si una lectura / escritura de base de datos tiene un nico archivo de registro que no est
ahora disponible, y si la base de datos se cerr sin OPERADORs o transacciones
abiertas
antes
de
la
operacin
de
adjuntar,
PARA
COLOCAR
reconstruye
automticamente el archivo de registro y actualiza el archivo principal. En cambio, para
una base de datos de slo lectura, el registro no puede ser reconstruido debido a que el
archivo principal no se puede actualizar. Por lo tanto, al adjuntar una base de datos de
slo lectura cuyo registro no est disponible, usted debe proporcionar los archivos de
registro o en la clusula FOR ATTACH.
Nota:
Una base de datos creada por una versin ms reciente de SQL Server no puede
adjuntarse en versiones anteriores. La fuente de datos debe ser al menos la
versin 80 (SQL Server 2000) para conectar a SQL Server 2008. SQL Server 2000 o
Le recomendamos que no adjuntar
confiables.Estas bases de datos pod
cdigo Transact-SQL no deseado o
estructura de base de datos fsica. An
desconocido o no es de confianza, ej
servidor de no produccin, as co
almacenados u otro cdigo definido p
Para obtener ms informacin acerca
Separar y adjuntar bases de datos.
Nota:
Si la base de datos utiliza Service
Para obtener informacin sobre los
vez que una base de datos se sepa
de registro.
Al adjuntar una base de datos replic
ser, considere lo siguiente:
SQL Server 2005 las bases de datos que tienen un nivel de compatibilidad inferior
a 80 se establecer en compatibilidad 80 cuando se adjuntan.
Si adjunta la base de datos a la mism
de datos original, no se requieren pas
En SQL Server, los archivos de texto que forman parte de la base de datos que se
adjunta se adjuntar con la base de datos. Para especificar una nueva ruta de acceso
Si adjunta la base de datos a la m
del catlogo de texto, especifique la nueva ubicacin sin el nombre del archivo de texto
actualizada, debe ejecutar sp_vupgra
del sistema operativo.
de la operacin de colocar se ha com
Si adjunta la base de datos a una instancia de servidor diferente, independientemente
PARA ATTACH_REBUILD_LOG
de la versin, debe ejecutar sp_removedbreplication para quitar la replicacin despus
de la operacin de colocar se ha completado.
Nota:
Adjuntar trabaja con el formato de almacenamiento vardecimal, pero el SQL
Server Database Engine se debe actualizar por lo menos a SQL Server 2005
Service Pack 2. No puede adjuntar una base de datos utilizando el formato de
Especifica que la base de datos se c
del sistema operativo. Esta opcin se
ms archivos de registro de transacci
a generar. Debe haber una entrada <f
Nota:
Si los archivos de registro estn
utilizar esos archivos en lugar
PARA ATTACH_REBUILD_LOG req
Un cierre correcto de la base de datos
almacenamiento vardecimal a una versin anterior de SQL Server. Para obtener
ms informacin sobre el formato de almacenamiento vardecimal, vea Almacenar
Todos los archivos de datos (MDF y N
datos decimales como longitud variable.
Importante:
Para obtener informacin acerca de cmo actualizar una base de datos mediante el uso
Esta operacin rompe la cadena de c
de adjuntar, vea Cmo actualizar una base de datos mediante Separar y Adjuntar
una copia de seguridad completa
(Transact-SQL).
completado. Para
obtener
ms
Tpicamente, para ATTACH_REBUIL
escritura de base de datos con un reg
los textos que utilizan en su mayora
requieren
menos
espacio
de
PARA ATTACH_REBUILD_LOG no
de datos.
<filespec>
Controla las propiedades del archivo.
NOMBRE logical_file_Nombres
Especifica el nombre lgico para
especifica FICHERO, excepto cua
ATTACH. Un grupo de archivos FILES
logical_file_Nombres
Es el nombre lgico utilizado en SQL Server cuando se hace referencia al
archivo.Logical_file_Nombres debe ser nico en la base de datos y cumplir con las
reglas de los identificadores. El nombre puede ser un carcter Unicode o constante, o
un identificador regular o delimitado.
NOMBREARCHIVO ('os_file_Nombres' filestream_path | '')
Especifica el sistema operativo (fsica) de nombre de archivo.
"Os_file_Nombres '
Es la ruta y el nombre utilizado por el sistema operativo cuando se crea el archivo. El
archivo debe residir en uno de los siguientes dispositivos: el servidor local en el que est
instalado SQL Server, una Storage Area Network [SAN], o de una red basada en
iSCSI. La ruta especificada debe existir antes de ejecutar la instruccin CREATE
DATABASE. Para obtener ms informacin, consulte "Base de datos de archivos y
grupos de archivos" en la seccin Notas.
SIZE, MAXSIZE y FILEGROWTH
Parmetros no se puede establecer cuando una ruta de acceso UNC se especifica para
el archivo.
Si el archivo est en una particin primas, os_file_Nombres debe especificar slo la letra
de unidad de una particin primas existentes. Slo un archivo de datos se pueden crear
en cada particin primas.
Los archivos de datos no pueden ser ejecutados en sistemas de archivos comprimidos a
menos que los archivos son archivos de slo lectura secundaria, o la base de datos es
de slo lectura. Los archivos de registro no debe ser puesto en sistemas de archivos
comprimidos.Para obtener ms informacin, consulte grupos de archivos de slo lectura
y compresin.
"Filestream_path
Para un grupo de archivos FILESTREAM, UBICACION hace referencia a una ruta en la
que los datos de FILESTREAM se almacenarn. El camino hasta la ltima carpeta debe
existir, y la ltima carpeta no debe existir. Por ejemplo, si especifica la ruta C: \ MyFiles \
MyFilestreamData, C: \ MyFiles debe existir antes de ejecutar ALTER DATABASE, pero
la carpeta MyFilestreamData no debe existir.
El grupo de archivos y el archivo (<filespec>) se debe crear en la misma
declaracin. Slo puede haber un archivo, <filespec>, por un grupo de archivos
FILESTREAM.
El tamao, MAXSIZE y FILEGROW
archivos FILESTREAM.
TAMAO
Especifica el tamao del archivo.
SIZE no se puede especificar cuand
de acceso UNC. SIZE no se ap
tamao
Es el tamao inicial del archivo.
Cuando el tamao no se suministra p
utiliza el tamao del archivo principal
datos secundario o archivo de regist
para el archivo, el motor de base d
especificado para el archivo principa
principal de la base de datos modelo.
El kilobytes (KB), megabyte (MB),
sufijos. El valor predeterminado es M
decimal. El tamao es un valor ente
unidades ms grandes.
MAXSIZE max_size
Especifica el tamao mximo que
especificar cuando el os_file_Nom
UNC. MAXSIZE no se aplica a un gru
max_size
Un valor de 0 indica que el crecimient
Es el tamao mximo de archivo. El KB, MB, GB, TB y sufijos pueden ser utilizados. El
permitido.
valor predeterminado es MB. Especifique un nmero entero, no incluyen un decimal. Si
no se especifica max_size, el archivo crece hasta que el disco est lleno. Max_size es
Si FILEGROWTH no se especifica, e
un valor entero. Para valores mayores que 2147483647, utilice unidades ms grandes.
datos y 10% para los archivos de regi
ILIMITADO
Nota:
Especifica que el archivo aumenta hasta que el disco est lleno. En SQL Server, un
En SQL Server, el incremento de cre
archivo de registro especificado con un crecimiento ilimitado tiene un tamao mximo de
cambiado de 10% a 1 MB. El valo
2 TB, y un archivo de datos tiene un tamao mximo de 16 TB.
permanece sin cambios.
FILEGROWTH growth_increment
<filegroup>
Controla el grupo de archivos de
Especifica el incremento de crecimiento automtico del archivo. El FILEGROWTH
especificar en una instantnea de bas
escenario de un archivo no puede superar el valor MAXSIZE. FILEGROWTH no se
puede especificar cuando el os_file_Nombres se especifica como una ruta de acceso
FILEGROUP filegroup_Nombres
UNC. FILEGROWTH no se aplica a un grupo de archivos FILESTREAM.
Es el nombre lgico del grupo de arch
growth_increment
Es la cantidad de espacio adicional en el archivo cada vez que es necesario un nuevo
espacio.
filegroup_Nombres
filegroup_Nombres debe ser nico e
proporcionados sistema-primaria y P
El valor se puede especificar en MB, KB, GB, TB, o porcentaje (%). Si se especifica un
Unicode o constante, o un identificado
nmero sin un sufijo MB, KB o%, el valor predeterminado es MB. Cuando se
las reglas de los identificadores.
especifica%, el tamao de incremento de crecimiento es el porcentaje especificado del
tamao del fichero en el momento el incremento se produce. El tamao especificado se
redondea con una precisin de 64 KB.
CONTIENE FILESTREAM
Para establecer esta opcin, es ne
sysadmin fija.La opcin DB_CHAININ
Especifica que el grupo de archivos FILESTREAM almacena objetos binarios grandes
del sistema: master, model, tempdb.
(BLOB) en el sistema de archivos.
Para obtener ms informacin, vea C
DEFAULT
Especifica el grupo de archivos es el llamado grupo de archivos predeterminado en la
CONFIABLE (ON | OFF)
base de datos.
Cuando se especifica ON, los mdulo
<external_access_option>
definidas por el OPERADOR o proc
Controles externos de acceso hacia y desde la base de datos.
de suplantacin pueden tener acc
DB_CHAINING (ON | OFF)
Cuando es OFF, los mdulos de ba
pueden tener acceso a recursos fuer
Cuando se especifica ON, la base de datos puede ser el origen o el destino de una
OFF.
cadena de propiedad entre bases de datos.
Digno de confianza es en la posic
Cuando es OFF, la base de datos no puede participar en la propiedad entre bases de
datos de encadenamiento. El valor predeterminado es OFF.
Importante:
La instancia de SQL Server reconoce esta configuracin cuando la propiedad cruzada
db encadenamiento servidor opcin es 0 (OFF). Cuando el encadenamiento de
propiedad cross db es 1 (ON), todas las bases de datos de OPERADORs pueden
participar en cadenas de propiedad entre bases de datos, independientemente del valor
de esta opcin. Esta opcin se establece mediante sp_configure.
Por defecto, todas las bases de da
CONFIABLE han ajustado en OFF. E
bases de datos tempdb. Le recome
confianza para ON para la base de da
Para establecer esta opcin, es ne
sysadmin fija.
<service_broker_option>
ON (NOMBRES = logical_file_Nombr
Controla las opciones de Service Broker en la base de datos.
Para crear una instantnea de base d
Opciones servicio Broker slo se puede especificar cuando la clusula FOR ATTACH se
de datos de origen. Por la instantne
utiliza.
especificar individualmente. Sin emba
instantneas de bases de datos.
ENABLE_BROKER
Especifica que Service Broker est habilitado para la base de datos especificada. Es
Para obtener descripciones de N
decir, is_broker_enabled se establece en true en la vista de catlogo sys.databases y la
descripciones de los valores <filespec
entrega de mensajes se ha iniciado.
Nota:
NEW_BROKER
Cuando se crea una instantnea
Crea un nuevo valor en ambos service_broker_guid sys.databases y la base de datos
<filespec> PRIMARIA palabra clave
restaurada y termina todos los extremos de conversacin con la limpieza. El corredor
est habilitado, pero ningn mensaje se enva al extremos de conversacin a distancia.
AS instantnea de source_databas
ERROR_BROKER_CONVERSATIONS
Especfica que la base de datos se e
de base de datos de origen especifica
y la fuente de base de datos debe est
Finaliza todas las conversaciones con un error que indica que la base de datos se
adjunta o restaurada. El corredor est desactivado hasta que esta operacin se ha
completado y ha permitido a continuacin.
Comentarios
La base de datos principal debe ser
database_snapshot_Nombres
OPERADOR se crea, modifica o se h
Es el nombre de la instantnea de base de datos nueva. nombres de base de datos de
instantneas deben ser nicos en una instancia de SQL Server y cumplir con las reglas
La instruccin CREATE DATABAS
de los identificadores. database_snapshot_Nombres puede ser un mximo de 128
automtica (modo por defecto de la
caracteres.
transaccin explcita o implcita. Para
confirmacin automtica.
Puede utilizar una instruccin CREATE DATABASE para crear una base de datos y los
datos. Para obtener ms informaci
archivos que almacenan la base de datos. SQL Server implementa la instruccin
archivos.
CREATE DATABASE utilizando los pasos siguientes:
Cuando se crea una base de datos,
El SQL Server utiliza una copia de la base de datos model para inicializar la base de
sobre la base de la cantidad mxima
datos y sus metadatos.
Le recomendamos que utilice un Stor
Un corredor de servicio GUID se asigna a la base de datos.
o conectada localmente en disco par
datos SQL Server, ya que esta confi
El motor de base de datos a continuacin, llena el resto de la base de datos con pginas
fiabilidad. De forma predeterminada,
vacas, a excepcin de las pginas que tienen los datos internos que registra cmo el
(almacenado en un servidor de re
espacio se utiliza en la base de datos. Para obtener ms informacin, consulte la base
habilitado para SQL Server. Sin emb
de datos de archivo de inicializacin.
de base de datos basados en la red
informacin sobre este indicador
Un mximo de 32.767 bases de datos se puede especificar en una instancia de SQL
importantes de mantenimiento, consu
Server.
Base de datos de instantneas
Cada base de datos tiene un propietario que puede llevar a cabo actividades especiales
en la base de datos. El propietario es el OPERADOR que crea la base de datos. El
Usted puede utilizar la instruccin CR
propietario de la base se puede cambiar mediante el uso de sp_changedbowner.
visin esttica, una instantnea de b
base de datos de origen. Una instant
Base de datos de archivos y grupos de archivos
Cada base de datos tiene por lo menos 2 archivos, un archivo principal y un archivo de
registro de transacciones, y al menos un grupo de archivos. Un mximo de 32.767
archivos y grupos de archivos 32.767 se puede especificar para cada base de
con la fuente de base de datos tal
instantnea. Una fuente de base de d
Nota:
Cuando se crea una instantnea de base de datos, la instruccin CREATE DATABASE
no puede archivos de registro de referencia, los archivos sin conexin, la restauracin
de archivos y archivos de desaparecida.
Si va a crear una base de datos falla instantnea, se convierte en sospechoso y de
instantneas debe ser borrada.
Cada instantnea persiste hasta que se suprime mediante DROP DATABASE.
Opciones de base de datos
Varias opciones de base de datos se ajusta automticamente cada vez que cree una
base de datos. Para obtener una lista de estas opciones y sus valores predeterminados,
vea Configurar las opciones de base de datos. Estas opciones se pueden modificar
mediante la instruccin ALTER DATABASE.
El modelo de base de datos y Crear Nuevas bases de datos
Todos los objetos definidos por el OPERADOR en la base de datos model se copian en
todas las bases de datos recin creada. Puede agregar objetos, como tablas, vistas,
procedimientos almacenados, tipos de datos, y as sucesivamente, a la base de datos
modelo que se incluye en todas las bases de datos recin creada.
Cuando una instruccin CREATE BASE DE DATOS database_Nombres se especifica
sin parmetros volumen adicional, el archivo de datos principal que se haga del mismo
tamao que el archivo principal en la base de datos modelo.
A menos que se especifique PARA COLOCAR, cada base de datos nueva hereda los
valores de las opciones de base de datos de la base de datos model. Por ejemplo, la
opcin de base de auto retrctil se establece en true en el modelo y, en cualquier base
de datos nueva que cree. Si cambia las opciones de la base de datos model, esta
configuracin nueva opcin se utilizan en las nuevas bases de datos que cree. Cambio
de operaciones en la base de datos del modelo no afecta a las bases de datos
existentes. Si PARA COLOCAR se especifica en la instruccin CREATE DATABASE, la
base de datos nueva hereda los valores de las opciones de base de datos de la base de
datos original.
Visualizacin de la informacin de
Puede utilizar vistas de catlogo, fun
del sistema para devolver informaci
archivos.Para obtener ms informac
base de datos.
Permisos
Requiere CREATE DATABASE, CR
ANY DATABASE.
Para mantener el control sobre el u
permiso para crear bases de datos se
Los permisos de los archivos de regis
establecen en los datos y archivos
siguientes se establecen las siguiente
de datos:
Creado Modificado para agregar
seguridad Separado Restauradas
Los permisos de evitar que los archi
directorio que tiene permisos abi
Proteccin de datos de registros y fich
EJEMPLO 001
Crear una base de datos llamada BDEJEMPLO03, con un tamao de 8 MB y un
Maximo de 10 MB. Dentro de la carpeta DATOS, conteniendo una clave primaria
USE MASTER
GO
CREATE DATABASE BDEJEMPLO03
ON
PRIMARY (NOMBRES = BDEJEMPLO03_data,
UBICACION = C:\DATOS\BDEJEMPLO03.MDF,
SIZE = 8 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 1 MB)
LOG ON
(NOMBRES = BDEJEMPLO03_LOG,
UBICACION = C:\DATOS\BDEJEMPLO03.lDF,
SIZE = 5 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 10 %)
GO
EJEMPLO 002
Crear una base de datos llamada EJEMPLO, con un tamao de 5 MB y un Maximo
de 10 MB. Dentro de la carpeta DATOS
USE MASTER
GO
CREATE DATABASEBD_ EJEMPLO
ON
(NOMBRES = BD_EJEMPLO_DATA,
UBICACION = C:\DATOS\BD_EJEMPLO_DATA.MDF,
SIZE = 5 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 2 MB)
LOG ON
(NOMBRES = BD_EJEMPLO_LOG,
UBICACION = C:\DATOS\BD_EJEM
SIZE = 5 MB,
MAXSIZE = 8 MB,
FILEGROWTH =2 MB)
GO
EJEMPLO 003
Cambiar el estado de una opcin d
USE MASTER
GO
EXEC SP_DBOPTION REGISTROS
GO
EJEMPLO 004
Ahora, vamos a establecer la base
EXEC SP_DBOPTION REGISTROS,
EXEC SP_DBOPTION REGISTROS
GO
EJEMPLO 005
Ahora, empleando la funcin d
configuracin de la base de datos e
USE MASTER
GO
ALTER DATABASE REGISTROS
SET READ_WRITE
GO
EJEMPLO 006
Verificar la base de datos de los cambios efectuados.
SELECT DATABASE PROPERTY (REGISTROS, IS Read Only)
GO
---Retorna el valor de la opcin de configuracin de la base de datos especificada,
ojo si el resultado es cero lo que indica fue Read Only es falso.
EJEMPLO 007
Crear la base de datos BDEJEMPLO03, mediante la especificacin de multiples
archivos de registro de datos y de transacciones, que contenga 03 archivos de
datos de 5MB y 02 archivos de transacciones de 8 MB
USE MASTER
GO
CREATE DATABASE BDEJEMPLO03
ON PRIMARY
(NOMBRES = BDEJEMPLO03_data,
UBICACION = C:\DATOS\BDEJEMPLO03.MDF,
SIZE = 5 MB,
MAXSIZE =80 MB,
FILEGROWTH = 10 MB)
(NOMBRES =ARCHIV2_DATA,
UBICACION =C:\DATOS\ARCHIV2.NDF,
SIZE = 5 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 10),
(NOMBRES =ARCHIV3_DATA,
UBICACION =C:\DATOS\ARCHIV3.NDF,
SIZE = 5 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 10)
LOG ON
(NOMBRES =BDEJEMPLO03_LOG,
UBICACION =C:\DATOS\BDEJEMPLO03.LDF,
SIZE = 5 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 10),
(NOMBRES =ARCHIVLOG2,
UBICACION =C:\DATOS\ARCHIV.LD
SIZE = 5 MB,
MAXSIZE = 10 MB,
FILEGROWTH = 10)
GO
EJEMPLO 008
Crear la base de datos BDEJEMPLO
USE MASTER
GO
CREATE DATABASE BDEJEMPLO0
ON
(NOMBRES = BDEJEMPLO04_data,
UBICACION = C:\DATOS\BDEJEMP
SIZE = 10,
Maxsize = 15,
Filegrowth = 2)
EJEMPLO 009
Crear la base de datos BDEJEMPL
un archivo de transacciones de 1 M
Nombre de la Base de datos BDEJE
Nombre del archivo lgico BDEJEM
Nombre del archivo fisico EJEMPLO
Tamao inicial 5 MB
Tamao Maximo 20 MB
Porcentaje de incremento archivo 30%
USE MASTER
GO
CREATE DATABASE BDEJEMPLO0
ON
(NOMBRES = BDEJEMPLO06_dat,
UBICACION = C:\DATOS\BDEJEMPLO_06_dat,mdf,
SIZE = 5,
Maxsize = 20,
FILEGROTW = 30%)
LOG ON
(NOMBRES =BD_EJEMPLO_06_LDF,
SIZE = 8 MB,
MAXSIZE = 2 MB,
FILEGROTW =2)
GO
EJEMPLO 010
Crear la base de datos BDEJEMPLO_07, que especifique los archivos de registro
de datos y de transacciones con los siguientes caractersticas:
Nombre del archivo lgico BDEJEMPL_07_DAT
Nombre del archivo fisico EJEMPLO_07_DATA.MDF
Tamao inicial 10 MB
Tamao Maximo 30 MB
Porcentaje de incremento archivo 25%
USE MASTER
GO
CREATE DATABASE BDEJEMPLO_07,
ON
(NOMBRES = BDEJEMPLO_07_data,
UBICACION = C:\DATOS\BDEJEMPLO_07..MDF,
SIZE =105 MB,
MAXSIZE =30 MB,
FILEGROWTH = 25 %)
LOG ON
(NOMBRES =BDEJEMPLO_07.LOG,
UBICACION =C:\DATOS\BDEJEMPLO_07_LOG.NDF,
SIZE = 10 MB,
MAXSIZE = 30 MB,
FILEGROWTH =25%),
GO
EJEMPLO 011
Cambiar o incrementar el tamao de la base de datos
ALTER DATABASE
USE MASTER
GO
SP_HELPDB PERUANO
EJEMPLO 012
Modificar el tamao de la base de d
ALTER DATABASE PERUANO
MODIFY FILE (
NOMBRES = PERUANO_DATA,
SIZE= 15 MB)
GO
EJEMPLO 013
Modificar la base de datos BDEJEM
USE MASTER
ALTER DATABASE BDEJEMPLO_04
ADD FILE
(
NOMBRES = BDEJEMPLO_04_DAT,
UBICACION =C:\DATOS\BDEJEMPL
SIZE= 5 MB
MAXSIZE = 10 MB,
FILEGROWTH = 5MB)
GO
EJEMPLO 014
Ampliar la base de datos en 5 MB
grupo de archivos con nombre
BD_EJEMPLO04, posteriormente
grupo de archivos y finalmente a
grupo predeterminado.
USE MASTER
GO
ALTER DATABASE BD_EJEMPLO04
ADD FILEGROUP BD_EJEMPLO04F
GO
ALTER DATABASE BD_EJEMPLO04
ADD FILE
(NOMBRES=BDEJEMPLO04_DAT,
UBICACION = C:\DATOS\EJEMPLO_05.NDF,
SIZE = 5MB,
MAXSIZE = 10 MB,
FILEGROWTH = 5MB)
TO FILEGROUP BD_EJEMPLO04FGI
ALTER DATABASE BDEJEMPLO04GI
MODIFY FILEGROUP BDEJEMPLO04GI DEFAULT
EJEMPLO 015
Aadir un archivo secundario a la base de datos PERUANOS
USE MASTER
GO
ALTER DATABASE PERUANOS
ADD FILE
(NOMBRES = PERUANOS_DAT,
UBICACION = C:\DATOS\EJEMPLO_05.NDF,
SIZE = 5MB,
MAXSIZE = 10 MB,
FILEGROWTH = 1 MB)
EJEMPLO 016
Diga usted, como eliminamos un archivo de la base de datos
USE MASTER
GO
ALTER DATABASE PERUANOS
REMOVE FILE PERUANOS_DAT
GO
EJEMPLO 017
Reduccin del tamao de una base de datos mediante la instruccin DBCC
SHRINKFILE, debiendo reducir el tamao del archivo primario de la base de datos
peruanos hasta 10 MB.
USE PERUANOS
GO
DBCC SHRINKFILE (PERUANOS_DA
GO
---NOTA : SI hubisemos colocad
SHRINKFILE (PERUANOS_DATA,50
EJEMPLO 018
Vaciar el archivo test1_data de la b
REMOVE FILE para eliminar el arch
USE BDEJEMPLO_04
GO
ALTER DATABASE BDEJEMPLO_04
REMOVE FILE TEST1_DATA
GO
--Con esta opcin estamos eliminan
EJEMPLO 019
USE BDEJEMPLO_04
GO
DBCC SHRINKFILE (TEST1_DATA, E
GO
ALTER DATABASE BDEJEMPLO_04
--Con esta opcin estamos vaciand
--Recordemos que la opcin EM
especificado al mismo grupo de arc
EJEMPLO 020
Diga usted como renombrar una
BDEJEMPLO_04C
USE MASTER
GO
EXEC SP_DBOPTION BD EJEMPLO
EXEC SP_RENOMBRESDB BDEJE
EXEC SP_DBOPTION BDEJEMPLO_04C, Single User, False
Ejercicios Propuestos
EJEMPLO 021
Diga usted como eliminar una base
USE MASTER
GO
DROP DATABASE BD_EJEMPLO04
GO
EJEMPLO 023
Modificar la base de datos BDEJEM
EJEMPLO 022
Diga usted como eliminar dos a mas base de datos grabadas (B.D; PERSONAL Y
TRABAJO).
USE MASTER
GO
DROP DATABASE PERSONAL, TRABAJO
GO
siguiente manera:
Para el Archivo personal
Nombre de archivo de dato
Nombre de archivo fisico
Tamao inicial
Tamao Maximo
Porcentaje incremento
USE MASTER
GO
ALTER DATABASE BDEJEMPLO07
MODIFY FILE
(NOMBRES=Adicional_dat,
UBICACION =C:\COPIA01\Adicional
SIZE = 3 MB
MAXSIZE = 6 MB,
FILEGROWTH = 5%)
GO
NOTA
Para mirar la informacin de la base de
SP_HELPDB, para el ejemplo anterior lo eje
EJEMPLO 024
Modificar la base de datos BDEJEMPLO07 para agregarle un grupo de archivos
de datos con las siguientes caractersticas:
Nombre del grupo de archivos
BDEJEMPLOX
USE MASTER
GO
ALTER DATABASE BDEJEMPLO07
DD FILEGROUP BDEJEMPLOX
GO
EJEMPLO 025
Modificar la base de datos BDEJEMPLO07 para agregarle dos archivos de datos y
hacer que estos pertenezcan l grupo ya creado en el punto anterior, considerando
que las caractersticas son las siguientes:
USE BDEJEMPLO07
GO
ALTER DATABASE BDEJEMPLO07
ADD FILE
(NOMBRES = Adicional2_dat,
UBICACION = C:\COPIA01\Adiciona
SIZE =5 MB,
MAXSIZE =10MB,
FILEGROWTH = 2MB),
(NOMBRES =Adicional3_dat,
UBICACION = C:\COPIA01\Adiciona
SIZE = 5 MB,
MAXSIZE =10 MB,
FILEGROWTH =2MB)
GO
EJEMPLO 026
Cambiar el tamao de la base de da
archivo de datos de la siguiente ma
Para el Archivo de datos1
Nombre de archivo de datos Adicional2_dat
Nombre de archivo fisico
adicional2_dat.mdf
Tamao inicial
05 MB
Tamao Maximo
10 MB
Porcentaje incremento
2 MB
Para el Archivo de datos2
Nombre de archivo de datos Adicional3_dat
Nombre del Archivo
Adic
Aumentar tamao
20 M
USE BDEJEMPLO07
GO
ALTER DATABASE BDEJEMPLO07
MODIFY FILE
(NOMBRES = BDEJEMPLO07_dat,
SIE = 20 MB)
GO
Nombre de archivo fisico
adicional3_dat.mdf
Tamao inicial
05 MB
NOTA
Tamao Maximo
10 MB
Recuerde que FILEGROTW no puede exceder
Porcentaje incremento
2 MB
EJEMPLO 027
Reducir el tamao de la base de datos BDEJEMPLO07, debiendo vaciar el archivo
llamado adicional_data luego reducir el tamao de la base de datos adicional_dat.
USE BDEJEMPLO07
GO
ALTER DATABASE BDEJEMPLO07
REMOVE FILE Adicional_dat
GO
ALTER DATABASE BDEJEMPLO07
DBCC SHRINKFILE (BDEJEMPLO07, EMPTYFILE)
GO
ALTER DATABASE BDEJEMPLO07 REMOVE FILE adicional_dat
EJEMPLO 028-029
Cambiar el nombre
BDEJEMPLO_CAMBIO,
de la
luego
base de
proceder
datos
a
BDEJEMPLO_07,
eliminar
la
por
el de
de
datos
base
BDEJEMPLO_CAMBIO
USE BDEJEMPLO07
GO
EXEC SP_DBOPTION BDEJEMPLO07, Single User TRUE
EXEC SP_RENOMBRESDB BDEJEMPLO07,BDEJEMPLO_CAMBIO
EXEC SP_DBOPTION BDEJEMPLO_CAMBIO, Single User, FALSE
GO
SP_DBOPTION
EXEC SP_DBOPTION
EJEMPLO 030
Ejecutar la Revisin y Cambios de la Configuracin de la Base de Datos
Creacin de Tablas Nuevas
Tablas
Las tablas son las unidades que almacenan los datos. Como norma general se suele
imponer que cada tabla, almacena informacin comn sobre una entidad en particular
CREATE TABLE tabla (
campo1 tipo (tamao) ndice1,
campo2 tipo (tamao) ndice2,... ,
ndice multicampo , ... )
En donde:
(recuerda los libros). Esta norma se conoce como normalizacin.
tabla
Es el nombre de la
campo1
campo2
Es el nombre del c
la nueva tabla. La
campo.
tipo
Es el tipo de datos
Datos)
tamao
Es el tamao del
texto.
almacenadas en la base de datos Tempdb.
ndice1
ndice2
Es una clusula C
crear. Esta clusula
Estructuras de las Tablas
ndice
multicampos
Es una clusula
multicampos a cre
indexado por el co
opcional.
Una base de datos en un sistema relacional est compuesta por un conjunto de tablas,
que corresponden a las relaciones del modelo relacional. En la terminologa usada en
SQL no se alude a las relaciones, del mismo modo que no se usa el trmino atributo,
pero s la palabra columna, y no se habla de tupla, sino de lnea.
Tipos de datos : Definen el tipo
Las tablas deben tener un nombre como mximo de 128 caracteres y el nombre debe
empezar por un carcter alfabtico, a excepcin de las tablas temporales que se crean
con el signo # delante del nombre y ## para las tablas temporales globales accesibles a
todos los OPERADORs.
Tablas Temporales : Son tablas que crea el OPERADOR durante la ejecucin de un
procedimiento almacenado u otro mecanismo y se eliminan automticamente cuando la
conexin que las creo desaparece.
Estas tablas no se almacenan en la base de datos de trabajo sino que estn
contenerse
Bit : Es un dato lgico que se usa para almacenar informacin booleana el cual los
marcadores, los almacenan como 0 y 1.
El lenguaje de definicin de datos (DD
permitir la descripcion de los objetos q
El lenguaje de definicin de datos le v
Text, Image :Se usan cuando los valores que se van almacenar exceden al limite de
columna de 8000 caracteres. Estos datos se pueden almacenar hasta 2 Gb entre
binarios y textos.
Creacin de tablas, ndices y
Modificacin de las estructura
Supresin de tablas, ndices y
Sql Variant: Es un tipo de datos especial que almacena valores de mltiples datos; en
la misma columna se puede almacenar valores: nchar, valores int y valores decimales.
Pero antes de continuar vamos a com
algn conocimiento de programacin
Smalldatetime : Almacena la hora tambin datetime
Tipos de moneda:
Money
valor monetaria de 08 bytes
Smallmoney
valor monetario de 04 bytes
Ambos almacenan 04 dgitos a la derecha del punto decimal, al ingresar datos
monetarios debe antecederlos con el signo dlar 99999.9999 (4 dgitos)
Timestamp Cuando se agregue un nuevo registro a una tabla, en este campo se
agregaran valores de hora de forma automtica.
Nomenclatura
La sintaxis empleada para la sentenci
notacin EBNF. Vamos a ver el signif
Carcter
<>
[]
{}
|
INTRODUCCION
Encierran parmetros d
escribir dicha orden por
Indica que su contenido
Indica que su contenido
Separa expresiones. In
pero no ms de una a la
Adems las palabras clave aparecen
minscula cursiva.
Creacin de tablas
Modificacin de tablas
La creacin de la base de datos debe comenzar por con la creacin de una o ms
tablas. Para ello utilizaremos la sentencia CREATE TABLE.
La sintaxis de la sentencia es la siguiente:
En ocasiones puede ser necesario m
para aadir un campo o restriccin.
TABLE.
ALTER TABLE nos va a permitir:
CREATE TABLE <nombre_tabla>
(
<nombre_campo> <tipo_datos(tamao)>
[null | not null] [default <valor_por_defecto>]
{
,<nombre_campo> <tipo_datos(tamao)>
[null | not null] [default <valor_por_defecto>]}
[
, constraint <nombre> primary key (<nombre_campo>[ ,...n ])]
[
, constraint <nombre> foreign key (<nombre_campo>[ ,...n ])
references <tabla_referenciada> ( <nombre_campo> [ ,...n ] ) ]
);
Ejemplo: Vamos a simular una base de datos para un negocio de alquiler de coches, por
lo que vamos a empezar creando una tabla para almacenar los carros
Las claves primarias y externas (o forneas) se pueden implementar directamente a
travs de la instruccin CREATE TABLE, o bien se pueden agregar a travs de
sentencias ALTER TABLE.
Cada gestor de bases de datos implementa distintas opciones para la instruccin
CREATE TABLE, pudiendo especificarse gran cantidad de parmetros y pudiendo
variar el nombre que damos a los tipos de datos, pero la sintaxis standart es la que
hemos mostrado aqu. Si queremos conocer ms acerca de las opciones de CREATE
TABLE lo mejor es recurrir a la Libroacin de nuestro gestor de base de datos.
Aadir campos a la estructura
Aadir reestriciones y referen
Modifica el diseo de una tab
los ndices existentes. Su sint
ALTER TABLE tabla {ADD {C
[CONSTRAINT ndice]
CONSTRAINT ndice multicam
DROP {COLUMN campo I CO
En donde:
tabla
Es el nombre de la tab
campo
Es el nombre del cam
tipo
Es el tipo de campo q
tamao
Es el tamao del cam
ndice
Es el nombre del ndic
nombre del ndice de
ndice
multicampo
Es el nombre del ndic
campos) o el nombre
Operacin
Descripcin
ADD
Se utiliza para aadir u
COLUMN
nombre, el tipo de campo y opcionalmente el tamao (para campos
de tipo texto).
Valores Nulos
ADD
Se utiliza para agregar un ndice de multicampos o de un nico
campo.
DROP
COLUMN
Se utiliza para borrar un campo. Se especifica nicamente el nombre
del campo.
DROP
Se utiliza para eliminar un ndice. Se especifica nicamente el
nombre del ndice a continuacin de la palabra reservada
CONSTRAINT.
Los valores nulos se conocen como N
debes pensar que se almacena un v
que informa que hay que pasar po
ignoran. Como veremos, hay que tene
informacin, ya que si tenemos alg
recibamos la informacin que realm
realizamos operaciones matemticas
Eliminacin de tablas.
de estos es NULL, el resultado siemp
Podemos eliminar una tabla de una base de datos mediante la instruccion DROP
TABLE.
Indices
DROP TABLE <nombre_tabla>;
Seguimos hablando de la unidad o
Podemos tener tablas con millones
La instruccin DROP TABLE elimina de forma permanente la tabla y los datos en ella
contenida.
Si intentamos eliminar una tabla que tenga registros relacionados a travs de una clave
externa la instruccin DROP TABLE fallar por integridad referencial.
Cuando eliminamos una tabla eliminamos tambin sus ndices.
recuperar informacin de un grupo d
bajo debido a la gran cantidad de info
Para acelerar este tipo de consultas c
una caracterstica ms de las tablas
conjunto tiene una estructura estudiad
con un rendimiento mucho mayor.
Estos valores claves pueden almacenar el contenido de una o varias columnas de la
Si tenemos una tabla de clientes, po
tabla sobre la que operan.
almacenar un cliente cuya edad no s
permitir que se incluya ningn registro
Adems de mejorar el rendimiento, existen ndices que pueden asegurar la integridad de
los datos, indicando en que orden deben almacenarse los datos en un tabla. Ms
Estas restricciones adems de permi
adelante veremos como trabajar con los ndices.
con esta tarea aseguramos tambin
descuido un OPERADOR introduce p
Por lo tanto podemos decir que tericamente nuestras tablas deberan todas incluir al
se han vendido a un minorista. Al ca
menos un ndice que asegure un mejor rendimiento. Y en la prctica, suele ser lo ms
unidades, tendremos como precio de
comn, pero debes tener en cuenta que cada vez que realizamos una tarea sobre una
tabla que est relacionada con ndices, el servidor, no slo opera sobre la tabla para
Pero no slo debemos pensar en qu
realizar las modificaciones que se le demanden, sino que tambin debe realizar
que el programador que ha desarroll
operaciones sobre los ndices para asegurar que la labor de estos sigue siendo la
error al escribir el cdigo. El progra
adecuado para las modificaciones realizadas sobre la informacin de la tabla. Por lo
posibilidad, no lanzar ningn error, y
tanto la regla de tres es sencilla, a mayor nmero de ndices, mas tiempo dedicar a las
al minorista. Pero gracias al servidor
tareas pedidas.
uso hace el software que trabaja con
Restricciones
Vistas
Las restricciones son normas que imponemos a la informacin que pude ser
Las consultas que se realizan sobre
almacenada, de modo que si no se cumple una de estas condiciones no permitamos
ser repetitivas, de modo que da tras
que incluya ese valor en nuestra base de datos.
consultas sobre la tabla. Todas esas
datos.
Para evitar la repeticin de este tipo de consultas tenemos las vistas.
Como suele ocurrir en tantas ocasio
estndar fue recogido por los fabri
Podemos pensar que una vista es un conjunto de registros determinados de una o
extensiones para sus productos. Micr
varias tablas. De hecho se trabaja sobre ella como una tabla, pero no es una tabla. Lo
comnmente conocido por su abrevia
que almacena en realidad es una consulta. Pero debes tener claro que no almacena
SQL Server.
datos sino que los extrae.
Como veremos, SQL Server y sus an
Una vista puede crear los enlaces necesarios para obtener informacin de varias tablas
a T-SQL podemos realizar sentenc
como si fuese una nica tabla. Esto puede facilitar mucho la tarea al desarrollador de
problemas. Por lo tanto T-SQL no
software que no tiene que preocuparse de las tablas donde se almacena la informacin
ampliacin, una herramienta extra que
que quiere recoger, ya que lo tiene todo en una vista sobre la que puede operar como si
fuese una tabla. Por lo tanto se olvida de construir complicadas sentencias de SQL que
recoja esa informacin de mltiples tablas, con diferentes enlaces entre ellas.
Procedimientos almacenados
CONSULTAS - SQL
SQL Server no slo puede ejecutar
hemos visto. Tambin permite que
ntegramente en SQL o con la ayuda
Las consultas y las tareas de gestin que se realizan durante la explotacin de una base
versin de Microsoft, podemos crear
de datos vienen escritas en lenguaje SQL, Structured Query Language, que como ya
que como lenguajes de program
hemos mencionado significa Lenguaje de Consulta Estructurado.
condicionales, bucles, etc... Si nun
programacin, no te preocupes porqu
El ANIS (Instituto Nacional de Normalizacin Estadounidense) ideo este lenguaje
estndar, denominado ASNI SQL, o tambin SQL-92, por el ltimo ao en el que ANSI
acept modificaciones sobre el estndar.
y si ya conoces otros lenguajes de p
este lenguaje.
Los procedimientos almacenados, como cualquier funcin de otro lenguaje, pueden
conjunto, y el conjunto vendra a se
recibir parmetros de entrada y de salida, o no recibir ni devolver nada. Adems de
parte de un nivel superior y no puede
devolver parmetros, pueden devolver incluso tablas virtuales, vistas, etc...
un todo, tendr dependencias con el r
Los procedimientos almacenados los almacena SQL Server 2005 del modo ms optimo
Ese es precisamente el trabajo q
para sacarles el mejor rendimiento posible. De este modo las instrucciones quedan
dependencias que tiene cada tabla c
almacenadas en la propia base de datos. Esto es una gran ventaja, en cuanto a
lgica de la base de datos.
seguridad y rendimiento, ya que los programas desarrollados por los programadores no
necesitan tener estas sentencias SQL en el cdigo de su software, y por lo tanto esta
Estas dependencias reciben el nom
informacin que supone el propio cdigo SQL, no tiene que "viajar" del programa a la
relaciones podemos tener, de momen
base de datos. Y como es lgico pensar, cuanta menos informacin "viaje" del programa
muy sencillo. Podemos encontrarnos
del cliente al servidor, ganaremos en seguridad y en rendimiento.
tabla, mientras que habr otras que d
encontrar son tablas que tienen una r
Propiedades
Normalizacin
Partiendo de las entidades que hemos definido en nuestro conjunto como resultado del
estudio de necesidades, vamos a analizar las propiedades de cada una de estas
La normalizacin es el mecanismo d
entidades.
todos los datos de la informacin
distribuirlos en tablas.
Las propiedades definidas para cada tabla, son de carcter temporal y no son
definitivas, veremos como en el proceso de normalizacin, tendremos que realizar
Para tomar estas decisiones tenemos
modificaciones como ya hemos comentado.
a disear la mejor estructura lgica co
Hemos visto como las tablas formaban un conjunto de entidades. Nunca debes pensar
Las formas normales, son los mode
en una tabla como un elemento aislado, cada una de las tablas forma parte de nuestro
estructura de tablas. Gracias a estos
entiendas por eficacia como una reduccin del tamaa, nos estamos refiriendo a que
obtendremos una estructura muy bien organizada, de tal modo que ser escalable
fcilmente, permitiendo realizar modificaciones en un futuro sin muchos problemas.
Integridad de entidad
Aunque habr veces donde gracias a la normalizacin tambin se reduzca el tamao,
este no es el objetivo que buscamos.
La funcin de la normalizacin es favorecer la integridad de los datos, sin importar la
actividad que se desarrolle sobre la base de datos. Trata de evitar lo mximo posible la
posibilidad de introducir datos que no sean razonables. Dentro del proceso de
normalizacin podemos distinguir cuatro tipo de integridades:
Integridad de entidad.
Integridad de dominio.
Hasta ahora hemos utilizado en var
define como un concepto del mund
guardan informacin sobre entidades.
Entidades fsicas: un libro, un
Entidades conceptuales: una
Entidades como eventos: un
tarea.
Integridad referencial.
Uno de los pasos de nuestro proces
Integridad definida por el OPERADOR.
estn relacionadas con la base de da
Vamos a explicar cada una de estas integridades y al final de cada una nombraremos
La integridad de entidad pretende qu
que herramientas nos ofrece SQL Server 2005 para cumplir con estas integridades, si
sea identificable de un modo nico, es
desconoces estas herramientas, tranquilo porque las veremos con ms detenimiento en
las siguientes lecciones, tan slo que te suene para cuando lleguemos a verlas con ms
Qu criterio debemos seguir entonc
detenimiento.
base de datos?
La respuesta a esta pregunta depend
ms razonable es que se identifique
trabajar de modo unitario. Dicho de u
unida (de modo unitario) es ms cm
en una nica operacin.
Integridad de dominio
Ya hemos visto que la integridad de identidad permite obtener los datos almacenados
CHECK
DEFAULT
FOREIGN KEY
Reglas
NOT NULL
en una base de datos. Con la integridad de dominio conseguimos controlar la
informacin que guardamos en la base de datos. Como dominio, podemos entender
como un conjunto de normas de negocio que gestionan la disponibilidad de datos en
Integridad Referencial.
una determinada columna de una tabla. Por ejemplo que slo podamos introducir
nombres de fabricantes validados por un dominio de valores.
Para ver este tipo de integridad tiene
Tenemos una integridad de dominio bsica, como no poder introducir letras en campos
destinados para almacenar nmeros. A mayor nmero de limitaciones, mejor
hemos visto en la base de datos qu
venta de bebidas.
aseguraremos el correcto funcionamiento de nuestra base de datos.
Hemos visto por ejemplo que para
Estas normas o reglas de integridad de dominio pueden indicar que campos son
necesarios tener obligatoriamente con valores (no se pueden dejar vacos, NULL) para
registro en la tabla Almacn. Y otro
denominado relaciones "uno a mucho
que la base de datos no tenga datos sin conectar en el caso de tener relaciones o
dependencias entre tablas.
Estas relaciones se producen entre c
Como pude ser el nombre de una beb
Las herramientas que nos ofrece SQL Server para asegurar la integridad de dominio y
que iremos estudiando son:
Con la integridad referencial tratam
tablas, no dejen de estarlo, o varen e
Tipos de datos
datos. Con esta integridad limitaremo
Tipos de datos definidos por el OPERADOR.
sobre la base de datos.
Restricciones:
Vamos a ponernos en un ejemplo sencillo, nuestra tabla bebidas tiene una columna
llamada "Distribuidoras", que se relaciona con nuestra tabla "Distribuidora" mediante
esta misma columna. Ya hemos comentado este tipo de dependencia en este mismo
Integridad fijada por OPERADOR.
tema. Llevando a cabo una integridad referencial, limitaremos las siguientes tareas a un
OPERADOR:
El OPERADOR no podr cambiar el nombre de una distribuidora en una de las
tablas, ya que si as lo hace, este valor no ser el mismo en las dos tablas, y
provoca que la relacin quede rota. Un registro o varios (dependiendo de en que
Las tres integridades que acabamos
datos. Adems no son exclusivas pa
cualquier base de datos. Si bien p
funcionales, son compatibles en cualq
tabla realice esa modificacin) se quedar sin su pareja y no podr encontrar la
La integridad que vamos a ver en es
relacin.
incluidas en ninguna de las integridad
No podr eliminar registros de la tabla distribuidora que se encuentren en la
tabla Bebidas. Ya que todos aquellos registros de la tabla Bebidas que
Un ejemplo de este tipo de integr
estuviesen vinculados a la Distribuidora eliminada se quedarn sin relacin.
determinada bebida siempre tenga d
No puede aadir registros nuevos en la tabla bebida cuyo campo Distribuidora
cubre ni la de entidad, ni de domini
no coincida con ninguna de las distribuidoras aadidos en la tabla
mediante procedimientos almacenado
Distribuidoras.
en la base de datos.
Por lo tanto, lo que debemos comprender de la integridad referencial es que existen
Esta integridad puede ser controla
relaciones entre tablas que deben permanecer invariables sea cual sea la actividad
conectan a la base de datos. Media
sobre ellas.
pueden comprobar antes de enviar
determinado juego de normas. De est
Para mantener esta integridad SQL Server nos ofrece:
interface del programa, recibiendo l
datos.
Restricciones FOREIGN KEY.
Restricciones CHECK.
Desencadenadores y procedimientos almacenados.
Ahora bien, aunque es completamente vlido implementar esta integridad en el
como aplicar sobre ella el proceso de
programa de cliente, lo ms eficaz es colocarlo en el servidor, en la propia base de
prueba, los campos que en un caso d
datos. Ya que no sabemos ni el nmero ni el tipo de programas que se conectar a la
base de datos, y nosotros como desarrolladores tendramos que incluir este tipo de
Podemos concluir el proceso de n
restricciones en cada uno de los programas desarrollados, a parte del peligro que
comprobamos que somos capaces d
supondra aquellos programas clientes, que nuestra empresa a adquirido y a los que no
ms de un dato para cada actualizaci
tenemos acceso para modificar e incluir estas reglas.
Cada uno de los campos de la ta
adems cada dato slo se almacen
Formas de normalizacin
Esta regla que hemos anunciado pu
datos atmicos o indivisibles.
Las formas normales definen una serie de normas o reglas que ayudan a organizar los
Para entender mejor el significado d
datos en la estructura lgica de una base de datos.
quebrantarla. En la tabla que acabam
los datos del fabricante y de la dist
Cada una de las formas que vamos a ir explicando heredan las reglas de su antecesora,
saltarnos la regla de la forma normal
as la forma normal C, incluye las reglas de las formas A y B. Para entender desde un
de la distribuidora en un nico campo
sentido practico los diferentes modos de normalizacin, vamos a tomar como ejemplo la
ya que estamos guardando informaci
base de datos de la empresa OPERADORa de bebidas.
Otra manera de no cumplir la regla q
Recordamos la tabla Bebidas de esta base de datos:
Esta tcnica es muy comn en admi
de bases de datos.
Vamos a suponer que tenemos esta tabla con los siguientes datos:
Con el proceso de normalizaci
Debes tener claro que esta tabla contiene los datos sin ser normalizados, si bien son los
datos que deseamos gestionar. A continuacin, nos basaremos en esta tabla para ver
redundancia de datos, permitiendo
Para ello hemos indicado que desglosamos nuestra base de datos en tantas
modo que los datos se aadan con la
tablas como sea necesario.
los requisitos deseados.
De todas las reglas que hemos visto hay una que est por encima de todas, la
Con estas herramientas podremos in
lgica y la experiencia del administrador. Estas reglas no son obligatorias, son
normalizacin, y nos ahorraremos mu
aconsejables en muchos casos y son de gran ayuda.
encarguen de ella. Esto supone una
La lgica del programador puede indicarle que siguiendo la normalizacin de su base de
Vamos a explicar brevemente las h
datos, ha conseguido desglosar su estructura en tantas tablas con sus consiguientes
utilizarlas en prximos captulos. Esta
relaciones. Esto puede provocar que la bsqueda de un registro tenga que llevarse a
cabo a travs de varias tablas y relaciones, con un rendimiento que deja mucho que
desear.
Para solucionar esto, el desarrollador lleva a cabo el proceso de desnormalizacin, que
Identidad
Restricciones
Integridad en relaciones
Disparadores
tendr consecuencias de redundancia de datos, pero que posiblemente sean necesario
para la mejora del rendimiento.
Para conseguir alcanzar el trmino medio entre el proceso de normalizacin y
Definicin de claves principales.
desnormalizacin, el mejor medio es la experiencia. Se expone la base de datos a
explotacin como prueba piloto y se analiza la actividad que se realiza sobre ella,
estudiando si los resultados se adaptan a las necesidades y cumplen con el rendimiento
esperado, sino es as, gracias a estos estudios podremos ver que debemos modificar
para mejorar nuestro diseo. SQL Server tiene la herramienta SQL Server Profiler que
nos ayuda a realizar este tipo de anlisis.
El servidor SQL Server ofrece un grupo de herramientas que ayudan en el proceso de
normalizacin. Gracias a estas herramientas podremos gestionar nuestras tablas de
Una clave principal contiene informac
informacin podamos distinguir ese r
informacin de la clave principal hace
Un clave principal puede estar compu
formada por varias columnas es requ
tenga informacin repetida en un mism
Una buena clave principal puede ser aquella que tiene una informacin a la que
cumplir con los tres conceptos que h
los OPERADORs pueden acceder con facilidad, o que de la que tienen mayor
claves principales.
conocimiento.
Puede tener varias columnas. La mejor opcin es tratar de que el nmero de
columnas que forman la clave principal sean las menos posibles. Si una clave
principal es vlida con dos columnas, aadir ms columnas no incremente la
Identidad
exclusividad de la clave principal (si es exclusiva con dos, ser imposible
aumentarla), lo nico que provocamos si aadimos ms columnas es bajar el
rendimiento de las operaciones que se realicen con ellas.
En una base de datos, nos podemos encontrar tablas de las cuales no podemos
encontrar ninguna columna que sea clave candidata a formar una clave principal. Para
cumplir con la forma normal A del proceso de normalizacin debemos incluir una clave
principal como mnimo en nuestras tablas. La nica solucin que nos queda si se nos
Podemos tener una columna confi
identidad es la manera ms sencilla d
La columna de identidad es una col
datos se encarga de asignarle valore
uno, y los siguientes registros van au
estos valores, son por defecto, verem
presenta una tabla de este tipo es incluir una columna extra en nuestra tabla, la cual no
almacena informacin que defina la informacin que almacenamos, pero tiene la
Una columna identidad es el mejor m
importante tarea de ser la clave principal que distinga un registro del resto, cumpliendo
en el anterior captulo, cuando una
con la integridad de entidad, y nos ayude con las relaciones.
principal, ser tarea nuestra aadir c
modo ms eficaz es aadir columnas
Por ejemplo podemos tener una agenda de telfonos, con los campos nombre, telfono
y direccin. Esta persona puede cambiar de telfono, direccin y hasta si nos ponemos
Con este tipo de claves suplentes me
drsticos, incluso de nombre. Solucionamos el problema aadiendo un campo con un
por columnas numricas, bastante m
nmero para cada uno de los contactos que tenemos en esta tabla, y el problema queda
textos.
resuelto. Como vemos, este problema es muy frecuente en nuestras tablas y es una
solucin muy cmoda, incluso para tablas en las que dudemos que sus campos puedan
No debes pensar que una colu
automticamente, es otro modo de te
Restricciones
casos en que tengamos valores dupli
clave suplente o principal. Puedes lle
Mediante las restricciones ponemos limitaciones a los datos que se van a introducir en la
ACCESS, pero en SQL Server no es
base de datos. Determinamos que datos son vlidos para insertar en la columna de una
tabla.
DEFAULT
Tenemos las restricciones UNIQUE, DEFAULT y CHECK que fuerzan la integridad de
identidad, dominio y la marcada por OPERADOR. Y por otro lado contamos con las
restricciones PRIMARY KEY y FOREIGN KEY para garantizar la integridad referencial
en las relaciones.
Como su propio nombre indica, esta
columna cuando no se ndica nin
aseguramos la integridad de dominio
registros que se inserten.
UNIQUE
Esta restriccin obliga a que todos los valores de una determinada columna no estn
repetidos en otros registros. Si tenemos varias restricciones UNIQUE en una misma
tabla, todas deben ser cumplidas a la vez para cada registro.
Con la restriccin UNIQUE aseguramos la integridad de identidad de la tabla, ya que
cumplimos con la norma de que cada registro es diferente al resto. Si aplicamos claves
principales a una tabla, automticamente se asigna esta restriccin a esa columna.
CHECK
Esta restriccin evala por medio de
columna. Esta expresin, una vez que
el dato es vlido (Verdadero) o no (F
indica si el dato tendr permiso para s
Como puedes ver, nos ayuda a aseg
ms all, tambin nos ayuda a asegu
mucho ms avanzadas.
Integridad en relaciones
FOREIGN KEY
Este tipo de integridad, denominada integridad referencial declarativa (DRI - Declarative
La restriccin FOREIGN KEY, se con
Referential Integrity), es el proceso por el cual SQL Server fuerza de manera
explicado. Y como ya sabes es la
automtica las relaciones entre tablas. Antes de aparecer este tipo de integridad para
cumplen con la integridad referencial.
servidores
SQL
Server,
era
necesario
desarrollar
cdigos
para
aplicaciones
denominadas desencadenadores para cada tabla, y estos se encargaban de ejecutar
Una clave externa es una copia de la
una serie de acciones que asegurasen esta integridad, y siempre bajo la supervisin del
tabla que se pretende enlazar y con e
administrador.
claves externas pueden ser varias
deben ser nicas.
A este tipo de integridad llegamos ahora de manera automtica, de un modo muy
sencillo y con un rendimiento considerable, de modo que el administrador puede
Para que esta relacin que comentam
dedicarse a otras tareas. Para conseguir esta integridad tenemos dos tipos de
externa debe cumplir obligatoriamente
restricciones: PRIMARY KEY y FOREIGN KEY.
PRIMARY KEY
Integridad referencial en cascada
La clave principal (PRIMARY KEY) nos permite asegurar la integridad de entidad
(puesto que es nica en cada registro) y por otro lado nos garantiza la estabilidad de las
Esta tipo de integridad que Nortegi
relaciones con otras tablas.
serie de operaciones, que slo puede
Desencadenadores
Descripcin de las columnas de tab
Los desencadenadores representan aplicaciones que desarrollamos en lenguaje T-SQL
y que se ejecutan, o mejor dicho, se "disparan" cuando sucede algn tipo de evento en
una tabla. Los desencadenadores se llaman tambin disparadores o triggers.
En funcin del tipo de evento, tenemos los siguientes grupos de desencadenadores:
Desencadenadores de insercin. Estos desencadenadores se ejecutan cuando
se aade un registro o varios.
Desencadenadores de actualizacin. Se ejecutan cuando se ha actualizado uno
o varios registros.
Desencadenadores de eliminacin.
Con estos desencadenadores aseguramos la lgica de negocio y definimos la integridad
de OPERADOR. Antiguamente (versiones anteriores a SQL Server 2000), la integridad
referencial en cascada tena que implementarse mediante desencadenadores que
permitiesen la actualizacin y eliminacin en cascada.
Nombre de la Columna
Aqu escribiremos el nombre del cam
Pruebas.
Tipos de Datos
Asignamos el tipod e datos del ca
numeric, char, varchar, datetime, e
nuestro campo.
Longitud
Longitud del campo de un tipo de dat
su almacenamiento de una cadena qu
El permitir valores nulos esta opcin
valores nulos (en blanco) cuando se d
Los campos auto incrementales como
Cada fila de la columna tiene una seri
OPERADOR o dependiendo de la f
encuentran en la parte inferior de la p
Descripcin de las opciones:
Permite poner una descripcin al cam
Valor predeterminado: inicial
modo cuando se crea un regi
necesidad que nosotros lo po
Precisin: Es el nmero de d
Escala: Es el nmero de dg
nmero.
Identidad: (Identity) con este
autoincremental.
Inicializacin de identidad inic
Incremento de identidad: incre
Intercalacin : Especifica el j
pone nada toma la intercalaci
Verificacin de la definicin de la tabla
SP_HELP <Nombre de la tabla>
TABLA DEL SIS
TIPO
Tipo de datos definidos por el OPERADOR
DESCRIPC
RE
RE
VALOR PREDETER
RESTRICCIO
SP_ADDTYPE
EJEMPLOS PRACTICOS
EJEMPLO 031
Crear la tabla llamada ESTRELLITA, dentro de la Base de datos AMOR
USE AMOR
GO
CREATE TABLE ESTRELLITA (
IdCod
CHAR ( 4 ) NOT NULL,
Nombre
VARCHAR(30) NOT NULL,
Precio
DECIMAL(10,2) NOT NULL,
Edad
SMALLINT NOT NULL
Go
RF
Para realizar la verificacin de la tabla empleamos SP_HELP NOMBRE DE LA TABLA
PROCEDIMIENTO AL
TA
TR
DE
TAB
V
X
NOTA
PROCED
PROCED
EJEMPLO 034
Tipo de datos definidos por el OPERADOR
SP_ADDTYPE
Utilizando T - SQL para crear la ba
carcter.
Adems crear el tipo de datos Direc
EJEMPLO 032
Crear el tipo de datos DNI que no admita valores NULOS en la tabla ESTRELLA.
USE AMOR
Go
EXEC SP_ADDTYPE DNI, CHAR(8), NOT NULL
USE AMOR
GO
IF EXISTS (SELECT Domain_Nombre
WHERE domain_schema =dbo AND
EXEC SP_DROPTYPE Pais
GO
EXCEC SP_Addtype Pais, C
Go
EJEMPLO 033
/*Ahora el tipo de datos DIRECCION
Cmo eliminar un tipo de datos definidos por el OPERADOR?
USE AMOR
EXEC SP_DROPTYPE DNI
IF EXISTS (SELECT Domain_Nombre
WHERE domain_schema =dbo AND
EXEC SP_DROPTYPE direccion, va
GO
LA VISTA INFORMATION SCHEMA DOMAINSV
Contiene una fila por cada tipo de datos definido por el OPERADOR
EJEMPLO 035
Ahora si deseamos verificar la creac
siguiente script
USE AMOR
GO
Select
domain_Nombres
FROM
domain_Nombres
GO
En la tabla OPERADOR, aadir una
MODIFICAR UNA TABLA
USE BDEJEMPLO_01
GO
ALTER TABLE
ALTER TABLE OPERADOR
ADD TELEFONO CHAR(10) NULL
GO
EJEMPLO 036
Adicionar un campo llamado Manzana a la Base de datos BDEJEMPLO_01
SP_HELP
ADICIONAR UNA COLUMNA A UNA TABLA
EJEMPLO 039
USE BDEJEMPLO_01
GO
ALTER TABLE PAIS
ADD MANZANA CHAR(10) NULL
Revisar los cambios de la tabla ant
Sp_help OPERADOR
Go
EJEMPLO 037
Crear una tabla llamado OPERADOR que contenga los siguientes campos
CODIGO C(10), NOMBRES C(40), FECHAINGRESO, EDAD, MONTOTOTAL N(13,2)
USE BDEJEMPLO_01
GO
IF EXISTS(SELECT * FROM SYSOBJECT WHERE TYPE =U AND NOMBRES = OPERADOR)
DROP TABLE OPERADOR
GO
CREATE TABLE OPERADOR (
CODIGO
CHAR(10)
NOMBRES
VARCHAR(40)
FECHAINGRESO
SMALLDATETIME,
EDAD
SMALLINT
MONTOTOTAL
DECIMAL(13,2)
GO
EJEMPLO 038
VERIFICAR LOS CAMBIOS DE UNA
NOT NULL,
NULL,
NOT NULL,
NULL )
EJEMPLO 040
Aadir y cambiar los valores de un
USE BDEJEMPLO_01
GO
ALTER TABLE COLUMN NOMBRES
GO
NOTA
No se puede aadir una columna con valores
NOT NULL.
En el ejemplo 037, cuando se creo la tabla OP
el ejemplo 040, lo cambiamos los valores de N
CONSTRAINT
QUITAR UNA COLUMNA DE UNA T
Especifica el comienzo de una restriccin, PRIMARY KEY, UNIQUE, FOREIGN KEY
o CHECK, de una definicin DEFAULT
Para quitar una columna de una tab
EJEMPLO 041
EJEMPLO 043
Quitar la columna Montototal
En la tabla OPERADOR, agregar una columna que acepta NULL con valores
predeterminados
ALTER TABLE OPERADOR
ADD FECHASALIDA DATETIME NULL
CONSTRAINT FECHADFLT
DEFAULT GETDATE() WITH VALUES
USE BDEJEMPLO_01
GO
ALTER TABLE OPERADOR
DROP COLUMN montototal
GO
EXEC SP_HELPDB OPERADOR
GO
EJEMPLO 042
EJEMPLO 044
Agregar una columna con una restric
Usando SCRIPT T SQL crear la tabla producto en la base de datos BDEJEMPLO_O1
USE BDEJEMPLO_01
GO
IF EXISTS(SELECT * FROM SYSOBJECT WHERE TYPE = U AND NOMBRES =
PRODUCTO )
DROP TABLE PRODUCTO
GO
CREATE TABLE PRODUCTO (
IDPRODUCTO
CHAR(|0)
NOT NULL,
DETALLE
VARCHAR(30) NULL,
PRECIO
DECIMAL(10,2) NULL,
STOCK
INT NOT
NULL,
FECHA
DATETIME)
GO
USE BDEJEMPLO_01
GO
ALTER TABLE OPERADOR
ADD DNI CHAR(10) NULL
CONSTRAINT USU_UNIQUE
GO
RENOMBRAR A UNA TABLA SP_R
EJEMPLO 045
Cambiar el nombre de la tabla OPERA
USE BDEJEMPLO_01
GO
EXEC SP_RENOMBRES OPERADO
EJEMPLO 048
VERIFICAR LA CREACION DE LA TABLA
EJEMPLO 046
USE BDEJEMPLO_01
SELECT table_Nombres FROM Information_schema.tables WHERE table_Nombres =
producto
GO
Verificar la creacin de las tablas, l
SELECT table_Nombres FROM info
WHERE table_Nombres =Cliente
SELECT table_Nombres FROM info
WHERE table_Nombres =Emplead
EJEMPLO 047
EJEMPLO 049
Crear las tablas CLIENTE y EMPLEADO haciendo uso de datos necesarios en un
sistema
USE BDEJEMPLO_01
GO
IF EXISTS(SELECT * FROM S ysObject WHERE type =U and Nombres =CLIENTE)
DROP TABLE CLIENTE
GO
CREATE TABLE CLIENTE
(id_codigo
char(08) NOT NULL,
Nombres varchar(30) NOT NULL,
Fecha datetime,
Pais_lugar varchar (20) NOT NULL,
Departamento varchar (30) NOT NULL
)
Go
IF EXISTS(SELECT * FROM S ysObject
WHERE
type
=U
and
Nombres
=EMPLEADO)
DROP TABLE EMPLEADO
GO
CREATE TABLE EMPLEADO
(id_clicod
char(10) NOT NULL,
Nomb_emp varchar(30) NOT NULL,
Fechaingreso smalldatetime
)
Diga usted que sucede al ejecutar e
SELECT * FROM SYSOBJECT ORD
EJEMPLO 050
Crear una restriccin PRIMARY K
cliente, que se encuentra dentro de
USE BDEJEMPLO01
GO
ALTER TABLE CLIENTE
GO
ADD CONSTRAINT Id_codigo PRIM
GO
EJEMPLO 051
EJEMPLO 054
Escriba los comandos necesarios para mostrar los siguientes mensajes:
Agregar un campo llamado DNI de
la tabla Alumnos
Bienvenidos <<OPERADOR>>
Hoy es <<fecha del sistema>>
DECLARE @OPERADOR varchar(20)
DECLARE @FECHA DATETIME
SET @OPERADOR =CESITAR
SET @FECHA = GETDATE()
PRINT BIENVENIDO+ @OPERADOR
PRINT HOY ES + @FECHA
EJEMPLO 055
Agregar un campo llamado Fechan
predeterminados GETDATE() en la
EJEMPLO 052
Diga usted como crear los siguientes tipos de datos, definidos por el OPERADOR
en la base de datos BDEJEMPLO02
Use BDEJEMPLO02
EXEC SP_addtype Apellidos, varchar(40), NOT NULL
EXEC SP_addtype Nota, decimal(10,2), NOT NULL
EXEC SP_addtype Promedio, Integer, NOT NULL
EJEMPLO 053
Diga usted como crear la siguiente estructura de la tabla llamada Alumnos, en la
base de datos BDEJEMPLO02
ID CODIGO
NOMBRES
APELLIDOS
EDAD
FECHA
SEXO
USE BDEJEMPLOS02
GO
ALTER TABLE ALUMNOS
ADD DNI CHAR (10) NULL
GO
CODIGO
NOT NULL
VARCHAR(30) NOT NULL
VARCHAR(30) NOT NULL
INTEGER
DATETIME
CHAR (1)
ALTER TABLE NOTAS
ADD fechanacimiento DATETIME N
CONSTRAINT FECHADFLT DEFAU
EJEMPLO 056
Agregar un campo llamado OBSE
NOTAS
ALTER TABLE NOTAS
ADD observacion varchar(20) NULL
GO
NOTA
No se puede aadir una columna con valores
NOT NULL.
En el ejemplo 037, cuando se creo la tabla OP
el ejemplo 040, lo cambiamos los valores de N
EJEMPLO 057
Cambiar el nombre de la tabla NOTAS por el nombre de EVALUACION
EXECE SP_RENOMBRES NOTAS, EVALUACION
GO
EJEMPLO 058
Eliminar las tablas creadas en la base de datos BDEJEMPLO01
USE BDEJEMPLO01
DROP TABLE
EJEMPLO 059
Calcular la Suma de los nmeros pares e impares comprendidos entre 1 y 10
Declare @num1 INT
Declare @num2 INT
Declare @suma1 INT
Declare @suma2 INT
Set @num1 = 0
Set @num2 = 0
Set @suma1 = 0
Set @suma2 = 0
WHILE (@num1<=10 AND @num2<=10)
BEGIN
SET @num1 = 2@num1
PRINT @num1
SET @num2 = 2@num2+1
PRINT @num2
SET @suma1 = @suma1+@num2
SET @suma2 = @suma2+@num1
END
PRINT LA SUMA DE LOS IMPARES ES:+STR(@suma1)
PRINT LA SUMA DE LOS PARES ES:+STR(@suma2)
MEMORIA AYUDA
Cmo saber que versin de SQL tenemos instalado en nuestra computadora
Cada vez que se libera una actualizacin para algn producto de Microsoft queremos
instalarlo en nuestro computador para estar al corriente de las nuevas mejoras y ajustes.
Para el caso particular de SQL Server podemos efectuar una consulta muy simple que
nos permite recordar la versin actual que tenemos instalada en nuestra mquina.
La sentencia es la siguiente:
SELECT
SERVERPROPERTY('productversion') AS VERSION,
SERVERPROPERTY('productlevel') AS NIVELPRODUCTO,
SERVERPROPERTY('edition')
AS EDICIN
INTEGRIDAD DE DATOS
Se refiere a la consistencia y exac
de datos.
Niveles o etapas de integridad de d
Integridad de Entidad
o Primary Key
o Unique
o Identity
Integridad de Dominio
o Default
o Foreign Key
o Check
o Not Null
Integridad Referencial
o Foreign Key
o Check
Integridad definida por el O
o Todas las restriccio
como propiedades a
TIPOS DE RESTRICCIONES
Las restricciones son un mtodo e
datos.
PRIMARY KEY
Clave Primar
UNIQUE
Valor no dup
FOREIGN KEY
Clave forne
DEFAULT
Valor predet
CHECK
Regla de val
La Clausula CONSTRAINT
Las restricciones son un mtodo estndar ANSI para formar
Se utiliza la clusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE
TABLE para crear o eliminar ndices. Existen dos sintaxis para esta clusula
dependiendo si desea Crear Eliminar un ndice de un nico campo o si se trata
de un campo multindice. Si se utiliza el motor de datos de Microsoft, slo podr
utilizar esta clusula con las bases de datos propias de dicho motor. Para los
ndices de campos nicos:
CONSTRAINT nombre {PRIMARY KEY | UNIQUE | REFERENCES tabla externa
[(campo externo1, campo externo2)]}
Para los ndices de campos mltiples:
CONSTRAINT nombre {PRIMARY KEY (primario1[, primario2 [,...]]) |
UNIQUE (nico1[, nico2 [, ...]]) |
FOREIGN KEY (ref1[, ref2 [,...]]) REFERENCES tabla externa
[(campo externo1 ,campo externo2 [,...])]}
nombre
Es el nombre del ndice que se va a crear.
primarioN
Es el nombre del campo o de los campos que forman el ndice primario.
nicoN
Es el nombre del campo o de los campos que forman el ndice de clave
nica.
refN
Es el nombre del campo o de los campos que forman el ndice externo
(hacen referencia a campos de otra tabla).
tabla externa
Es el nombre de la tabla que contiene el campo o los campos
referenciados en refN
campos
externos
Es el nombre del campo o de los campos de la tabla externa
especificados por ref1, ref2,... , refN
Si se desea crear un ndice para un
ALTER TABLE o CREATE TAB
inmediatamente despus de la espec
Si se desea crear un ndice con
instrucciones ALTER TABLE o CR
aparecer fuera de la clusula de creac
Indice
Descripcin
UNIQUE
Genera un ndice de cl
la tabla no pueden cont
Genera un ndice prim
PRIMARY
Todos los campos de l
KEY
cada tabla slo puede c
Genera un ndice ext
contenidos en otras ta
consta de ms de un c
de mltiples campos,
nombre de la tabla
FOREIGN
referenciados en la tab
KEY
de referencia listados.
principal de la tabla e
referenciados, predete
como si la clave princi
los campos referenciad
Las restricciones
FOREIGN KEY
Las restricciones son un mtodo estndar ANSI para formar
Definicin de claves para tablas y restricciones
Claves ajenas: Foreign Key:
Clave primaria: Primary key
Es una columna o un conjunto de columnas que identifican unvocamente a cada fila.
Debe ser nica, no nula y obligatoria. Como mximo, podemos definir una clave primaria
por tabla.
Esta clave se puede referenciar por una columna o columnas. Cuando se crea una clave
primaria, automticamente se crea un ndice que facilita el acceso a la tabla.
Formato de restriccin de columna:
CREATE TABLE NOMBRE_TABLA
(COL1 TIPO_DATO [CONSTRAINT NOMBRE_RESTRICCION]
COL2 TIPO_DATO
)[TABLESPACE ESPACIO_DE_TABLA];
PRIMARY
KEY
Formato de restriccin de tabla:
CREATE TABLE NOMBER_TABLA
(COL1 TIPO_DATO,
COL2 TIPO_DATO,
[CONSTRAINT NOMBRERESTRICCION] PRIMARY KEY (COLUMNA [,COLUMNA]),
)[TABLESPACE ESPACIO_DE_TABLA];
Esta formada por una o varias colum
otra o de la misma tabla. Se puede
pueden estar o no en la misma tabl
columnas que son claves ajenas d
referenciada (regla de integridad refer
Formato de restriccin de columna:
CREATE TABLE NOMBRE_TABLA
(COLUMNA1 TIPO_DATO
[CONSTRAINT NOMBRERESTRIC
REFERENCES NOMBRETABLA [(CO
)[TABLESPACE ESPECIO_DE_T
Formato de restriccin de tabla:
CREATE TABLE NOMBRE_TABLA
(COLUMNA1 TIPO_DATO,
COLUMNA2 TIPO_DATO,
[CONTRAINT NOMBRERESTRICC
FOREIGN KEY (COLUMNA [,COLU
REFERENCES NOMBRETABLA
COLUMNA])]
[ON DELETE CASCADE],
)[TABLESPACE ESPACIO_DE_TAB
Notas:
En la clusula REFERENCES indicamos la tabla a la cual remite la clave
ajena.
Hay que crear primero una tabla y despus aquella que le hace referencia.
Hay que borrar primero la tabla que hace referencia a otra tabla y despus
la tabla que no hace referencia.
Borrado en cascada (ON DELETE CASCADE): Si borramos una fila de una
tabla maestra, todas las filas de la tabla detalle cuya clave ajena sea
referenciada se borraran automticamente. La restriccin se declara en la
tabla detalle. El mensaje "n filas borradas" solo indica las filas borradas de
la tabla maestra.
NOT NULL: Significa que la columna no puede tener valores nulos.
DEFAULT: Le proporcionamos a una columna un valor por defecto cuando el valor
de la columna no se especifica en la clusula INSERT. En la especificacin
DEFAULT es posible incluir varias expresiones: constantes, funciones SQL y
variables UID y SYSDATE.
Verificacin de restricciones: CHECK: Acta como una clusula where. Puede
hacer referencia a una o ms columnas, pero no a valores de otras filas. En una
clusula CHECK no se pueden incluir subconsultas ni las pseudoconsultas
SYSDATE, UID y USER.
Nota: La restriccin NOT NULL es similar a CHECK (NOMBRE_COLUMNA
IS NOT NULL)
UNIQUE: Evita valores repetidos en la misma columna. Puede contener una o
varias columnas. Es similar a la restriccin PRIMARY KEY, salvo que son
posibles varias columnas UNIQUE definidas en una tabla. Admite valores NULL.
Al igual que en PRIMARY KEY, cuando se define una restriccin UNIQUE se
crea un ndice automticamente.
Vistas del diccionario de datos para
Contienen informacin general las sig
USER_CONSTRAINTS: Definicione
OPERADOR.
ALL_CONSTRAINTS: Definiciones
acceder el OPERADOR.
DBA_CONSTRAINTS: Todas las defi
Creacin de una tabla con datos re
CREATE TABLE: permite crear una
existente. La nueva tabla contendr l
esta accin con la clusula AS coloca
CREATE TABLE NOMBRETABLA
(COLUMNA [,COLUMNA]
)[TABLESPACE ESPACIO_DE_TAB
AS CONSULTA;
No es necesario especificar tipos
determinadas por los tipos y los
La consulta puede tener una subc
sentencia select valida.
Las restricciones CON NOMBRE no
aquellas restricciones que carecen de
Supresin y modificacin de tablas
Supresin de tablas:
DROP TABLE: suprime una tabla de
sus propias tablas, pero solo el adm
"DROP ANY TABLE" puede borrar las tablas de otro OPERADOR. Al suprimir una tabla
tambin se suprimen los ndices y los privilegios asociados a ella. Las vistas y los
sinnimos creados a partir de esta tabla dejan de funcionar pero siguen existiendo en la
base de datos por tanto deberamos eliminarlos.
Ejemplo:
DROP TABLE [OPERADOR].NOMBRETABLA [CASCADE CONSTRAINTS];
TRUNCATE: permite suprimir todas las filas de una tabla y liberar el espacio ocupado
para otros usos sin que reaparezca la definicin de la tabla de la base de datos. Una
orden TRUNCATE no se puede anular, como tampoco activa disparadores DELETE.
Al modificar una columna de duna tab
TRUNCATE TABLE [OPERADOR.]NOMBRETABLA [{DROP | REUSE} STORAGE];
Modificacin de tablas:
Se modifican las tablas de dos formas: Cambiando la definicin de una columna
(MODIFY) aadiendo una columna a una tabla existente (ADD):
Formato:
ALTER TABLE NOMBRETABLA
{[ADD (COLUMNA [,COLUMNA])]
[MODIFY (COLUMNA [,COLUMNA])]
[ADD CONSTRAINT RESTRICCION]
[DROP CONSTRAINT RESTRICCION]};
ADD= Aade una columna o mas al final de una tabla.
MODIFY= Modifica una o mas columnas existentes en la tabla.
ADD CONSTRAINT= Aade una restriccin a la definicin de la tabla.
DROP CONSTRAINT= Elimina una restriccin de la tabla.
A la hora de aadir una columna a una tabla hay que tener en cuenta:
Si la columna no esta definida como NOT NULL se le puede aadir en cualquier
momento.
Si la columna esta definida co
1. Se aade una column
2. Se da valor a la colum
3. Se modifica la column
Se puede aumentar la longitu
Es posible aumentar o dism
columna de tipo NUMBER.
Si la columna es NULL en
longitud y modificar el tipo de
La opcin MODIFY NOT N
ninguna fila con valor nulo en
Adicin de restricciones:
Con la orden ALTER TABLE se aade
Formato:
ALTER TABLE NOMBRETABLA
ADD CONSTRAINT NOMBRECONST
Borrado de restricciones:
La orden ALTER TABLE con la clus
restricciones con nombre y las asigna
ALTER TABLE NOMBRETABLA
DROP CONSTRAINT NOMBRE_CON
NOMBRE_RESTRICCION:
INTEGRIDAD DE ENTIDAD
Insertar Registros a una determinad
Define una fila como Entidad nica para una tabla determinada.
EJEMPLO 062
Insertar registros a la tabla OPERA
EJEMPLO 060
Crear las siguientes tablas en la Base de datos BDEJEMPLO02, y en caso de
existir debemos eliminar dichas tablas.
IF EXISTS(Select *.FROM SYSOBJECT WHERE Type
=OPERADOR)
DROP TABLE OPERADOR
GO
CREATE TABLE OPERADOR (
IdOPERADOR
char(5)
NOT NULL,
Nom_OPERADOR
varcha(20)
NOT NULL,
Ape_OPERADOR
varchar(20)
NOT NULL,
Dir_OPERADOR
varchar(60)
NULL,
Tel_OPERADOR
varchar(10)
NULL
);
=U
and
Nombres
EJEMPLO 061
Crear una restriccin PRIMARY KEY sobre la columna idOPERADOR de la tabla
anterior, si existe eliminar la restriccin para volver a crearla.
USE BDEJEMPLO02
IF EXISTS(Select *.FROM SYSOBJECT WHERE Nombres =CONS_00)
ALTER TABLE OPERADOR
DROP CONSTRAINT CONS_00
GO
ALTER TABLE OPERADOR
ADD CONSTRAINT CONS_00 PRIMARY KEY (idOPERADOR)
GO
ALTER TABLE OPERADOR
INSERT OPERADOR VALUES(A1000,
LIMA,999999999);
INSERT OPERADOR VALUES(A2000,
LIMA,999999988);
Clave Primaria Primary key
EJEMPLO 063
En la tabla OPERADOR definir c
IduNorteaio
USE BDEJEMPLO02
GO
ALTER TABLE OPERADOR
ADD CONSTRAINT PK_IDOP
GO
EJEMPLO 064
En la tabla OPERADOR del ejemplo
USE BDEJEMPLO02
GO
INSERT INTO OPERADOR (IdOPERADO
(A3000,CESAR,PEREDA TORRES);
NOTA
Cuando se insertan nmeros no van entre com
EJEMPLO PRCTICO
Al insertar registros tales como fecha o nmero lo desarrollaremos ahora:
Supongamos que tenemos una tabla con los campos fecha y Gastos
INSERT INTO PLANILLA (IdOPERADOR, Nom_OPERADOR, Ape_OPERADOR,
fechainicio, Gastos) VALUES (A3000,CESAR,PEREDA
TORRES,27/08/2000,5500);
EJEMPLO 065
Revisar la tabla y verificar los registros ingresados
USE BDEJEMPLO02
GO
SELECT * FROM OPERADOR
GO
INSERT INTO
Agregar un registro en una tabla. S
Esta consulta puede ser de dos tipo: I
registros contenidos en otra tabla. Pa
En este caso la sintaxis es la siguient
INSERT INTO Tabla (campo1, campo
VALUES (valor1, valor2, ..., valorN)
Esta consulta graba en el campo1 el v
Para seleccionar registros e inserta
CLAVE PRIMARIA COMPUESTA
EJEMPLO 066
Teniendo una tabla determinada, vamos a crear una clave primaria compuesta, por
dos columnas determinadas., como ejemplo consideramos la tabla MOVIMIENTOS
y vamos a enlazar con dos columnas Numdocum y codigocliente que sean las dos
columnas de la tabla.
USE BDEJEMPLO02
GO
ALTER TABLE MOVIMIENTOS
ADD CONSTRAINT PK_MOVIMIENTOS
PRIMARY KEY (Numdocum, codigocliente)
GO
NOTA
Se recomienda definir la clave primaria de una tabla con el prefijo PK_ para poder identificarlo, ya que si no lo
especifica SQL le asignara uno automtico.
En este caso la sintaxis es la siguient
SELECT campo1, campo2, ..., campo
FROM tablaorigen [WHERE criterios]
Se pueden utilizar las consultas de
copias de seguridad de las tablas o h
utilizar en informes que muestren lo
ejemplo, se podra crear un infor
ejecutando la misma consulta de crea
Para insertar Registros de otra Tab
En este caso la sintaxis es:
INSERT INTO Tabla [IN base_externa
SELECT TablaOrigen.campo1, Tabla
Tabla Origen
En este caso se seleccionarn los ca
los campos 1,2,.., n de la Tabla. La co
para filtrar los registros a copiar. Si Tabla y Tabla Origen poseen la misma estructura
podemos simplificar la sintaxis a:
INSERT INTO Tabla SELECT Tabla Origen.* FROM Tabla Origen
De esta forma los campos de Tabla Origen se grabarn en Tabla, para realizar esta
operacin es necesario que todos los campos de Tabla Origen estn contenidos con
igual nombre en Tabla. Con otras palabras que Tabla posea todos los campos de Tabla
Origen (igual nombre e igual tipo).
En este tipo de consulta hay que tener especial atencin con los campos contadores o
autonumricos puesto que al insertar un valor en un campo de este tipo se escribe el
valor que contenga su campo homlogo en la tabla origen, no incrementndose como le
corresponde.
Se puede utilizar la instruccin INSERT INTO para agregar un registro nico a una tabla,
utilizando la sintaxis de la consulta de adicin de registro nico tal y como se mostr
anteriormente. En este caso, su cdigo especifica el nombre y el valor de cada campo
del registro. Debe especificar cada uno de los campos del registro al que se le va a
asignar un valor as como el valor para dicho campo. Cuando no se especifica dicho
campo, se inserta el valor predeterminado o Null. Los registros se agregan al final de la
tabla.
Tambin se puede utilizar INSERT INTO para agregar un conjunto de registros
pertenecientes a otra tabla o consulta utilizando la clusula SELECT... FROM como se
mostr anteriormente en la sintaxis de la consulta de adicin de mltiples registros. En
este caso la clusula SELECT especifica los campos que se van a agregar en la tabla
destino especificada.
La tabla destino u origen puede especificar una tabla o una consulta. Si la tabla destino
contiene una clave principal, hay que asegurarse que es nica, y con valores no nulos;
si no es as, no se agregarn los registros. Si se agregan registros a una tabla con un
campo Contador, no se debe incluir el campo Contador en la consulta. Se puede
emplear la clusula IN para agregar registros a una tabla en otra base de datos.
Se pueden averiguar los registros que se agregarn en la consulta ejecutando primero
una consulta de seleccin que utilice el mismo criterio de seleccin y ver el resultado.
Una consulta de adicin copia los reg
contienen los registros que se van a
adicin. En lugar de agregar registros
valores de cada campo en un nuevo
la lista de campos, la clusula VALU
tabla, de otra forma fallar INSERT.
Ejemplos:
INSERT INTO Clientes SELECT C
SELECT Registros.* INTO Progr
Categoria = 'Programador'
Esta consulta crea una tabla nue
estructura que la tabla empleado
categoria se programador
INSERT INTO Registros (Nombre,
'Becario' )
INSERT INTO Registros SELECT
WHERE
Provincia = 'Peru'
EJEMPLO 067
EJEMPLO 069
Crear las claves primarias de las tablas CLIENTES y MOVIMIENTOS, considerando
que estn relacionadas mediante la columna cdigo de la tabla CLIENTES y la
columna codcli de la tabla MOVIMIENTOS.
Ahora vamos a crear la clave forn
tabla curso
USE BDEJEMPLO02
GO
ALTER TABLE CLIENTES
ADD CONSTRAINT PK_CLIENTES
PRIMARY KEY (CODIGO)
GO
ALTER TABLE MOVIMIENTOS
ADD CONSTRAINT PK_MOVIMIENTOS
PRIMARY KEY (CODCLI)
CLAVE FORANEA FK_
Es el Nombre de la restriccin clave, el cual se le recomienda anteponer el prefijo
(FK_), ya que si no lo especifica el nombre de la restriccin SQL le asigna un
nombre.
EJEMPLO 068
Vamos a considerar en este ejemplo del cual vamos a Crear la clave fornea de la
tabla PAGO que apunta a la calve primaria de la tabla MATRICULA
ALTER TABLE PAGO
ADD CONSTRAINT FK_PAGO_MATRICULA
FOREIGN KEY (idcurso,idalumno) REFERENCES Matricula
GO
USE BDEJEMPLO02
GO
ALTER TABLE MATRICULA
ADD CONSTRAINT FK_MAT
FOREIGN KEY (idcurso) REF
GO
FOREIGN KEY
FOREIGN KEY Vamos a crear un
clientes y la otra llamada MOVIMIE
campo codcliente
"CLIENTES"
CODCLIENTE
1
2
3
Apellidos
Hansen
Svendson
Pettersen
"MOVIMIENTOS"
ORDEN
1
2
3
4
NU
Tenga en cuenta que la columna "CODCLIENTE" en la tabla "MOVIMIENTOS" indica
"CODCLIENTE" tabla "CLIENTES".
Puede distribuir la restriccin FOREIG
sintaxis SQL:
"CODCLIENTE" columna de la tabla "CLEINTES" es una clave principal.
MySQL / SQL Server / Oracle / MS Acce
"CODCLIENTE" columna de la tabla "MOVIMIENTOS" es una clave externa.
FOREIGN KEY no permite insertar datos incorrectos en la columna "CODCLIENTE" en
la tabla "MOVIMIENTOS" y "CLEINTES".
SQL KEY Restricciones FOREIGN en el CREATE TABLE
El siguiente SQL crea una FOREIGN KEY columna "CODCLIENTE", al crear la tabla
"MOVIMIENTOS":
Dentro de MySQL:
CREATE TABLE Orders (
O_Id int NOT NULL,
OrderNo int NOT NULL,
CODCLIENTE int,
PRIMARY KEY (O_Id),
FOREIGN KEY (CODCLIENTE) REFERENCES Persons(CODCLIENTE)
)
Desde SQL Server / Oracle / MS Access:
CREATE TABLE rdenes (
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
CODCLIENTE int FOREIGN KEY REFERENCES CLEINTES(CODCLIENTE)
)
CREATE TABLE rdenes(
O_Id int NOT NULL,
OrderNo int NOT NULL,
CODCLIENTE int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_Perrdenes FORE
REFERENCES CLEINTES(CODCLIE
SQL FOREIGN KEY Restricciones con
El siguiente SQL crea una FOREIGN KEY
tabla ya est creada:
MySQL / SQL Server / Oracle / MS Acce
1
ALTER TABLE rdenes
ADD FOREIGN KEY (CODCLIENTE
REFERENCES CLEINTES(CODCLIE
Puede distribuir la restriccin FOREIGN K
SQL:
MySQL / SQL Server / Oracle / MS Acce
1
ALTER TABLE rdenes
ADD CONSTRAINT fk_Perrdenes
FOREIGN KEY (CODCLIENTE)
REFERENCES CLEINTES(CODCLIENTE)
Para deshabilitar una restriccin FO
UPDATE
La eliminacin de FOREIGN KEY
Para quitar el limitador de FOREIGN KEY, use el siguiente cdigo SQL:
1. En el Explorador de objetos,
restriccin y, a continuacin, h
MySQL:
1 ALTER TABLE rdenes
2 DROP FOREIGN KEY fk_Perrdenes
SQL Server / Oracle / MS Access:
1 ALTER TABLE rdenes
2 DROP CONSTRAINT fk_Perrdenes
Cmo deshabilitar restricciones FOREIGN KEY con instrucciones INSERT y
UPDATE (Visual Database Tools)
SQL Server 2008 R2
Puede seleccionar la opcin de deshabilitar una restriccin FOREIGN KEY durante
transacciones INSERT y UPDATE si sabe que los nuevos datos infringirn la restriccin
o si la restriccin slo se aplica a los datos que ya estn en la base de datos.
La tabla se abre en el Disea
2. En el men Diseador de tab
3. En el cuadro de dilogo Rela
la lista Relacin seleccionad
4. En la cuadrcula, haga clic en
accin en el cuadro de lista d
Sin accin Un men
permite la eliminacin
Cascada Elimina to
relacin de clave exte
Establecer en NULL
columnas de clave e
aplica a SQL Server 2
Establecer como pr
definido para la colu
de la tabla tienen de
SQL Server 2005.
NOTA
Si pretende emplear desencadenadores para im
restricciones FOREIGN KEY para que se ejecu
RESTRICCIONES UNIQUE VALOR A NO DUPLICARSE (U_)
INTEGRIDAD DE DOMINIO
CREACION DEL VALOR PREDETERMIN
EJEMPLO 070
Ahora vamos a suponer que un sistema de Matricula los cdigos del alumno no se
deben repetir para ello estableceremos una restriccin UNIQUE
USE BDEJEMPLO01
GO
ALTER TABLE ALUMNOS
ADD CONSTRAINT U_ALUMNOS_IDENTIFICACION
UNIQUE (CODIGOALUMNO)
GO
EJEMPLO 071
Crear la restriccin PRIMARY KEY sobre la columna IDCLIENTE de la tabla
CLIENTE en la base de datos BDEJEMPLO02
USE BDEJEMPLO02
GO
ALTER TABLE CLIENTE
ADD CONSTRAINT PK_CLIENTE
PRIMARY KEY (CLIENTE)
GO
Cada columna en un registro debe co
Hay situaciones en la cuales se nece
se conocen los valores para todas la
columna permite valores nulos, se pu
como vimos los valores nulos no son
una valor por defecto para esa colum
como el valor por defecto (DEFAULT
de caracteres cuando no se especifica
La clusula DEFAULT en el comando
cuando en realidad no fuerza a nada.
Cuando se carga una fila en una tab
una columna, se le est indicando en
por defecto en la columna en aqu
columna.
Si una columna no permite valores
deber explcita indicar un valor pa
mensaje de error indicando que la col
Se puede crear una definicin de
maneras:
Creando la definicin del valo
de la definicin de la tabla)
Agregando el valor por defect
un valor por defecto)
El siguiente ejemplo usa el comando CREATE TABLE para crear la tabla Registros.
Ninguna de las tres columnas permite valores nulos; sin embargo, la columna Nombre
provee la posibilidad de un nombre desconocido al agregar una definicin por defecto a
la definicin de la columna. El comando CREATE TABLE usa la clusula DEFAULT para
definir el valor por defecto:
CREATE DEFAULT (Transact-SQL)
CREATE TABLE Registros
(
Emp_ID char(4) NOT NULL,
Nombre varchar(80) NOT NULL DEFAULT desconocido,
Apel varchar(30) NOT NULL,
)
Crea un objeto denominado valor pre
de columna o de alias, un valor prede
en la columna a la que est enlazada
un tipo de datos de alias) si no se
insercin.
Se puede modificar o eliminar una definicin por defecto existente. Por ejemplo se
puede modificar el valor insertado en una columna cuando no ha sido entrado ningn
valor.
Cuando se utilice el Transact-SQL para modificar una definicin por defecto, se debe
primero borrar la clusula DEFAULT existente y luego recrearla con la nueva definicin.
El valor por defecto debe ser compatible con el tipo de dato definido para la columna.
Por ejemplo para una columna con un tipo de dato entero (int) el valor por defecto
deber ser un nmero entero y no una cadena de caracteres.
Cuando una definicin DEFAULT es agregada a una columna existente en una tabla,
SQL Server (por defecto) aplica el valor por defecto solo a las filas nuevas que sean
ingresadas de ah en adelante. Las filas que tomaron el valor por defecto anterior no son
afectadas. Cuando se agrega una nueva columna a una tabla existente, sin embargo, se
puede especificar al SQL Server que inserte el valor por defecto (especificado en la
definicin de la nueva columna) en vez de un valor nulo en la nueva columna para las
filas preexistentes de la tabla
Sintaxis
CREATE DEFAULT [ schema_Nombr
AS constant_expression [ ; ]
Argumentos
schema_Nombres
Es el nombre del esquema al
default_Nombres
Es el nombre del valor predet
cumplir las reglas de los ident
del valor predeterminado es o
constant_expression
Es una expresin que contie
nombre de ninguna columna
cualquier constante, funcin i
contienen tipos de datos de a
el OPERADOR. Incluya las
simples ('); las constantes
necesitan comillas. Los datos
moneda deben precederse de un signo de dlar ($). El valor predeterminado
debe ser compatible con el tipo de datos de la columna.
El nombre de un valor predeterminado slo se puede crear en la base de datos
actual. En una base de datos, los nombres predeterminados deben ser nicos
para cada esquema. Despus de crear un valor predeterminado, utilice
sp_bindefault para enlazarlo a una columna o a un tipo de datos de alias.
Si el valor predeterminado no es compatible con la columna a la que est
enlazado, SQL Server genera un mensaje de error al intentar insertar el valor
predeterminado. Por ejemplo, N/A no se puede utilizar como valor
predeterminado para una columna numeric.
Si el valor predeterminado es demasiado largo para la columna a la que est
enlazado, el valor se trunca.
Si se especifica NOT NULL al crear u
para sta, se generar un mensaje d
entrada en esa columna. En la tabla s
un valor predeterminado y la definici
entradas de la tabla muestran el resul
VALOR PREDETERMINADO (DF_)
EJEMPLO 072
Las instrucciones CREATE DEFAULT no se pueden combinar con otras instrucciones
Transact-SQL en el mismo lote.
Consideraremos como ejemplo la
numvacantes; el cual deseamos c
registros de la tabla esta ingrese
restriccin DEFAULT
Antes de crear un nuevo valor predeterminado con el mismo nombre, es necesario
quitar el anterior y quitar el enlace del valor predeterminado; para ello, ejecute
sp_unbindefault antes de quitarlo.
ALTER TABLE ALUMNOS
ADD CONSTRAINT DF_ALU
DEFAULT 20 FOR NUMVAC
Si una columna tiene un valor predeterminado y una regla asociados, el valor
predeterminado no debe infringir la regla. No se insertar nunca un valor
predeterminado que est en conflicto con una regla y SQL Server genera un mensaje de
error cada vez que se intente insertar el valor predeterminado.
GO
Cuando se enlaza a una columna, un valor predeterminado se inserta cuando:
No se ha insertado un valor explcitamente.
Se utilizan las palabras clave DEFAULT VALUES o DEFAULT con INSERT para
insertar valores predeterminados.
EJEMPLO 079
EJEMPLO 081
Crear una restriccin PRIMARY KEY sobre la columna IDCLIENTE de la tabla
Venta en la Base de datos BDEJEMPLO02
Crear la restriccin de la tabla
duplique los cdigos de los pro
UNIQUE
USE BDEJEMPLO02
GO
IF EXISTS (Select * FROM Sysobject WHERE Nombres =PK_IDCLIENTE)
ALTER TABLE VENTA
DROP CONSTRAINT PK_IDCLIENTE
GO
ALTER TABLE VENTA
ADD CONSTRAINT PK_IDCLIENTE PRIMARY KEY (IDCLIENTE)
GO
USE BDEJEMPLO02
GO
IF EXISTS (Select * FROM Sysobject
ALTER TABLE VENTA
DROP CONSTRAINT U_COD
GO
ALTER TABLE VENTA
ADD CONSTRAINT U_CODP
GO
SP_HELPCONSTRAINT
PROPIEDADES IDENTITY
Devuelve la lista de todos los tipos de restricciones, el nombre definido por el
OPERADOR o dado por el nombre que le dara el sistema y la expresin que define la
restriccin, siendo estas solo para las restricciones DEFAULT y CHECK
EJEMPLO 080
Verificar todas las restricciones del PRIMARY KEY en la tabla cliente
USE BDEJEMPLO02
GO
EXEC SP_helpConstraint Cliente
Cuando utilice la propiedad IDENTI
tenga en cuenta lo siguiente:
Una tabla solo puede definir u
esa columna solo se puede d
smallint o tinyint.
La columna de identificadore
definicin ni un objeto DEFAU
Es posible utilizar la funcin O
una columna identity y la f
nombre de la columna IDENT
NOTA
Cada restriccin UNIQUE genera un ndice y
numero de ndices de la tabla exceda de 249 n
EJEMPLO 082
PROPIEDADES IDENTITY
Vamos a imaginar tener una tabla llamada movimientos el cual queremos aadir e
insertar un campo o columna llamada ITEM, a la tabla movimientos para esto
vamos a crear una restriccin IDENTITY sobre la columna ITEM de la tabla
movimientos a crear
USE BDEJEMPLO02
GO
IF EXISTS (Select * FROM Sysobject WHERE Nombres =I_ITEM )
ALTER TABLE MOVIMIENTOS
DROP CONSTRAINT I_ITEM
GO
ALTER TABLE MOVIMIENTOS
ADD ITEM INT IDENTITY (1,1)
CONSTRAINTI_ITEM PRIMARY KEY (ITEM)
GO
EJEMPLO 083
Ejemplo practico para usted, En este ejemplo vamos a considerar que tenemos
una tabla llamada TIPODOCUM donde su estructura es :
Iddocum
INTEGER
Detalle
VARCHAR (40)
Crear la restriccin IDENTITY en la tabla TIPODOCUM considerando que el campo
IDDOCUM sea auto numrico.
Solucinelo
NOTA
Cuando se describe este concepto es para definir una columna numrica entera en la que el valor de la
columna es autogenerada a medida que se van incrementando las filas.
EJEMPLO 084
Vamos a considerar que existe
siguientes campos: cdigo y nomb
campo cdigo sea auto numrico d
USE BDEJEMPLO02
Create TABLE laboratorio (
Codigo
INT IDENTITY (1,1) P
Nombre
varchar(20) NOT NUL
)
Go
- - vamos a considerar para insertar fi
INSERT INTO laboratorio (nombre) va
INSERT INTO laboratorio (nombre) va
INSERT INTO laboratorio (nombre) va
INSERT INTO laboratorio (nombre) va
EJEMPLO 085
En una tabla de MOVIMIENTOS d
sistema en un determinado campo
fecharegistro, pues para esto
insertaremos de tipo fecha_hora.
USE BDEJEMPLO02
GO
INSERT INTO MOVIMIENTOS(cdigo
VALUES(100A,GRUPO SIA
GO
EJEMPLO 086
Tenemos una tabla llamada vivienda y una de sus columnas es de formato
fecharesolucion DATETIME NOT NULL, insertar la fecha 27 de agosto del 2010 a
la columna fecharesolucion.
USE BDEJEMPLO02
GO
INSERT INTO vivienda(Nombres, fecharesolucion)
VALUES(HARUMI PEREDA,27 AGO 2010)
GO
INTEGRIDAD DE DOMINIO
La integridad de dominio viene dada
determinada.
Restricciones CHECK
ALTER TABLE <Nombre de la tabla
Add CONSTRAINT <Variabl
EJEMPLO 087
EJEMPLO 088
Tenemos el ejemplo del ejercicio anterior, ahora ingresaremos otro valor de fecha
que es 28 de MARZO 2010, para esto deseamos insertar en cada columna
Vamos a considerar una tabla llam
CHECK sobre la columna cdigo de
Para este ejemplo deseamos cons
puedan ingresar dgitos desde el 0
USE BDEJEMPLO02
GO
INSERT INTO vivienda(Nombres, fecharesolucion)
VALUES(MARILUISA PASCAL,03/28/2010)
GO
-- Observe que se ha ingresado el mes, luego el dia y posteriormente el ao.
USE BDEJEMPLO02
GO
ALTER TABLE ALUMNO
ADD CONSTRAINT CHK_CO
GO
Tenemos el ejemplo del ejercicio anterior, ahora ingresaremos otro valor de fecha
que es 08 ABRIL1996 , Pero en formato correcto da - mes y ao, pues para esto
emplearemos el formato SET DATEFORMAT al iniciar antes de insertar la fecha
SET DATE FORMAT dmy
USE BDEJEMPLO02
GO
INSERT INTO vivienda(Nombres, fecharesolucion)
VALUES(HARUMI PEREDA,08/04/1996)
GO
EJEMPLO 089
Crear una restriccin CHECK para
considerando que no puede ser el v
USE BDEJEMPLO02
GO
ALTER TABLE MOVIMIENTO
ADD CONSTRAINT CHK_PV
GO
CONSTRAINT PK_LIBRO_MATERIA
)
EJEMPLOS PRACTICOS CON RESTRICCIONES
CREATE TABLE TIP_OPERADOR
(
idTipoOPERADOR int Identity(1,1),
descTipoOPERADOR varchar(20) NOT NULL,
CONSTRAINT PK_TIP_OPERADOR PRIMARY KEY(idTipoOPERADOR)
)
GO
CREATE TABLE OPERADOR
(
idOPERADOR char(8)NOT NULL,
idTipoOPERADOR int NOT NULL,
apelOPERADOR varchar(35)NOT NULL,
nomOPERADOR varchar(35) NOT NULL,
direccion varchar(50)NULL,
habilitado bit NOT NULL,
fechaExpCarnet smalldatetime NOT NULL,
fechaVencCarnet smalldatetime NOT NULL,
CONSTRAINT PK_OPERADOR_idOPERADOR PRIMARY KEY(idOPERADOR),
CONSTRAINT FK_OPERADOR_idTipoOPERADOR FOREIGN KEY
(idTipoOPERADOR) REFERENCES TIP_OPERADOR(idTipoOPERADOR)
)
GO
CREATE TABLE LIBRO_MATERIA
(
idMatBiblio varchar(20)NOT NULL,
tituloMatBiblio varchar(150)NOT NULL,
editorial varchar(50)NULL,
pais varchar(20)NULL,
ao smalldatetime NULL,
nPag int NULL,
existencia int NOT NULL,
CREATE TABLE PRESTAMO
(
codOper char(7)NOT NULL,
idMatBiblio varchar(20)NOT NULL,
idOPERADOR char(8)NOT NULL,
fechaP smalldatetime NOT NULL,
fechaD smalldatetime NOT NULL,
ndias int NOT NULL,
CONSTRAINT PK_PRESTAMO_codO
CONSTRAINT
FK_PRESTAMO
REFERENCES LIBRO_MATERIA(idM
)
GO
CREATE TABLE AUTOR
(
idAutor char(4)NOT NULL,
nomAutor varchar(50)NOT NULL,
CONSTRAINT PK_AUTOR_idAutor P
)
GO
CREATE TABLE MB_AUTOR
(
idMatBiblio varchar(20)NOT NULL,
idAutor char(4)NOT NULL,
CONSTRAINT PK_MB_AUTOR_idMa
PRIMARY KEY(idMatBiblio,idAutor),
CONSTRAINT FK_MB_AUTOR_idMa
FOREIGN KEY(idMatBiblio) REFERE
CONSTRAINT FK_MB_AUTOR_idAu
FOREIGN KEY(idAutor) REFERENC
)
GO
Modificar una restriccin CHECK
INTEGRIDAD REFERENCIAL
Recordemos que si queremos modificar una restriccin CHECK en una tabla ya
existente, mediante T-SQL antes debe eliminar la restriccin y a continuacin
volver a generarla.
Protege las relaciones definidas entre
SQL, recordemos que la integridad
coherentes en las distintas tablas.
Cuando se fuerza la integridad referen
Agregar registros a una tabla
Cambiar valores en una tabla
Eliminar registros de una tabla
EJEMPLO 090
Eliminar una restriccin CHECK de la tabla MATRICULA, llamada CHECK_ORDEN
USE BDEJEMPLO02
GO
IF
EXISTS
(Select
Nombres
NOMBRES=CHECK_ORDEN)
ALTER TABLE MATRICULA
DROP CONSTRAINT CHECK_ORDEN
GO
FROM
SYSOBJECT
where
/*Vamos a crear una restricci
FARMACIA*/
RETSRICCIONES FOREIGN KEY
Se usa para hacer referencia a otra tabla.
Las restricciones de este tipo se pueden:
Crear cuando se crea la tabla en el momento de la definicin
Agregar a una tabla ya existente siempre que la restriccin FK este vinculada a
una restriccin Primary Key o UNIQUE de otra o de la misma tabla.
Una tabla puede contener varias restricciones FK
Modificar o eliminar si ya existen FK mediante T-SQL o SLDMO antes debe
eliminar la restriccin existente.
Cuando se procede a eliminar una fila de una tabla a la que apuntan claves
forneas la eliminacin falla, debido a que las filas que contienen la clave
fornea no pueden quedar hurfanas.
La integridad referencial en cascada permite controlar las acciones cuando se intenta
actualizar o eliminar una clave primaria.
Con la restriccin "foreign key" se define un campo (o varios) cuyos valores coinciden
con la clave primaria de la misma tabla o de otra, es decir, se define una referencia a un
campo con una restriccin "primary key" o "unique" de la misma tabla o de otra.
EJEMPLO 091
Crearemos un ejemplo de integridad referencial, para ello vamos a crear diferentes
restricciones
/*Vamos a crear una restriccin llamada con_01, cuya tabla se llamara BODEGA*/
/*Si existe lo eliminamos*/
IF EXISTS (Select Nombres FROM SYSOBJECT where NOMBRES=CON_01)
ALTER TABLE BODEGA
DROP CONSTRAINT CON_01
GO
/*Ahora lo crearemos e insertamos una columna ID_DET */
ALTER TABLE BODEGA
ADD ID_DET INT IDENTITY (1,1)
CONSTRAINT CON_01 PRIMARY KEY (ID_DET)
GO
/*Si existe lo eliminamos*/
IF EXISTS (Select Nombres FROM S
ALTER TABLE FARMACIA
DROP CONSTRAINT CON_0
GO
/*Ahora lo crearemos e insertamos
ALTER TABLE FARMACIA
ADD FECHAINGRESO DATE
CONSTRAINT CON_02 DEF
GO
/*Vamos a crear una restriccin lla
esta relacionada con la tabla F
CODBIENES*/
/*Si existe lo eliminamos*/
IF EXISTS (Select Nombres FROM S
ALTER TABLE BIENES
DROP CONSTRAINT CON_0
GO
/*Ahora lo crearemos */
ALTER TABLE BIENES
ADD CONSTRAINT CON_03
REFRENCES FARMACIA (C
GO
Donde pubs es la base de datos dond
ADMINISTRADOR CORPORATIVO
Usando el Administrador Corporativo, podemos crear una Base de datos, asimismo
crear un diagrama de base de datos >nuevo diagrama de base de datos> en la
ventana activa agregaremos todas las tablas creadas disponibles; luego finalizamos y a
continuacin nos mostrar en una ventana el diagrama efectuado.
Cuando usted est creando el diagrama mostrara el siguiente error el cual usted
proceder a corregir
Para solucionar este problema ejecutamos las siguientes sentencias sql, seleccionado la
base de datos Master.
EXEC sp_dbcmptlevel PUBS, 90 ;
go
ALTER AUTHORIZATION ON DATABASE::pubs TO sa
go
use pubs
go
EXECUTE AS USER = Ndbo REVERT
Go
DISEAR DIAGRAMAS DE BASE D
[Este tema pertenece a la Libroacin
versiones futuras. Los temas en bla
NOTA: Con el fin de proporcionarle
ofrece Libroacin localizada median
versin preliminar, parte del contenid
uso de estos mtodos. Microsoft es
forma no son siempre perfectos, por l
de vocabulario, sintaxis o gramtica.
los mtodos tradicionales y la calidad
El Diseador de bases de datos es una herramienta visual que permite disear y ver
una base de datos a la que est conectado. Cuando se disea una base de datos, se
puede utilizar el Diseador de bases de datos para crear, editar o eliminar tablas,
columnas, claves, ndices, relaciones y restricciones. Para ver una base de datos, puede
crear uno o varios diagramas que muestren algunas o todas las tablas, columnas,
claves y relaciones de la base de datos.
Para cualquier base de datos, puede
desee; cada tabla de base de dato
diagramas. De este modo, puede crea
la base de datos o resaltar diversos
diagrama grande que muestre todas l
un diagrama ms pequeo que mues
Cada diagrama de base de datos que
Tablas y columnas de un diagrama
En un diagrama de base de datos, c
distintas: una barra de ttulo, un s
propiedades.
Barra de ttulo La barra de ttulo mu
Si ha modificado una tabla y no la h
final del nombre de la tabla que ind
ms informacin sobre cmo guardar
diagramas de base de datos (Visual D
Selector de fila Puede hacer clic e
de base de datos de la tabla. El se
columna se encuentra en la clave pri
las claves principales, vea Trabajar co
Columnas de propiedades El conju
determinadas vistas de la tabla. Disp
que le ayudan a controlar el tamao y
Para obtener ms informacin sobr
cantidad de informacin mostrada en
Relaciones de un diagrama de base de datos
En un diagrama de base de datos, cada relacin puede aparecer con tres caractersticas
distintas: los extremos, un estilo de lnea y las tablas relacionadas.
INTEGRIDAD REFERENCIAL EN CA
Se dice integridad referencial en casc
esta relacionado con otra tabla.
EJEMPLO 092
Extremos Los extremos de la lnea indican si la relacin es de uno a uno o de uno a
varios. Si una relacin tiene una clave en un extremo y un smbolo en forma de ocho en
el otro extremo, se trata de una relacin de uno a varios. Si una relacin tiene una clave
en cada extremo, se trata de una relacin de uno a uno.
En este ejemplo tenemos dos ta
cabecera donde se almacenan lo
mencin
Tabla Cabecera
Numdoc
Estilo de lnea La lnea en s misma (no sus extremos) indica si el sistema de
administracin de bases de datos (DBMS) exige integridad referencial para la relacin
cuando se agregan datos nuevos a la tabla de clave externa. Si la lnea aparece slida,
el DBMS exige integridad referencial para la relacin cuando se agregan o modifican
filas en la tabla de clave externa. Si la lnea aparece punteada, el DBMS no exige
integridad referencial para la relacin cuando se agregan o modifican filas en la tabla de
clave externa.
Tablas relacionadas Una relacin de clave externa entre dos tablas se indica
mediante una lnea de relacin entre ellas. En el caso de una relacin de uno a varios, la
tabla de clave externa es la tabla situada cerca del smbolo en forma de ocho de la
lnea. Si ambos extremos de la lnea estn conectados a la misma tabla, la relacin es
reflexiva. Para obtener ms informacin, vea Cmo dibujar relaciones reflexivas (Visual
Database Tools).
Tipodocum
FECHA
TOTAL
Tabla Movimientos
NUMDOC
FECHA
TIPODOCUM
RUC
DETALLE
NOTA
CANT
Recordemos que cuando una determinada tabla tiene restricciones referenciales forneas no se puede
eliminar para ello primero debemos eliminar el ndice de restriccin.
PUNIT
TOTAL
Y cuando deseamos eliminar un registro de la tabla movimiento entonces tambin debe
eliminarse de la otra tabla llamada cabecera.
DEFINICION DEFAULT
/*Ahora vamos a definir la clave fornea de la tabla movimientos, eliminando la clave
fornea si existe, para volver a crear otra, estableciendo la eliminacin en cascada*/
ALTER TABLE MOVIMIENTOS
DROP CONSTRAINT FK_MOVIMIENTOS_CABECERA
GO
ALTER TABLE MOVIMIENTOS
ADD CONSTRAINT FK_MOVIMIENTOS_CABECERA
FOREIGN KEY (NUMDOC,TIPODOCUM)
REFERENCES CABECERA
ON DELETE CASCADE
GO
EJEMPLO 093
EJEMPLO 095
Mostrar la creacin de una
FECHAINGRESO de una tabla llam
en la fecha del sistema sobre la
columna fechaingreso.
En el siguiente ejemplo muestra la creacin de una restriccin FOREIGN KEY
sobre la columna IDCATEGORIA de la tabla Articulo en la Base de datos
BDEJEMPLO02
/* Llamamos a la tabla Artculos */
IF
EXISTS
(Select
Nombres
FROM SYSOBJECTS WHERE
=FK_CATEGORIA)
ALTER TABLE ARTICULOS
DROP CONSTRAINT FK_CATEGORIA
GO
ALTER TABLE ARTICULOS
ADD CONSTRAINT FK_CATEGORIA FOREIGN KEY (Idcategoria)
REFERENCES Categoria (Idcategoria)
GO
IF EXISTS (Select Nombres FRON SY
ALTER TABLE MOVIMIENTO
DROP CONSTRAINT DF_FE
GO
ALTER TABLE MOVIMIENTO
ADD FECHAINGRESO DATE
CONSTRAINT DF_FECHADE
Nombres
EJEMPLO 094
Ejecutar el procedimiento almacenado SP_HELPCONSTRAINT para verificar la
existencia de las restricciones en la tabla usuario.
EXEC SP_HELPCONSTARINT USUARIO
Cuando cargue una fila en una tabla
esta indicando implcitamente a SQL
Recuerda que para modificar una d
antes debe eliminar la definicin DEF
EJEMPLO 096
En este caso ejemplo vamos a ins
llamada PERSONAL, para este ca
usuario requiera.
USE PADRON
GO
INSERT INTO PERSONAL (c
VALUES (100AA,CESAR P
GO
NOTA
TRUNCATE TABLE es una sentencia el cual s
MEMORIA AYUDA
Cerrar el archivo de log de SQL Ser
Debemos cerrar el archivo log de SQ
que los archivos de log se reinician
cierra el fichero de log de SQL Serve
fichero. Igual pasa con el fichero de
ocasiones estos ficheros crecen muc
mano y abrir uno nuevo.
Esto se puede hacer con dos instrucc
Para cerrar el fichero de log de errore
EXEC master.sys.sp_cycle_errorlog;
Para cerrar el fichero de log de errore
EXEC msdb.dbo.sp_cycle_agent_erro
El Hack en cuestion se trata de hace
T-SQL
cadena hasta la ltima utilizando la
DATALENGTH. De esta forma, con
Los ndices aceleran la recuperacin de los datos, el cual es ms fcil localizar un
determinado registro.
Reemplazar un texto en SQL Server con TSQL
tipo STRING o VARCHAR y asi pode
Un ejemplo seria:
SELECT REPLACE(
todo. Para estos casos existe una funcion REPLACE que se ejecuta en SQL y es
SUBSTRING(campo, 1, DATALEN
'a', 'b') FROM tabla
Y es aqu cuando nos encontramos
longitud de la cadena. Cuando traba
como podra ser una pgina web, el S
completa, por lo que se nos cortara
original, eso si, ya reemplazado
similar a la de la mayora de lenguajes de programacin.
Depurar Consultas en TSQL
Supongamos que tenemos un campo con un texto y lo recuperamos con una consulta
SQL. Supongamos tambin que queremos cambiar parte del contenido de ese texto y
reemplazarlo por otro, en este caso realizaramos un replace por cdigo
(programacin), pero y si esto no nos vale, y si necesitamos que sea por consulta
La llamada a la funcin de reemplazo (REPLACE) se usara dentro de cualquier
cdigo SQL o TSQL en SQL Server. La funcin REPLACE tiene 3 parmetros, el
texto original completo, el texto que se quiere buscar y por ltimo el texto por el que se
quiere sustituir como se hace en muchos lengaujes de programacin.
La sintaxis sera:
REPLACE(TEXTO, BUSCADA, SUSTITUIDA)
Un ejemplo de como se incrustara el reemplazo en una consulta SQL sera:
SELECT REPLACE(campo, 'a', 'b') FROM tabla
Aqui nos encontramos con el primer de los dos grandes problemas de reemplazar texto
con esta funcin. El primer problema son los campos de tipo TEXT, que al parecer,
para SQL Server son objetos diferentes que los campos de tipo CHAR o VARCHAR y
para poder reemplazar un campo de tipo TEXT necesitamos hacer un pequeo HACK
que nos convierta de tipo TEXT a tipo STRING como si de un VARCHAR se tratase.
Son muchas las veces que un progra
SQL, T-SQL) desde Microsoft Visual
obtenemos el string infinitamente larg
tabulado con mimo en nuestro cdi
queremos resolver un fallo en esta co
en el Management Studio de Microso
tabularla para que sea ms fcil enten
Con este truco evitaremos malgastar
Microsoft SQL Server formatear esta
Al capturar la consulta desde la ins
Studio para depurarla, podramos obt
caso, pero nos sirve como ejemplo):
Consulta T-SQL original en una nica lnea
Ahora, ejecutamos el editor de consultas de Microsoft SQL Server Mangement Studio
pinchando en el icono que aparece en la siguiente imagen:
Microsoft SQL Server Mangement Stu
Pegamos la consulta que habiamos
inferior de la pantalla (marcado en ro
foco de ese recuadro haciendo clic en
Microsoft SQL Server Mangement Studio - Disear consulta
Aparecer esta ventana que ignoraremos en este caso.
Pegamos la consulta T-SQL
En este momento aparecer en el recuadro superior una vista de diseo de todas las
tablas que intervienen en nuestra consulta SQL, y la relacin que existe entre ellas, y en
la parte inferior podremos ver nuestra consulta SQL formateada automticamente por
Microsoft SQL Server Mangement Studio.
Consulta formateada
Ya slo quedara pulsar en Aceptar de la pantalla anterior para que la consulta nos sea
devuelta y podamos ejecutarla.
Consulta formateada y lista para ejecutar
Anotaciones a tener en cuenta en T SQL
Para programar en Transact SQL es necesario conocer sus fundamentos.
Como introduccin vamos a ver algunos elementos y conceptos bsicos del lenguaje.
-- declare declara una variable
-- @nombre es el identificador de la
-- variable de tipo varchar
set @nombre = 'GUNE'
-- El signo = es un operador
print @Nombre -- Imprime por pantal
Scripts y lotes.
Transact SQL no es CASE-SENSITIVE, es decir, no diferencia maysculas de
minsculas como otros lenguajes de programacin como C o Java.
Un script de Transact SQL es un co
de texto plano que se ejecutan en un
Un comentario es una aclaracin que el programador incluye en el cdigo. Son
soportados 2 estilos de comentarios, el de lnea simple y de multilnea, para lo cual
son Registros ciertos caracteres especiales como son:
Un script est compuesto por uno
variables y sentencias del script. Den
lotes a travs de la instruccin GO.
-- Para un comentario de lnea simple
/* ... */ Para un comentario de varias lneas
Un literal es un valor fijo de tipo numrico, caracter, cadena o lgico no representado
por un identificador (es un valor explcito).
Una variable es un valor identificado por un nombre (identificador) sobre el que
podemos realizar modificaciones. En Transact SQL los identificadores de variables
deben comenzar por el caracter @, es decir, el nombre de una variable debe
comenzar por @.Para declarar variables en Transact SQL debemos utilizar la palabra
clave declare, seguido del identificador y tipo de datos de la variable.
-- Este es el primer lote del script
SELECT * FROM COMENTARIOS
GO -- GO es el separador de lotes
-- Este es el segundo lote del script
SELECT getdate() -- getdate() es una
-- la fecha
En ocasiones es necesario separar la
no permite la ejecucin de ciertos c
tambin se utilizan los lotes para reali
Dentro de los Elementos de TSQL ten
Veamos algunos ejemplos:
/* Este es un comentario con varias lneas.
Conjunto de Lineas.*/
declare @nombre varchar(50)
DML (Data Manipulation L
datos(SELECT, INSERT,UPD
DDL (Data Definition Langua
DROP)
DCL (Data control language)
DENY, REMOVE)
Elementos adicionales como variables, operadores, funciones, sentencias.
Tipos de Sentencias de T-SQL.
Sentencias de Lenguaje de Definicin de Datos (LDD).
Sentencias de Lenguaje de Control de Datos (LCD).
Sentencias de Lenguaje de Manipulacin de los datos (LMD).
Lenguaje de Definicin de Datos (LDD).
Las sentencias de Definicin de datos nos ayudan a definir todos los objetos de
la base de
datos. Claro para poder hacer uso de estas sentencias se deben de tener los
permisos
adecuados.
Algunas Sentencia LDD son:
CREATE nombre_objeto
ALTER nombre_objeto
DROP nombre_objeto
Lenguaje de Control de Datos (LCD)
Estas sentencias son usadas para modificar los permisos asociados a un
usuario o rol de
la base de datos. Al igual que los LDD para poder ejecutar alguna de estas
sentencias se
deben tener los permisos adecuados.
Sentencias LCD:
GRANT
DENY
REVOKE
Lenguaje de Manipulacin de Datos (LMD)
Las sentencias LMD trabajan con los datos en la base de datos. Estas
sentencias se
utilizan para insertar, modificar, eliminar y recuperar los datos.
Sentencias LMD:
INSERT
UPDATE
DELETE
TIPOS DE DATOS DE SQL SERVER
Los tipos de datos definen los valores
tablas de la base de datos. SQL Serv
Categoras de los Tipos de Datos:
Algunos tipos de datos de SQL Serve
Instruccin CREATE
Vamos a examinar la estructura comp
con la ms general. Descubrir que la
forma y despus dan paso a sus espe
siempre igual
EJEMPLO 097
Haciendo uso de la declaracin DM
USE MASTER
GO
SELECT CODIGO, NOMBRES, DIRE
GO
EJEMPLO 098
Haciendo uso de la declaracin DD
USE MASTER
GO
CREATE TABLE PERSONAL(
Nombres char (10) PRIMARY KEY,
Telefono varhar(20) NOT NULL,
Edad int NOT NULL)
GO
EJEMPLO 099
Haciendo uso de la declaracin DC
USE MASTER
GO
GRANT SELECT ON PERSONAL TO
Las variables locales se utilizan para almacenar valores (de cualquier tipo) con en un
lote. que son locales, ya que slo se puede hacer referencia dentro del mismo
procedimiento en el que se declaran. variables locales deben ser definidos usando la
instruccin declare y cada variable contiene su nombre y el tipo de datos
correspondiente. Variable se hace referencia en un lote con el prefijo @ (arroba). La
asignacin de un valor a una variable local se realiza mediante la instruccin SELECT y
la instruccin SET.
Comentarios
(--) se puede emplear doble guion p
lnea que el cdigo que se va a ejecut
(/*..*/) se puede emplear para los co
comentario.
Los nombres de variable deben comenzar con una arroba (@) signo. Las variables
locales se deben seguir reglas de los identificadores
EJEMPLO 100
Uso de las variables
-- En este caso lo emplearemos par
use master
go
DECLARE @Test1 int, @Test2 int
SET @Test1 = 3000
SET @Test2 =2000
if(@Test1 <@Test2 )
print 'test1 is greater than test2'
--select @Test1 as test1
else begin
print 'test2 is greater than test1'
--select @Test2 as test2
end
go
/* Ahora Observemos los resultad
varias lneas para esto es las diago
Las Variables globales son predefinidas y mantenidas por SQL SERVER El usuario
no puede asignar o cambiar directamente los valores de las variables globales.
use master
go
SELECT Codigo, nombres, apellidos FROM PADRON
WHERE LEFT(CODIGO,4)=1000
SELECT @@rowcount
GO
Tipos de Funciones en TSQL
Tipos de datos y funciones de fech
Todas estas funciones son propias
Las secciones siguientes de este tem
datos y funciones de fecha y la ho
ejemplos comunes a los tipos de dato
fecha y hora.
Tipos de datos de fecha y hora
[+|-]hh:mm
En la tabla siguiente se enumeran los tipos de datos de fecha y hora de Transact-SQL.
Tipo de datos
time
Formato
hh:mm:ss[.nnnnnnn]
Intervalo
De 00:00:00.0000000 a
23:59:59.9999999
Precisin
100
nanosegundos
Funciones de fecha y hora
En las tablas siguientes se enumera
Para obtener ms informacin acerca
no deterministas.
Funciones que obtienen valores de
date
AAAA-MM-DD
De 0001-01-01 a 999912-31
smalldatetime
AAAA-MM-DD
hh:mm:ss
De 1900-01-01 a 207906-06
1 minuto
AAAA-MM-DD
hh:mm:ss[.nnn]
De 1753-01-01 a 999912-31
0,00333
segundos
datetime2
AAAA-MM-DD
hh:mm:ss[.nnnnnnn]
De 0001-01-01
00:00:00.0000000 a
9999-12-31
23:59:59.9999999
100
nanosegundos
datetimeoffset
AAAA-MM-DD
hh:mm:ss[.nnnnnnn]
De 0001-01-01
00:00:00.0000000 a
9999-12-31
100
nanosegundos
datetime
1 da
Todos los valores de fecha y hora
equipo en el que se ejecuta la instanc
Funciones de fecha y hora del siste
SQL Server 2008 obtiene los valore
GetSystemTimeAsFileTime(). La ex
versin de Windows en las que la
precisin de esta API se fija en 100
mediante la API de Windows GetSyst
Funcin
Sintaxis
SYSDATETIME
SYSDATETIM
SYSDATETIMEOFFSET
SYSDATETIM
()
que la instancia de SQL Server se est
ejecutando. El ajuste de zona horaria
est incluido.
SYSUTCDATETIME ( )
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en el
que la instancia de SQL Server se est
ejecutando. La fecha y hora se
devuelven como hora universal
coordinada (UTC).
Funciones que obtienen partes de l
SYSUTCDATETIME
Funcin
Sintaxis
DATENOMBRES
DATENOMBRES (
datepart , date )
Funciones de fecha y hora del sistema de precisin baja
Funcin
Sintaxis
Valor devuelto
DATEPART
DATEPART (
datepart , date )
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en
el que la instancia de SQL Server se
est ejecutando. El ajuste de zona
horaria no est incluido.
DAY
DAY ( date )
MONTH
MONTH ( date )
YEAR
YEAR ( date )
GETDATE
GETUTCDATE
GETDATE ( )
GETUTCDATE ( )
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en
el que la instancia de SQL Server se
est ejecutando. El ajuste de zona
horaria no est incluido.
Devuelve un valor datetime2(7) que
contiene la fecha y hora del equipo en
el que la instancia de SQL Server se
est ejecutando. La fecha y hora se
devuelven como una hora universal
Funciones que obtienen diferencias
Funcin
Sintaxis
DATEDIFF
DATEDIFF ( datepart ,
startdate , enddate )
Devuelve el nmero de lmites datepart de
fecha y hora entre dos fechas especificadas.
Funciones que modifican valores de fecha y hora
@@DATEFIRST
@@DATEFIRST
SET DATEFIRST
SET DATEFIRST {
number |
@number_var }
Funcin
Sintaxis
Valor devuelto
DATEADD
DATEADD (datepart ,
number , date )
Devuelve un nuevo valor datetime
agregando un intervalo al datepart
especificado del dateespecificado.
SET
DATEFORMAT
SET DATEFORMA
format |
@format_var }
SWITCHOFFSET
SWITCHOFFSET
(DATETIMEOFFSET ,
time_Lugar)
SWITCH OFFSET cambia el ajuste de
zona horaria de un valor
DATETIMEOFFSET y conserva el
valor UTC.
@@LANGUAGE
@@LANGUAGE
TODATETIMEOFFSET
TODATETIMEOFFSET
(expression ,
time_Lugar)
TODATETIMEOFFSET transforma un
valor datetime2 en un valor
datetimeoffset. El valor datetime2
se interpreta en la hora local para
el valor time_Lugar especificado.
SET LANGUAGE
SET LANGUAGE
'language' |
@language_var
Funciones que establecen u obtienen un formato de sesin
Funcin
Sintaxis
Valor devuelto
sp_helplanguage
sp_helplanguage [ [
@language = ]
'language' ]
Devuelve informacin sobre los formatos
de fecha de todos los idiomas
compatibles. sp_helplanguage no es un
procedimiento almacenado de fecha u
hora. Sin embargo, la configuracin de
idioma afecta a la salida de las funciones
de fecha.
CAST y CONVERT
(Transact-SQL)
Proporc
valores
formato
Escribir instrucciones
Transact-SQL
internacionales
Proporc
datos y
instrucc
admiten
Funciones escalares de
ODBC (Transact-SQL)
Proporc
ODBC qu
SQL. Est
Asignacin de tipos de
datos con consultas
distribuidas
Proporc
de fecha
servidor
Server o
Funciones que validan valores de fecha y hora
Funcin
Sintaxis
Valor devuelto
ISDATE
ISDATE (
expression
)
Determina si una
expresin de entrada
datetime o
smalldatetime es un
valor de fecha u hora
vlido.
Tipo de
datos
devuelto
int
Determinismo
ISDATE slo es
determinista si se utiliza con
la funcin CONVERT,
cuando se especifica el
parmetro de estilo
CONVERT y cuando el
estilo no es igual a 0, 100, 9
ni 109.
Temas relacionados con la fecha y hora
Tema
Descripcin
Usar datos de fecha y
hora
Proporciona informacin y ejemplos comunes a las
funciones y tipos de datos de fecha y hora.
Funciones de seguridad en TSQL
Argumentos
principal_Nombres
Es una expresin de tipo
seguridad.
Si se omite el parmetro p
actual. Es obligatorio utilizar p
CURRENT_USER
Devuelve el nombre de usuario actual. Esta funcin es equivalente a
USER_NOMBRES().
Sintaxis
CURRENT_USER
Tipos de valores devueltos Nombre del sistema
Notas
Tipos de valor devueltos
int
NULL cuando la entidad de base de d
Notas
CURRENT_USER devuelve el nombre del contexto de seguridad actual. Si
CURRENT_USER se ejecuta despus de una llamada a EXECUTE AS, cambia el
contexto; CURRENT_USER devolver el nombre del contexto suplantado. Si una
entidad de seguridad de Windows ha tenido acceso a la base de datos en concepto de
pertenencia a un grupo, se devolver el nombre de la entidad de seguridad de Windows
en vez del nombre del grupo.
DATABASE_PRINCIPAL_ID se pued
WHERE o en cualquier lugar en el
informacin.
A. Utilizar CURRENT_USER para devolver el nombre del usuario actual
A. Recuperar el Id. del usuario actu
En el ejemplo siguiente se devuelve el nombre del usuario actual.
En el siguiente ejemplo se devuelve
del usuario actual.
SELECT CURRENT_USER;
GO
Ejemplos
SELECT DATABASE_PRINCIPAL_ID
GO
B. Recuperar el Id. de la entidad de
DATABASE_PRINCIPAL_ID
Devuelve el nmero de Id. de una entidad de seguridad de la base de datos actual. Para
obtener ms informacin acerca de las entidades de seguridad.
DATABASE_PRINCIPAL_ID ( 'principal_Nombres' )
En el siguiente ejemplo se devuelve
de la funcin de base de datos db_ow
SELECT DATABASE_PRINCIPAL_ID
GO
(1 fila afectada)
USER_NOMBRES
C. Usar USER_NOMBRES en la clu
Devuelve un nombre de usuario de base de datos a partir de un nmero de
identificacin especificado.
En el siguiente ejemplo se busca la
resultado de aplicar la funcin del sis
de usuario 1.
USER_NOMBRES ( [ id ] )
Es el nmero de identificacin asociado a un usuario de la base de datos. id es de tipo
int. Es obligatorio utilizar parntesis.
Cuando se omite id, se asume que se trata del usuario actual en el contexto actual.
Cuando se llama a USER_NOMBRES sin especificar un id despus de una instruccin
EXECUTE AS, USER_NOMBRES devuelve el nombre del usuario representado. Si una
entidad de seguridad de Windows ha tenido acceso a la base de datos en forma de
miembro de un grupo, USER_NOMBRES devuelve el nombre de la entidad de
seguridad de Windows en vez del nombre del grupo.
A. Usar USER_NOMBRES
SELECT Nombres FROM sysusers W
GO
El conjunto de resultados es el siguien
Nombres
-----------------------------dbo
(1 fila afectada)
D. Llamar a USER_NOMBRES dura
En el siguiente ejemplo se muestra
suplantacin.
En el siguiente ejemplo se devuelve el nombre de usuario del Id. de usuario
SELECT USER_NOMBRES(13);
GO
B. Usar USER_NOMBRES sin un identificador
En el siguiente ejemplo se busca el nombre del usuario actual sin especificar un
identificador.
SELECT USER_NOMBRES();
GO
Este es el conjunto de resultados para un usuario que pertenezca al rol fijo de servidor
sysadmin.
-----------------------------dbo
SELECT USER_NOMBRES();
GO
EXECUTE AS USER = 'Zelig';
GO
SELECT USER_NOMBRES();
GO
REVERT;
GO
SELECT USER_NOMBRES();
GO
USER_ID
Devuelve el nmero de identificacin
Esta caracterstica se quitar en una versin futura de Microsoft SQL Server. Evite
utilizar esta caracterstica en nuevos trabajos de desarrollo y tenga previsto modificar las
aplicaciones que actualmente la utilizan. Utilize en su Lugar
USER_ID ( [ 'user' ] )
Argumentos
user
Es el nombre de usuario que se va a utilizar. user es nchar. Si se especifica un valor
char, se convierte implcitamente en nchar. Es obligatorio utilizar parntesis.
Tipos de valor devueltos
int
Cuando se omite user, se da por supuesto que es el usuario actual. Cuando se llama a
USER_ID despus de EXECUTE AS, USER_ID devuelve el identificador del contexto
suplantado.
Cuando una entidad de seguridad de Windows que no se ha asignado a un usuario
especfico de base de datos tiene acceso a una base de datos en forma de pertenencia
a un grupo, USER_ID devuelve 0 (el identificador de pblico). Si este tipo de entidad de
seguridad crea un objeto sin especificar un esquema, SQL Server crear un usuario
implcito y un esquema asignados a dicha entidad. El usuario creado en casos como
ste no se puede utilizar para conectarse a la base de datos. Las llamadas a USER_ID
efectuadas por la entidad de seguridad de Windows asignada a un usuario implcito
devolvern el identificador de ste.
Se puede utilizar USER_ID en una lista de seleccin, en una clusula WHERE y en
cualquier lugar en el que se permita una expresin. Para obtener ms informacin
USE Cliente;
SELECT USER_ID('Harold');
GO
SYSTEM_USER
Permite insertar en una tabla un val
sesin actual cuando no se especifica
SYSTEM_USER
Tipos de valor devueltos nchar
Funciones de tipo carcter en TSQL
Funcin
CHR(n)
No
CONCAT(cad1, cad2)
No
UPPER(cad)
Co
LOWER(cad)
Co
LPAD(cad1,n[,cad2])
Co
izq
INITCAP(cad)
Co
LTRIM(cad [,set])
El
sie
RPAD(cad1, n[,cad2])
Co
qu
de
RTRIM(cad[,set])
Ha
REPLACE(cad,cadena_buscada
[,cadena_sustitucion] )
Su
ca
ca
SUBSTR(cad, m[,n])
De
el
TRANSLATE(cad1,cad2,cad3)
Co
dif
en
Ponemos algunos ejemplos de utilizacin de estas funciones:
Sentencia SQL que nos devuelve las letras cuyo valor ASCII es el 45 y el 23
SELECT CHR(45), CHR(23) FROM TABLA;
DECLARE @EDAD TINYINT
SET @EDAD = YEAR(GETDATE()) IF MONTH(GETDATE()) < MONTH(@
SET @EDAD=@EDAD-1
IF MONTH (GETDATE()) = MONTH(@
DAY(GETDATE())< DAY(@FECHNAC
SET @EDAD=@EDAD - 1
RETURN @EDAD
END
Sentencia SQL que obtiene el nombre de los alumnos sacando por pantalla la siguiente
frase: el nombre del alumno es (nombre que esta almacenado en la tabla)
SELECT dbo.CALEDAD('27/08/1969'
SELECT CONCAT ('el nombre de alumno es', nombre) from alumno;
Como determinar si un valor es imp
Sentencia SQL que me devuelve los nombres de los alumnos en maysculas
create function f_parimpar(@numero
returns varchar(50)
as
begin
SELECT UPPER(nombre) from alumno;
declare @mensaje varchar (50)
if (@numero%2=0)
set @mensaje='el numero :'+con
Sentencia sql que obtiene de un campo nombre, las 3 primeras letras
else
set @mensaje ='el numero :'+con
SELECT SUBSTR(nombre,0,3) from alumno;
return @mensaje
Procesos para calcular la edad de una persona
ALTER FUNCTION CALEDAD(@FECHNAC SMALLDATETIME)
RETURNS TINYINT
WITH ENCRYPTION
As
BEGIN
end
---2 llamada de la funcion
go
select dbo.f_parimpar (4)
como determinariamos el dia de la semana
create function f_Diasemana(@fecha datetime)
returns varchar(10)
as begin
declare @Dia varchar (10)
set @Dia=case DATEPART(WEEKDAY,@fecha)
when 1 then 'lunes'
when 2 then 'Martes'
when 3 then 'Miercoles'
when 4 then 'Jueves'
when 5 then 'Viernes'
when 6 then 'Sabado'
when 7 then 'Domingo'
end
return @Dia
end
go
declare @fec datetime
set @fec=convert(datetime,'17/11/2010',103)
select dbo.f_Diasemana (@fec) AS DIA
SET @ANO = @ANO - 1
SET @MES = 12 - (month(@FecNac)
END
IF MONTH(@FecNac) < MONTH(@F
BEGIN
SET @MES = (MONTH(@FecHoy) END
IF MONTH(@FecNac) = MONTH(@F
BEGIN
IF DAY(@FecNac) <= DAY(@FecHoy
BEGIN
SET @MES = 0
END
IF DAY(@FecNac) > DAY(@FecHoy)
BEGIN
SET @ANO = @ANO - 1
SET @MES = 11
END
END
RETURN RIGHT(' ' + @ANO,2) + ' A
END
DECLARE @FEC_NAC DATETIME
SET @FEC_NAC= convert(datetime,'
select DATEPART(WEEKDAY,GETDATE()) AS N_DIA
SELECT dbo.fn_Edades(@FEC_NAC
forma de calcular las edades
--FUNCION DARWIN (EDADES)
CREATE FUNCTION fn_Edades(@FecNac DATETIME, @FecHoy DATETIME)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @ANO VARCHAR(3)
DECLARE @MES VARCHAR(3)
SET @ANO = YEAR(@FecHoy) - YEAR(@FecNac)
IF MONTH(@FecNac) > MONTH(@FecHoy)
BEGIN
create function CalEdad(@fecha date
returns int
as begin
return datediff(yy,@fecha,getdate())
end
declare @fech datetime
set @fech= convert(datetime,'15/05/1
select dbo.CalEdad(@fech)
--SENTENCIA SELECTIVA MULTIPLE
DECLARE @MES INT
SELECT @MES=5
SELECT CASE @MES
WHEN 1 THEN 'ENERO'
WHEN 2 THEN 'FEBRERO'
WHEN 3 THEN 'MARZO'
WHEN 4 THEN 'ABRIL'
WHEN 5 THEN 'MAYO'
END
--PROCEDIMIENTOS ALMACENADOS
--SUMA DE DOS NUMEROS
CREATE PROCEDURE SUMA
@NUM1 INT,
@NUM2 INT,
@SALIDA INT OUTPUT
AS
SET @SALIDA = @NUM1 + @NUM2
GO
DECLARE @RES INT
EXECUTE SUMA 8,10, @RES OUTPUT
SELECT 'LA SUMA DE LOS NUMEROS ES' + CONVERT(VARCHAR, @RES)
--OPERACIONES MAT
CREATE PROCEDURE OPERACIONES
@NUM1 INT, @NUM2 INT, @OPERADOR VARCHAR(1), @SALIDA INT OUTPUT
AS
BEGIN
IF @OPERADOR = '+'
SET @SALIDA = @NUM1 + @NUM2
IF @OPERADOR = '-'
SET @SALIDA = @NUM1 - @NUM2
IF @OPERADOR = '*'
SET @SALIDA = @NUM1 * @NUM2
IF @OPERADOR = '/'
BEGIN
IF @NUM2<>0
SET @SALIDA = @N
END
END
DECLARE @RES INT
EXECUTE OPERACIONES 15,8,'*', @
SELECT @RES
Funciones que devuelven valores numricos
Usar funciones matemticas
Estas funciones nos devuelven nmeros a modo de informacin.
Una funcin matemtica realiza una o
devuelve el resultado de la operaci
numricos suministrados por el sist
money, smallmoney, smallint y tiny
operaciones integradas para el tipo de
Funcin
Propsito
ASCII(cad)
Devuelve el valor ASCII de la primera letra de cad
INSTR(cad1,
cad2[,comienzo[,m]])
Funcin que busca un conjunto de caracteres dentro de una
cadena. Nos devuelve la posicin de cad2 en cad1
empezando a buscar en comienzo
LENGTH(cad)
Devuelve en nmero de caracteres de cad
EJEMPLO 101
Como con las funciones anteriores dejamos unos ejemplos para que veis su
funcionamiento.
Sentencia SQL que nos devuelve el valor ASCII de la letra ('s')
select ASCII('s') from tabla;
De forma predeterminada, un nm
interpretado como un tipo de datos
CONVERT para cambiar el tipo de da
el valor devuelto por la funcin FLOO
entrada de la siguiente instruccin SE
es un valor decimal.
SELECT FLOOR(123.45);
--------------------123
(1 row(s) affected)
EJEMPLO 102
Sin embargo, el siguiente ejemplo util
Sentencia que nos devuelve la posicin de la ocurrencia 'pe' dentro de la cadena
'Los perros estn bien' a partir de la posicin 2
SELECT FLOOR (CONVERT (float, 1
select INSTR('Los perros estn bien','pe',2) from tabla;
------------------------------------123.000000
Sentencia sql que nos devuelve el numero de caracteres de los nombres de los alumnos
(1 row(s) affected)
select LENGTH(nombre) from alumnos;
Cuando el resultado float o real de
para mostrarse, se produce un error
resultado devuelto ser 0,0 y no se mostrar ningn mensaje de error. Por ejemplo, el
clculo matemtico de 2 elevado a la potencia -100,0 dara el resultado 0,0.
Los errores de dominio se producen cuando el valor proporcionado en la funcin
matemtica no es vlido. Por ejemplo, los valores especificados para la funcin ASIN
deben ser de -1,00 a 1,00. Si se especifica el valor -2, por ejemplo, se produce un error
de dominio.
Los errores de intervalo se producen cuando el valor especificado se encuentra fuera de
los valores permitidos. Por ejemplo, POWER(10,0, 400) excede el valor mximo
(~2e+308) del intervalo para el tipo de datos float y POWER(-10,0, 401) es menor que
el valor mnimo (~ -2e+308) del intervalo para el tipo de datos float.
En la siguiente tabla se muestran funciones matemticas que producen un error de
dominio o de intervalo.
Funcin matemtica
Resultado
SQRT(-1)
Error de dominio.
POWER(10,0, 400)
Error de desbordamiento aritmtico.
POWER(10,0, -400)
Valor 0,0 (desbordamiento negativo de punto flotante).
Se proporcionan capturas de error para controlar los errores de dominio o de intervalo
de estas funciones. Puede utilizar lo siguiente:
SET ARITHABORT ON. Esta opcin termina la consulta y finaliza la transaccin
definida por el usuario. La configuracin de SET ARITHABORT suplanta la
configuracin de SET ANSI_WARNINGS.
SET ANSI_WARNINGS ON.
SET ARITHIGNORE ON. Est
advertencia. Tanto la config
ANSI_WARNINGS suplantan
Funciones de Metadatos
Muchas veces los desarrolladores
metadata de SQL Server, que es es
informacin que guarda SQL Serve
columnas de una tabla, las vistas, el c
Imaginemos que deseamos saber los
en que tablas se encuentra una colu
una tabla, para poder hacer todo
metadata.
Bien, como lo hacemos, pues hay va
internas de SQL lo cual no es m
versiones del producto (hasta con l
funcionar nuestras querys, a partir d
son una mejora importante ya que no
directamente a las tablas de sistema,
La otra opcin es usar unas vistas A
soporten ANSI) llamadas INFORMAT
todas las versiones de SQL Server
puede obviamente consultar todo lo q
Bien, en este post les voy a mostrar distintas consultas habituales que hacemos como
desarrolladores y las resolver con las INFORMATION_SCHEMA.
Consultar informacin de las columnas de tablas
-- TABLAS QUE CONTIENEN UNA COLUMNA
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NOMBRES = 'CLIENTEID'
Listado de Tablas
SELECT * FROM INFORMATION_SCHEMA.TABLES
Campos que conforman una PK
SELECT
TC.TABLE_NOMBRES, CU.COLUMN_NOMBRES
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON TC.CONSTRAINT_NOMBRES = CU.CONSTRAINT_NOMBRES
WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND TC.TABLE_NOMBRES = 'CLIENTE' -- TABLA
ORDER BY TC.TABLE_NOMBRES
Relaciones entre Tablas
SELECT
FK_Table = FK.TABLE_NOMBRES,
FK_Column = CU.COLUMN_NOMBRES,
PK_Table = PK.TABLE_NOMBRES,
PK_Column = PT.COLUMN_NOMBRES,
ConstraintNombres = C.CONSTRAINT_NOMBRES
FROM
INFORMATION_SCHEMA.REFER
INNER JOIN
INFORMATION_SCHEMA.TABLE_
ON C.CONSTRAINT_NOMBRES
INNER JOIN
INFORMATION_SCHEMA.TABLE_
ON C.UNIQUE_CONSTRAINT_N
INNER JOIN
INFORMATION_SCHEMA.KEY_CO
ON C.CONSTRAINT_NOMBRES
INNER JOIN
(
SELECT
TC.TABLE_NOMBRES, CU.C
FROM
INFORMATION_SCHEMA.TABLE
INNER JOIN
INFORMATION_SCHEMA.KEY_C
ON TC.CONSTRAINT_NOMBRES
WHERE TC.CONSTRAINT_TYPE
) PT
ON PT.TABLE_NOMBRES = PK.T
WHERE
PK.TABLE_NOMBRES = 'CONTENID
Checks de una tabla dada
SELECT TC.TABLE_SCHEMA,TC.TA
CK.CHECK_CLAUSE
FROM INFORMATION_SCHEMA.C
INNER JOIN
INFORMATION_SCHEMA.TABLE_C
ON TC.TABLE_NOMBRES = CU.TAB
AND
TC.CONSTRAINT_NOMBRES = CU.
INNER JOIN
INFORMATION_SCHEMA.CHECK_CONSTRAINTS CK
ON
CK.CONSTRAINT_NOMBRES = TC.CONSTRAINT_NOMBRES
WHERE CONSTRAINT_TYPE = 'CHECK'
AND
TC.TABLE_NOMBRES = 'CLIENTE' -- TU TABLA
Funcin sub string: args(string, inici
Parmetros de un Store Procedure
SELECT CHARINDEX('n','Fernando',
SELECT SUBSTRING('Eoden',1,3)
Funcin buscar ndice de caracter:
Funcin espacio:
SELECT *
FROM INFORMATION_SCHEMA.PARAMETERS
WHERE SPECIFIC_NOMBRES ='ufnGetProductDealerPrice'
SET @valor = SPACE(9)
Funciones MS SQL con ejemplos
El script de la base de datos
Base de datos (bd.sql) 5,22 Kb
Funcin convertir a string:
lo
adjunto
como
enlace
continuacin:
STR(int)
Declaracin de variables:
Maysculas y minsculas:
Formato:
DECLARE @NombreVar tipo
SELECT UPPER(Nombre), LOWER(Apellido) FROM estudiantes
SET @NombreVar = Valor
Eliminar espacios:
SELECT LTRIM('
Aijuna!')
SELECT RTRIM('Nanuk
')
Longitud de un valor en un campo:
SELECT LEN(Nombre) FROM estudiantes
Ejemplo:
DECLARE @Nombre char(8)
DECLARE @Apellido char(6)
DECLARE @valor char(50)
DECLARE @Edad smallint
SET @Edad = 41
SET @valor = 'Fernando Briano'
SET @Nombre = Substring(@valor, 1
SET @Apellido = Substring(@valor, (c
SELECT @Nombre + ' ' + @Apellido + ' - edad: ' + CONVERT(char(3), @Edad) + ' aos'
FROM estudiantes AS E, estudiantes
WHERE EC.IdEstudiante = E.Ci
CONVERT:
CONVERT(Tipo, Campo o expresin, estilo)
Redondear valores:
El estilo en las FECHAS:
SELECT ROUND(479.90, -1)
103 muestra: 23/05/1986
ISDATE(campo)
Devuelve 1 si el campo contiene una
Valor nulo no es de tipo fecha
112 muestra: 19660523
114 muestra: hora
ISNUMERIC(campo)
Devuelve 1 si el campo contiene un v
FUNCIONES CON FECHAS
SELECT ISDATE(FechaIngreso) FRO
DATEADD(partefecha (dd, mm, yy), nmero, fecha)
SELECT CONVERT(char(10), getdate(), 103)
SELECT DATEADD(dd, 3, getdate())
DATEDIFF(partefecha, fecha1, fecha2)
Resta la parte de la fecha = fecha2 fecha1
SELECT DATEDIFF(yy, '19850707', getdate())
SELECT DATEDIFF(yy,FechaNac, getdate()) FROM Estudiantes
IDENTIFICADOR UNICO:
DECLARE @Identificador UNIQUEID
SET @Identificador = NEWID()
SELECT @Identificador
La funcin NEWID solamente funcion
UNIQUEIDENTIFIER
FUNCIONES DEL SISTEMA
DATEPART([dd,mm,y, dw(da de la semana)], fecha)
Generalmente llevan @@ adelante.
string @@ que nos va a mostrar la m
SELECT DATEPART(yy, getdate())
SELECT DATENOMBRES(mm, getdate())
SELECT DAY(getdate())
SELECT E.Nombre, DATEDIFF(yy, E.FechaNac, getdate()) AS Edad,
C.Descripcion , DATEDIFF(dd, FechaIngreso, getdate()) AS Antiguedad
@@ROWCOUNT
Devuelve
el
nmero
de
fila
Queda en cero cuando hubo error o n
SELECT * FROM estudiantes
SELECT @@rowcount AS Columnas
UPDATE estudiantes SET FechaEgreso = '07/07/2007' WHERE Nombre='Eustakio'
IF @@ROWCOUNT = 0 PRINT 'Santos Peruanos enchilados Batman! No ha
funcionado'
@@ERROR
Devuelve 0 si no hubo error, o distinto de cero con un cdigo especfico (valo en el
manual) con el error
RESTAURAR UNA BASE DE DATO
Las siguientes instrucciones estn
desarrolladores y administradores d
querer restaurar bases de datos.
Primer paso
@@IDENTITY
Muestra el ltimo identity de la tabla. O sea, si por ejemplo hacemos una columna con
valor int que va autoincrementando, y es identidad, al seleccionar ste valor, nos
devuelve el ltimo insertado.
Ingresamos al Administrador de SQ
Segundo paso
Daremos Clic Derecho Sobre Base
Crearemos sin Tablas ni nada inclus
Backup que queramos Restaurar
Observacin: Tienen que haber hecho el Backup de su Base de datos antes, para poder
hacer esto.
Tercer paso
Luego Damos Clic derecho sobre La C
Base de datos
Cuarto paso
Sexto Paso
Luego Elegimos la Base de Datos que deseamos ejecutar:
Damos clic en el Botn Agregar y Bus
backup de nuestra base de datos.
Sptimo Paso
Quito paso
Seleccionamos la Opcin Desde Dispositivo y damos Clic sobre el Botn que tiene los
puntos suspensivos y nos aparecer la siguiente pantalla.
En Esta Siguiente pantalla Seleccion
hemos hecho varios Backups de la Ba
octavo Paso
En Este mismo Cuadro nos dirigimos donde se encuentran las opciones General y
<Opciones> y Seleccionamos esta ultima y nos aparecer esta siguiente ventana que es
donde aparece la ruta por default que tiene establecido el backup, hay que cambiarlo a
la direccin donde se encuentra la base de datos que creamos como se muestra a
continuacin.
Noveno Paso
Luego que Tenemos Cambiada la Dir
casilla Sobrescribir la Base de
marque ningn error al momento de R
Decimo Paso
Regresamos a la Opcin General y Presionamos el Botn Aceptar Para Que Comience
la Restauracin.
Onceavo Paso
verificaremos que nuestra base de da
Original y ya Podremos Trabajar Tran
MEMORIA AYUDA
Nuevas Caractersticas de SQL SER
FECHA/HORA
SQL Server 2008 presenta nuevos tip
DATE un tipo de fecha solamente
TIME un tipo de hora solamente
DATETIMEOFFSET una zona conc
DATETIME2 tipo de fecha y hora c
amplios que los Tipo de DATETIME
Los nuevos tipos de datos permiten q
y hora, adems de ofrecer amplios ra
para valores temporales.
Asimismo los datos NULL no consum
eficiente de administrar datos vacos
Esparcidas admiten modelos de
almacenados en una base de datos d
CONSULTAS BASICAS
Microsoft SQL Server proporciona al usuario potentes caractersticas para realizar
consultas.
Una consulta es una peticin de datos almacenada el cual se puede ejecutar de
diferentes modos, ya sea empleando funciones graficas de usuario para seleccionar
datos de una o varias tablas.
SINTAXIS:
SELECT [ALL | DISTINCT ] <nombre
FROM <nombre_tabla>|<nombre_vist
[{,<nombre_tabla>|<nombre_
WHERE <condicion> [{ AND|
[GROUP BY <nombre_campo
[HAVING <condicion>[{ AND|
[ORDER BY <nombre_campo
[{,<nombre_campo>|<indice_
DML
DATA MANIPULATION LANGUAGE
Se conoce con este nombre a un conjunto de sentencias de SQL que permite extraer o
modificar los datos de la stablas almacenadas en una tabla, dentro de estas sentencias
tenemos:
SELECT
INSERT
UPDATE
DELETE
SELECT
Recupera los datos de SQL SERVER y los presenta de nuevo al usuario en una o mas
conjuntos de resultados, debiendo de recordar que existe tres componentes graficos en
la instruccin SELECT
SELECT
FROM
WHERE
Palabra clave que indica
es de seleccin.
Indica que queremos sel
ALL
no suele especificarse ca
DISTINCT Indica que queremos sel
Indica la tabla (o tablas)
caso de que exista ms
FROM
combinada" o "join". En l
condicin de combinaci
Especifica una condici
WHERE
devueltos por la consulta
Especifica la agrupaci
GROUP BY
combinacin con funcion
Especifica una condicin
condicin que debe cum
consulta. Su funcionam
HAVING
conjunto de resultados d
junto a GROUP BY y
contenidos en ella.
Presenta el resultado ord
ORDER BY expresarse con ASC (or
valor predeterminado es
SELECT
WHERE
La clusula WHERE es la instruccin que nos permite filtrar el resultado de una
sentencia SELECT. Habitualmente no deseamos obtener toda la informacin existente
en la tabla, sino que queremos obtener slo la informacin que nos resulte util es ese
momento. La clusula WHERE filtra los datos antes de ser devueltos por la consulta.
Recordemos pues, que la seleccin total o parcial de una tabla se lleva a cabo
mediante la instruccin Select. En dicha seleccin hay que especificar los campos que
queremos seleccionar y la tabla en la que hacemos la seleccin
Ejemplo:
Select nombre, direccin From clientes
Tipos de Operadores :
Operadores Matemticos
>
Mayor que
<
Menor que
>= Mayor o igual que
<= Menor o igual que
<> Distinto
Si quisisemos seleccionar todos los campos, es decir, toda la tabla, podramos utilizar
el comodn * del siguiente modo:
Select * From clientes
Dentro de los operadores Lgicos ten
Igual
Otros operadores
Resulta tambin muy til el filtrar los registros mediante condiciones que vienen
expresadas despus de la clusula Where. Si quisisemos mostrar los clientes de una
determinada ciudad usaramos una expresin como esta:
Like
Selecciona los registro
cuenta maysculas y m
In y Not In
Da un conjunto de valo
seleccin es (o no) val
Is Null y Is Not
Null
Selecciona aquellos re
Select * From clientes Where pas Like 'Per' Order By nombre
Between...And
Selecciona los registro
Teniendo en cuenta que puede haber ms de un cliente con el mismo nombre,
podramos dar un segundo criterio que podra ser el apellido:
Distinct
Selecciona los registro
Desc
Clasifica los registros p
Select * From clientes Where pas Like 'Per'
Adems, podramos ordenar los resultados en funcin de uno o varios de sus campos.
Para este ultimo ejemplo los podramos ordenar por nombre as:
Select * From clientes Where pais Like 'Per' Order By nombre, apellido
EJEMPLO 105
Comodines
*
Sustituye a todos los campos
% Sustituye a cualquier cosa o nada dentro de una cadena
_ Sustituye un solo carcter dentro de una cadena
Retornar las columnas Id_cod, N
encuentra en la Base de datos P
columna de la tabla.
USE PADRON
GO
SELECT id_cod AS Cdigo ,nom_cli
CONTRATOS ;
EJEMPLO 102
EJEMPLO 106
Considerar una tabla llamada proveedor, el cual se requiere visualizar todas las
filas.
Ejecutaremos un ejemplo en forma
cdigos de cada columna anteponi
SELECT * FROM Proveedor ;
USE PADRON
GO
SELECT id_cod AS Cdigo ,nom_c
monto as Monto FROM CONTRATOS
EJEMPLO 103
Retornar todos los valores de las columnas de la tabla cliente , teniendo los
siguientes campos o columnas (cdigo, nombres, apellidos y fechaingreso)
EJEMPLO 107
SELECT codigo ,nombres, apellidos, fechaingreso FROM Clientes ;
Considerando el ejemplo anterior,
las columnas empleando formas al
EJEMPLO 104
USE PADRON
GO
SELECT id_cod = CODIGO
nom_cl i= NOMBRE DE CLIE
FROM CONTRATOS
GO
Reportar todas las columnas de la tabla PROVEEDOR, cuyas columnas son
(id_prov,nom,dir)
SELECT id_prov AS Cdigo, nom AS Nombres del cliente ,dir AS Direccin FROM
PROVEEDOR ;
NOTA
Recordemos que si queremos colocar un alias
ttulos, solo debe escribir entre comillas, aquell
EJEMPLO 108
Ejecutaremos un ejemplo en forma similar al ejemplo anterior
USE PADRON
GO
SELECT id_cod = CODIGO
nom_cl i= NOMBRE DE CLIENTE
Gastos_cli= GASTOS
FROM [Datos de los Clientes]
GO
EJEMPLO 109
Ejecutaremos un ejemplo en forma similar al ejemplo anterior
USE PADRON
GO
SELECT id_cod = CODIGO
nom_cl i= NOMBRE DE CLIENTE
Gastos_cli= GASTOS
Promedio de ingreso =Gastos*0.01
FROM [Datos de los Clientes]
GO
EJEMPLO 110
Ejecutar una consulta
USE PADRON
GO
SELECT id_cod = CODIGO
nom_cl i= NOMBRE DE CLIENTE
Gastos_cli= GASTOS
Promedio de ingreso =Gastos*0.01
Salario semanal = Gastos*0.30*aporte_cli
FROM [Datos de los Clientes]
GO
EJEMPLO 111
Considerando que en una tabla lla
(cli_cod, nom_cli, apellidos, cli_ed,
Reportar el promedio de sus notas
en una sola columna.
SELECT cli_cod AS CODIGO, No
=(nota_1+nota_2+nota_3)/2 FROM A
GO
CLAUSULA WHERE
Esta clausula se define para las cond
se pueden trabajar con operadores (=
sido detallados anteriormente.
EJEMPLO 112
En una determinada tabla, reportar
a 30.
SELECT cli_cod AS CODIGO, N
CLIENTES WHERE edad<>30
EJEMPLO 113
En una determinada tabla, reporta
30.
SELECT cli_cod AS CODIGO, N
CLIENTES WHERE edad = 30
NOTA
Si el nombre de la tabla contiene espacios, se
EJEMPLO 114
En una determinada tabla, reportar todos los registros cuya edad sean menores a
30.
SELECT cli_cod AS CODIGO, Nombres =Nom_cli+ +apellidos, edad FROM
CLIENTES WHERE edad < 30
EJEMPLO 115
En una determinada tabla, reportar todos los registros cuya edad sean mayores a
40.
SELECT cli_cod AS CODIGO, Nombres =Nom_cli+ +apellidos, edad FROM
CLIENTES WHERE edad > 40
CLAUSULA DISTINCT
Esta clausula permite eliminar las filas
La palabra clave DISTINCT elimina
instruccin SELECT, con DISTINCT,
producto que sean nicos.
Con la palabra clave DISTINCT, se
unos de otros. Cuando se incluye
devuelve un valor NULL en los resu
NULL que se encuentre.
EJEMPLO 118
EJEMPLO 116
En una determinada tabla, reportar
considerar los cdigos duplicados
En una determinada tabla, reportar todos los registros cuyos nombres se
encuentren antes o en la posicin del cliente JUANA TORRES, cuando la lista
sea ordenada por nombres.
SELECT DISTINCT cli_cod FROM CL
GO
SELECT cli_cod AS CODIGO, Nombres =Nom_cli+ +apellidos FROM CLIENTES
WHERE Nomcli cli+ +apellidos <=JUANA TORRES
EJEMPLO 119
EJEMPLO 117
En una determinada tabla, reportar todos los registros cuyos nombres se
encuentren despus de la posicin del cliente JUANA TORRES, cuando la lista
sea ordenada por nombres.
SELECT cli_cod AS CODIGO, Nombres =Nom_cli+ +apellidos FROM CLIENTES
WHERE Nomcli cli+ +apellidos > = JUANA TORRES
En una determinada tabla, reporta
DNI no sea duplicado
SELECT DISTINCT DNI FROM CLIEN
GO
NOTA
Recordemos si es que no especificamos DISTI
CLAUSULA INTO
La clusula de SQL INSERT INTO se utiliza para insertar datos en una tabla de SQL. El
SQL INSERT INTO se utiliza con frecuencia y tiene la sintaxis genrica:
INSERT INTO Tabla1 (Columna1, Columna2, Columna3 ...)
VALORES (ColumnValue1, ColumnValue2, ColumnValue3 ...)
La clusula de SQL INSERT INTO tiene en realidad dos partes - la primera
especificacin de la tabla que se inserta en y con la lista de columnas que son la
insercin de valores para, y la segunda, especificando los valores insertados en la lista
de columnas de la primera parte.
EJEMPLO 120
Crear una tabla temporal llamada #lucky e insertar todas las columnas y las filas
de la tabla cliente
SELECT * into #lucky FROM cliente
GO
SELECT * FROM #lucky
EJEMPLO 121
Crear una tabla permanente llamado listado e insertar todas las columnas y las
filas de la tabla clientes
IF EXISTS (Select table_Nombres FROM INFORMATION_SCHEMA.TABLES
WHERE table_Nombres =listado)
DROP TABLE listado
GO
SELECT * INTO listado FROM CLIENTES
-Ahora efectuamos la consulta de la tabla listado
SLECT * FROM listado
EJEMPLO 122
Retornar todas las columnas y tod
sean PASCAL o PEREDA, dentro d
SELECT cli_cod, nombres, edad FR
Apellido=PASCAL
GO
EJEMPLO 123
Retornar todas las columnas de
adems IDLOCAL sea igual a 4.
SELECT * FROM USUARIO WHERE
GO
EJEMPLO 124
Reportar todas las columnas de la
IDLOCAL sea igual a 2
SELECT * FROM USUARIO WHERE
GO
EJEMPLO 125
Retornar todas las columnas de l
tabla sea 2,4 o 8
SELECT * FROM USUARIO WHERE
GO
NOTA
EJEMPLO 126
Para comprobar la existencia de dicha tabla #lucky lo llamaremos mediante la sentencia SELECT
Empleando la funcin IN desarrolla
SELECT * FROM USUARIO WHERE
EJEMPLO 127
Retornar todas las columnas de la tabla usuario cuya edad est comprendido
entre 10 y 20
SELECT * FROM usuario WHERE edad>=10 and edad <=20
GO
EJEMPLO 128
Haciendo uso de la funcin BETWEEN reportar todas las fechas de ingreso
comprendidos entre 01-01-96 al 20-04-96
SELECT * FROM usuario WHERE fecha BETWEEN 01-01-96AND 20-04-96
GO
EJEMPLO 129
Haciendo uso de la funcin BETWEEN reportar todas las columnas similares en el
ejemplo 127
SELECT * FROM usuario WHERE edad BETWEEN 10 AND 20
GO
EJEMPLO 130
Reportar todas las fechas de ingreso de la tabla usuario que sea 08 de Abril del
ao 1996
Set dateformat dmy
Select fecha,cdigo,nombres FROM USUARIO WHERE fecha = 08/04/1996
GO
NOTA
Se emplea la Funcin IN si y solo s cuando la condicin se emplea OR y campo numrico, asimismo se
emplea la funcin BETWEEN si y solo s cuando la condicin se emplea AND y el rango de valores es
numrico, valores de cadenas o fechas.
CONVERT
Funcin de datos para tipo fecha cuyo
Ao con
4 dgitos
100 or 0
101
102
103
104
105
106
107
108
109 or 9
110
111
112
113 or 13
114
120 or 20
121 or 21
126
130
131
Sa
mon dd yyyy h
mm/
yy.m
dd/m
dd.m
dd-m
dd m
Mon
hh:m
mon dd yyyy hh:mi
mmyy/m
yym
dd mon yyyy hh:
hh:mi:ss:
yyyy-mm-dd
yyyy-mm-dd hh
yyyy-mm-ddThh:mm
dd mon yyyy hh
dd/mm/yy hh:
EJEMPLO 131
De acuerdo al ejemplo anterior, desarrollaremos considerando la columna de
fecha hora.
Select fecha,cdigo,nombres FROM USUARIO WHERE
CONVERT (char(10),fecha,103)<=08/04/1996
--- Ahora empleando:
Select fecha,cdigo,nombres FROM USUARIO WHERE
CONVERT (char(10),fecha,102)<=1996.04.08
EJEMPLO 132
Ejecutar un reporte, donde muestre un rango de precios entre 30 y 40 de la tabla
Productos, ordenado por detalle de articulo.
Select cdigo,detalle,precio FROM productos WHERE precio BETWEEN 30 AND 40
ORDER BY detalle
EJEMPLO 133
Ejecutar un reporte, donde muestre todos los apellidos paternos enter AV y CE de
la tabla Alumnos.
Select codalumno,nombres,apepat AS apellido paterno FROM Alumnos WHERE
apepat BETWEEN V AND CEORDER BY apepat
Como hemos visto el desarrollo d
funcin BETWEEN hemos realizad
vamos a desarrollar lo mismo em
rangos 01-01-96al 20.04-96
SET DATEFORMAT dmy
GO
SELECT Idlocal,fecha FROM USUAR
20/04/1996 ORDER BY fecha
- - Otra forma de dar solicin rapida s
SET DATEFORMAT dmy
Go
SELECT idlocal, fecha FROM usuario
WHERE fecha BETWEEN 01/01/199
ORDER BY fecha
- - O tambien empleando la funcin C
SELECT idlocal, fecha FROM usuario
WHERE CONVERT(char(10), fecha
fecha,103)<=20/14/1996ORDER BY
Go
LIKE
Esta funcin permite realizar busque
rango de caracteres:
NOTA
Si en el resultado no muestra ningn listado con la fecha indicada, debemos de saber que el problema es
debido a que el tipo de campo de la columna debe ser fecha; pero si es fecha-hora; en este caso la fecha
almacena la fecha y la hora.
Por lo que pasa a ser mas exacto en estos casos lo podemos llamar de la siguiente manera:
SELECT fecha, codigo, nombres FROM USUARIO WHERE fecha<=08/04/1996
EJEMPLO 134
%
[AB]
c
~
[^]
Indica la posicin del comodin
Indica los valores comprendid
Establece un rango de valore
Indica la ubicacin de un com
Indica cualquier caracter
Indica cualquier valor que no
EJEMPLO 135
VALORES A BUSCAR CON LIKE
Listar todos los nombres de los artculos cuya descripcin sea iniciando con la
letra A
_A%
%A
A%
%[1-9]
%A%
AB[ _ ]%
[AB]
[^A]
Listar todas las filas de los artculos que se encuentran en la tabla Bienes, cuya
unidad de medida termine en ZA
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
SELECT descripcion_bien Descripcion del Bien, undmed from Bienes WHERE undmed
LIKE %ZA
EJEMPLO 139
EJEMPLO 137
Retornar todas las columnas de la
comiencen con P o B y a continuac
SELECT * from Articulos WHERE descripcion_bien LIKE A%
EJEMPLO 136
Retornar todas las columnas de la tabla bienes, cuya descripcin de los bienes
tengan los caracteres MANTECA
SELECT descripcion_bien Descripcion del Bien, undmed from Bienes WHERE
descripcion_bien LIKE %MANTECA%
GO
El segundo c
El ultimo cara
El Primer car
Que termine
El intermedio
Que comienc
Que comienc
Que comienc
SELECT descripcion_bien Descripc
descripcion_bien LIKE [PB]ala
GO
EJEMPLO 140
Retornar todos los valores de las c
EJEMPLO 138
Retornar todas las columnas de la tabla bienes, cuya descripcin de los bienes
comiencen con P o B y a continuacin la palabra ala
SELECT descripcion_bien Descripcion del Bien, undmed from Bienes WHERE
descripcion_bien LIKE [PB]ala
GO
SELECT *
descripcion
Go
FROM producto WHE
EJEMPLO 141
De acuerdo al ejemplo anterior,
empiece con azcar al iniciar
SELECT * FROM producto WHER
descripcion
EJEMPLO 142
EJEMPLO 147
Ahora usted, liste todas las columnas de la tabla anterior cuya descripcin tenga
parte la palabra azcar
Continuando con el ejemplo anterio
que muestre desde la letra F hasta
del articulo
EJEMPLO 143
Ahora listar todas las columnas de la tabla producto, cuya descripcin contenga
la cadena negr antes del ultimo carcter
SELECT * FROM producto WHERE descripcion_bien LIKE %negr_ ORDER BY
descripcion
Go
EJEMPLO 144
SELECT* FROM `producto WHERE d
Go
ORDER BY
La clusula ORDER BY ordena los re
hasta 8.060 bytes.
EJEMPLO 145
A partir de SQL Server 2005, SQL S
de las tablas de la clusula FROM qu
nombres de columna a los que se h
corresponderse con una columna de
la clusula FROM sin ambigedades.
alias en la lista SELECT, slo puede
BY. De igual modo, si los nombres d
FROM, slo pueden utilizarse los no
clusula ORDER BY.
Listar todas las columnas de la tabla producto cuya descripcin del articulo
comience entre los rangos de A hasta D
Una ordenacin puede ser ascendent
especifica ninguna, se supone que es
Listar todas las columnas de la tabla producto cuya descripcin del articulo
empiecen con A, B o C
SELECT* FROM `producto WHERE descripcion_bien LIKE [ABC]%
Go
SELECT* FROM `producto WHERE descripcion_bien LIKE [A-D]%
Go
EJEMPLO 146
Listar todas las columnas cuyo primer carcter de la descripcin del bien sea
diferente a A,B o C
SELECT* FROM `producto WHERE descripcion_bien LIKE [^ABC]%
Go
La siguiente consulta devuelve los res
por Codigo_cli.
USE Cliente;
GO
SELECT Codigo_cli, Nombre_ciente,
FROM Trabajo.Product
ORDER BY Codigo_cli;
USE Cliente;
En las columnas que tengan tipos de datos text, ntext, image o xml no se puede usar
ORDER BY. Adems, en la lista ORDER BY no se permiten subconsultas, agregados ni
expresiones constantes. Sin embargo, en la lista de seleccin es posible utilizar un
nombre especificado por el usuario para los agregados o expresiones.
SELECT umedida, detabien AS De
GROUP BY codigobien ORDER BY 1
Ejemplo
HAVING
SELECT Color, AVG (precio) AS 'promedio de precios'
FROM Articulos
GROUP BY codigo
ORDER BY 'promedio de precios';
Especifica una condicin de bsqued
recordemos que cuando no se emp
WHERE.
EJEMPLO 150
ORDER BY solamente garantiza un resultado ordenado para la instruccin
SELECT ms externa de una consulta. Por ejemplo, considere la definicin de
vista siguiente:
EJEMPLO 148
Listar todas las cantidades por cada producto o artculo en la tabla producto y
ordenado por descripcin
SELECT umedida, detabien AS Detalle del bien, count)cantidad)
GROUP BY codigobien ORDER BY detabien DESC
SELECT codigobien, detabien AS D
GROUP BY codigobien HAVING sum
Go
FROM producto
VALORES NULL
/* tambin podra ser as */
SELECT umedida, detabien AS Detalle del bien, count)cantidad)
GROUP BY codigobien ORDER BY 2 DESC
Listar las columnas de la tabla
contengan los cdigos, descripc
condicin que la suma de cantidad
Cuando encontramos estos valores d
NULO es desconocido, el valor NULL
FROM producto
Tal como se detallo en el capitulo II d
con valores NULOS.
EJEMPLO 149
Explique usted, el contenido textual de la consulta:
EJEMPLO 151
Vamos a crear la tabla Alumnos, de
USE MASTER
Go
CREATE TABLE Alumnos (
Codigo
Int
PRIMARY KEY ,
Nombres
Varchar(40)
NOT NULL,
Costo
Decimal (10,2) NULL,
Edad
Int
NULL)
Go
/* Ahora insertamos valores */
INSERT INTO ALUMNOS
VALUES(100,Cesar Pereda,NULL,40)
INSERT INTO ALUMNOS
VALUES(100,Mariluisa Pascal,20000.00,20)
INSERT INTO ALUMNOS
VALUES(100,Harumi Pereda,180020.00,15)
Recordemos que si tenemos valo
deseamos hacer operaciones pues
SELECT codigo,nombres,edad FROM
Go
SELECT codigo,nombres,edad,imp
FROM Alumnos
Go
/* El caso hubiese sido si no colo
mostrara todos los registros incluyen
PRACTICAS DE DESARROLLO
EJEMPLO 154
EJEMPLO 152
Reportar todas las columnas de la tabla Alumnos, cuyo valor de la edad no sea
nulo
SELECT codigo,nombres,edad FROM Alumnos WHERE edad IS NOT NULL
Go
/* El caso hubiese sido si no colocamos la opcin WHERE edad IS NOT NULL,
mostrara todos los registros incluyendo NULOS y NO NULOS.*/
Crear la tabla CONTROL, donde se
empresa, tales columnas son:
Codigo
Varchar(20)
Nombres
Varchar(40)
Apellidos
Varchar(40)
Direccion
Varchar(120)
Email
Varchar(10)
/* Luego con SP_TABLE visualizar
SP_TABLES @table_owner =dbo
VALORES ISNULL
SP_COLUMNS
EJEMPLO 153
EJEMPLO 155
Crear la tabla Alumnos con las siguientes columnas:
Codigo
Nombres
Edad
Aula
C(10)
C(40)
Int
Int
/*Si existe la tabla eliminemos la existente */
IF OBJECT_ID(Alumnos) IS NOT NULL
DROP TABLE Alumnos;
/* Ahora visualicemos la estructura de la tabla */
SP_Columns Alumnos
SELECT codigo,nombres,edad,impuesto =0.02*edad+ ISNULL(costo*0.01*edad)/10)
FROM Alumnos
Go
EJEMPLO 156
Crear en la tabla Alumnos una clave primaria al cdigo del ejemplo anterior.
CREATE TABLE Farmacia (
CODIGO
Integer Identi
Ubicacin
Varchar(30) N
Almacen
Varchar(40) N
Precio
float,
Cantidad
Integrer
);
EJEMPLO 159
Vamos a crear la tabla Fa
automticamente comenzando en
IDENTITY.
CREATE TABLE Farmacia (
CODIGO
Integer Identi
Ubicacin
Varchar(30) N
Almacen
Varchar(40) N
Precio
float,
Cantidad
Integrer
);
EJEMPLO 157
Visualizar la estructura de la tabla Alumnos.
NOTA
SP_COLUMNS Alumnos
Recordemos que si deseamos insertar reg
IDENTITY, debemos emplear SET IDENT _IN
EJEMPLO 158
Vamos a crear la tabla Farmacia que genere valores secuenciales
automticamente comenzando en 1 y se incremente de uno en uno, empleando
IDENTITY.
EJEMPLO 160
TRUNCATE
Vamos a aadir registros manualmente en la tabla anterior creada, para esto
emplearemos SET IDENTITY.
SET IDENTITY_INSERT Farmacia ON,
EJEMPLO 163
INSERT INTO Farmacia (codigo,ubicacion, almacen,precio,cantidad)
VALUES(30,Central,Lima 100,0.20,60)
Ahora diga usted, como eliminarem
TRUNCATE table farmacia
IDENT_SEED
SET DATEFORMAT
EJEMPLO 161
EJEMPLO 164
Emplee la funcin IDENT_SEED para verificar el valor del inicio del campo
IDENTITY de la tabla, en este caso como ejemplo de la tabla farmacia.
Consideramos que en la tabla fa
Fecharegistro (datetime), el cual
campo fecha emplearemos el forma
SET DATEFORMAT dmy
SET IDENTITY_INSERT Farmacia ON
SELECT IDENT_SEED (Farmacia);
IDENT_INCR
INSERT INTO Farmacia (codigo,ubica
VALUES(30,Central
EJEMPLO 162
/*Ahora insertamos segn formato me
Ahora verificaremos cual es el valor del incremento del campo IDENTITY de la
tabla farmacia.
SELECT IDENT_INCR (Farmacia);
SET DATEFORMAT mdy
SET IDENTITY_INSERT Farmacia ON
INSERT INTO Farmacia (codigo,ubica
VALUES(30,Central
EJEMPLO 165
EJEMPLO 168
Crear la tabla llamada medicamentos, si es que existe lo eliminaremos,
considerando que el campo cdigo sea primario
Liste usted todas las columnas c
forma concatenada en la tabla med
IF OBJECT_ID ( medicamentos) IS NOT NULL
DROP TABLE medicamentos;
CREATE table medicamentos(
Codigo
int
Identity,
Nombre
varchar(30),
Quimico
varchar(40) default Laboratorio,
Precio
smallmoney,
Cantidad
tinyint default 1,
PRIMARY KEY (codigo)
);
Go
/* Insertar registros */
INSERT INTO medicamentos (nombre,quimico,precio,cantidad)
VALUES(Ampicilina 500 mg, antiaminico, 20, 80);
INSERT INTO medicamentos (nombre,quimico,precio,cantidad)
VALUES(Ampicilina 500 mg, DEFAULT, 20, DEFAULT);
EJEMPLO 166
Ahora muestre usted todas las columnas del medicamento con la descripcin
qumica, empleando la concatenacin de datos
EJEMPLO 169
Liste usted todas las columnas c
(da-mes-ao) en la tabla farmacia
EJEMPLO 170
En el ejemplo de la tabla (164), d
muestren el nombre del mes.
SELECT codigo,ubicacin, dateNomb
Go
EJEMPLO 171
En el ejemplo de la tabla (164), d
muestren el nombre del da, y la ho
SELECT codigo,ubicacin, dateNomb
Go
SELECT Nombre+, +quimico FROM medicamentos
EJEMPLO 172
EJEMPLO 167
En el ejemplo de la tabla (164), d
muestren la hora de la fecha de reg
Ordene usted todos los registros de la tabla en orden descendente
SELECT codigo,ubicacin, dateNomb
Go
SELECT * FROM medicamentos ORDER BY nombre DESC
EJEMPLO 173
En el ejemplo de la tabla (164), diga usted como listar todos los registros que
ingresaron en el mes de octubre
SELECT * FROM Farmacia WHERE
dateNombres(month,fecharegistro)=octoberORDER BY codigo;
Go
EJEMPLO 174
En el ejemplo de la tabla (164), diga usted como eliminar todos los registros cuyo
cdigo sea 1000
EJEMPLO 175
En el ejemplo de la tabla (164), diga usted como eliminar todos los registros cuyo
cdigo sea 1000 y 1200
EJEMPLO 176
Tomaremos como ejemplo de la tabla (164), ahora listaremos todos los registros
cuya fecha est en el rango del 12 de septiembre del 2010 hasta el 25 de diciembre
del 2010.
SELECT * FROM farmacia WHERE fecharegistro BETWEEN 2010-09-12and 201012-25;
EJEMPLO 178
Consideremos que en una tabla M
Estadocivil, el cual deseamos sab
Viudo y Soltero
SELECT * FROM MOVIMIENTOS WH
EJEMPLO 179
Seleccionar todos los registros
empleando el operador BETWEEN
SELECT * FROM MOVIMIENTOS WH
SELECT * FROM MOVIMIENTOS WH
EJEMPLO 180
Supongamos que tenemos como e
piden efectuar las siguientes colum
Mostrar todos los nombr
MARILUISA HARUMI
Mostrar todos los Registros
entre la cadena un 6
Listar todos los registros cu
SELECT * FROM Registros W
SELECT * FROM Registros W
SELECT * FROM Registros W
EJEMPLO 177
EJEMPLO 181
Consideremos que en una tabla MOVIMIENTOS, tenemos una columna llamada
cantidad, el cual deseamos saber el numero de registros que contengan la
cantidad 4 y 6.
Ahora seleccione usted todas l
comiencen en CE y cuya column
SELECT * FROM MOVIMIENTOS WHERE cantidad BETWEEN 4 and 6
SELECT * FROM Registros WHERE
EJEMPLO 182
EJEMPLO 186
Ahora muestre todas las columnas de la tabla empleado cuya direccion comience
en c e y tengan 16 caracteres
Consideremos como ejemplo y aa
SELECT * FROM Registros WHERE direccion LIKE [ce]%_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
SELECT nombre, Actualmente = DAT
EJEMPLO 187
16 caracteres
Ahora Considerando que trabaja
devolver el nmero y el nombre del
EJEMPLO 183
Listar todas las columnas de la tabla empleado cuya columna Gastos incluya
centavos y reportar todos aquellos cuyo ao de la fecha sea 2010
SELECT * FROM empleado WHERE Gastos NOT LIKE %.00 and fecha LIKE %2010
EJEMPLO 184
Listar todas los registros de la tabla empleado usando la funcin count_big(),
luego contar la cantidad de direcciones diferentes o distintas, asimismo luego
contar la cantidad de la tabla empleado que tiene el Gastos distinto a NULL
SELECT COUNT_BIG (*)
SELECT COUNT_BIG(DISTINCT direccion) FROM empleado
SELECT COUNT_BIG (Gastos) AS MENSUAL FROM empleado
EJEMPLO 185
Listar todas las columnas de la tabla empleado con una condicin que muestre a
la fecha el numero de das hasta hoy, con relacin a la fecha de ingreso
SELECT DATEPART(month,GETDAT
SELECT DATENOMBRES (Month,GE
_ _ ahora calcular el da, mes y ao
SELECT DAY(GETDATE( ))
SELECT MONTH(GETDATE(
SELECT YEAR(GETDATE( ))
TABLA DE VALORES DE FECHAS
Funcin
SYSDATE
ADD_MONTHS (fecha, n)
LAS_DAY (fecha)
Devuelv
MONTHS_BETWEEN
(fecha1, fecha2)
Devuelv
NEXT_DAY (fecha, cad)
Devuelve
despus de
la s
SELECT nombres,numerodias = DATOS: == (day,fecha,getdate()) FROM empleado
NOTA
Recordemos que si deseamos calcular la longitud de una cadena tambin podemos emplear la funcin LEN
EJEMPLO 188
Supongamos que tenemos una ta
columna llamada fechaingreso
SELECT
fechaingreso,
add_mo
MOVIMIENTOS;
EJEMPLO 189
Deseamos obtener el ltimo dia del mes para cada una de las fechas de la tabla
MOVIMIENTOS, de cada cliente
Select fechaingreso, last_day(fechaingreso) from MOVIMIENTOS;
EJEMPLO 190
Ahora diga usted, del ejemplo en mencin como obtener el da que sera el
proximo domingo
Select next_day(sysdate, 'Sunday') "siguiente domingo" from MOVIMIENTOS
EJEMPLOS ADICIONALES
Listar el total de articulos vendidos en la tabla MOVIMIENTOS
SELECT COUNT(*) FROM MOVIMIENTOS
Listar cuantos articulos se han vendido sin mostrar los articulos duplicados
SELECT DISTINCT idcodigo FROM MOVIMIENTOS ORDER BY idcodigo
Ahora mostrar el total
SELECT COUNT(DISTINCT idcodigo) FROM MOVIMIENTOS
Ahora listaremos todas las columnas de la tabla clientes
SELECT CODIGO = cod_cli,
descripcin del Articulo = desc_bien,
Precio de venta = pventa,
Stock = stock_bien
FROM CLIENTES;
Tambin puede ser:
SELECT cod_cli CODIGO, desc_bien DESCRIPCION, pventa PRECIO VENTA,
stock_bien STOCK FROM Master.dbo.CLIENTES;
MEMORIA AYUDA
AGRUPAMIENTO DE DATOS, CONS
Una sub consulta es una sentencia SELECT que es incrustada en una clusula
de otra sentencia SQL, llamada sentencia padre, asimismo podemos decir que
una sub consulta (consulta interna) obtiene un valor que es usado por la
sentencia padre. Usar una sub consulta anidada es equivalente a ejecutar dos
Consultas secuenciales y utilizar el resultado de la consulta interna como valor
de bsqueda en la consulta externa (consulta principal).
GROUP BY
Su mismo nombre lo especifica, nos
clasula lo emplearemos con los oper
Las sub consultas pueden ser usadas para los siguientes propsitos:
Proveer valores para condiciones en clusulas WHERE, HAVING y
START WITH de sentencias SELECT
<nombre_campo> [{,<nombre_ca
FROM <nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condic
[GROUP BY <nombre_campo> [{,<nombr
[HAVING <condicion>[{ AND|OR <condic
[ORDER BY <nombre_campo>|<indice_c
[{,<nombre_campo>|<indice_ca
Se pueden construir sentencias poderosas utilizando sub consultas. Las sub
consultas pueden ser muy tiles cuando necesites seleccionar filas de una tabla
con una condicin que dependa de los datos de la misma u otra tabla.
Las sub consultas son muy tiles para escribir sentencias SQL que necesiten
valores de un o ms valores condicionales desconocidos.
Donde:
operator incluye un operador de comparacin como >, = o IN
Nota: los operadores de comparacin se encuentran en dos clases:
Operadores de fila nica (>, =, >=, <, <>, <=) y operadores de mltiples filas (IN,
ANY, ALL)
SELECT [ALL | DISTINCT ]
GROUP BY
HAVING
ORDER BY
Especifica la agrupacin
con funciones agregadas
Especifica una condicin
condicin que debe cum
Su funcionamiento es sim
resultados devueltos por
y la condicion debe estar
Presenta el resultado ord
expresarse con ASC (ord
predeterminado es ASC.
EJEMPLOS:
Listar todos los registros de nombres d
cada cliente.
SELECT codigo,nombres,count(codigo) A
Listar todos los registros de la tabla MOVIMIENTOS agrupados por codigo y ordenados por
el total de MOVIMIENTOS
SELECT codigo,nombres, pventa, cantidad, (pventa*cantidad) As Total FROM MOVIMIENTOS
GROUP BY codigo ORDER BY Total
Go
GROUP BY con el operador ROLLUP
Permite resumir los valores de grupo. El operador ROLLUP se usa normalmente para
producir promedio y sumas acumuladas.
SELECT idcodigo, deta_bien AS
Almacen ORDER BY idcodigo COMP
idcodigo
Empleando ALIAS como refrencias
de las tabla MOVIMIENTOS
SELECT DISTINCT MN.codbien,PQ.d
PQ ON MN.codbien=PQ.cod
COMPUTE..BY
Empleando ALIAS como refrencia
productos agrupados por codigo c
SELECT MN.codbien,PQ.detabien FR
ON MN.codbien = PQ.codb
MN.numfactura = 40
Agrupa las filas en base a una o mas columnas lo mas importante es que permite
mostrar informacin mas detallada por cada grupo.
Sintaxis:
Considerando que tenemos una ta
primer y el ltimo nombre del regsi
SELECT MIN(nombre_cli),MAX(nomb
SELECT columna1, columna2,. FROM table WHERE <condicion> ORDER BY
columnax, columnay .. COMPUTE funcin <Columna Z> BY <columnax>,<columnay>
Ahora diga usted, como contar la c
SELECT COUNT(*) FROM cliente GR
SELECT codbien,deta_bien AS Detalle, AVG(Pventa) FROM Articulos GROUP BY
codbien, deta_bien WITH ROLLUP
Ejemplos:
Listar todas las columnas de la tabla MOVIMIENTOS luego calcular el promedio
del precio de venta y lo muestra por cada grupo en este caso por grupos de
codigo y nombre y en cada uno su promedio de precio venta.
SELECT codigo,nombre_bien AS Producto, pventa FROM MOVIMIENTOS ORDER BY
codigo,nombre COMPUTE AVG(pventa) BY codigo,nombre
En este caso vamos a listar todas las columnas de la tabla Almacen ordenados
por codigo, donde me va crear grupos por codigo calculando los precios
promedios, maximo y minimo por cada grupo.
SELECT ciudad, COUNT(*) AS CAN
NULL AND telefono <>no tieneGRO
CONSULTAS Y AGRUPAMIENTOS DE DATOS
Una de las funciones mas comunes dentro de las bases de datos es la agrupacin de
datos, obteniendo reportes consolidados el cual es necesario trabajar con la instruccin
SELECT y la clusula GROUP BY
FUNCIONES
AVG
COUNT
MAX
MIN
SUM
Retorna el promedio de los valores
Retorna la cuenta de las columnas en la consulta
Retorna el valor maximo
Retorna el minimo valor
Retorna la suma de los valores
EJEMPLO 191
Supongamos que en la tabla personal, deseamos calcular el total de los Gastoss
agrupados por sexo
SELECT sexo,SUM(Gastos) FROM personal GROUP BY sexo
EJEMPLO 192
Se necesita saber el maximo y minimo valor de los Gastos agrupados por sexo y
ciudad
SELECT sexo, ciudad, MAX(Gastos) AS MAXIMO , MIN(Gastos) AS MINIMO FROM
personal GROUP BY sexo, ciudad
EJEMPLO 193
Ahora calcular el promedio del valor de los Gastoss agrupados por ciudad
SELECT ciudad, AVG(Gastos) AS promedio FROM personal GROUP BY ciudad
EJEMPLO 194
Contar y agrupar por ciudad todos los registros sin considerar los que no tienen
telefono
EJEMPLO 195
Obtener el total de los registros agr
SELECT ciudad, sexo, COUNT(*) AS
ciudad, sexo
EJEMPLO 196
Obtener el total de los registros agr
que tienen menos de dos registros
SELECT ciudad, sexo,COUNT(*) AS
ciudad, sexo HAVING count(*
EJEMPLO 197
Obtener el total de los registros d
NARANJOS) agrupados por ciudad
ciudades que tengan menos de d
correspondiente a la Ciudad de LIM
SELECT ciudad, domicilio, count(*) FR
%LOS NARANJOSGROUP
ciudad <>LIMA
EJEMPLO 198
Calcular la cantidad de registros po
sola columna
SELECT ciudad, COUNT(*) AS CAN
Ciudad WITH ROLLUP
EJEMPLO 199
Reportar la cantidad de registro
resultados parciales
SELECT ciudad, COUNT(*) AS CAN
WITH ROLLUP
NOTA
Cuando usamos la clausula GROUP BY co
recordemos que ROLLUP se utiliza para prod
de izquierda a derecha.
EJEMPLO 200
En una Historia Clnica se desea crear un control de pacientes atendidos
considerando que si son por primera vez o ya han sido atendidos (P=primera vez
y R= Atencin regular o continua )
CREATE TABLE clinica(
Numero
int
IDENTITY,
Pago
decimal
(10,2),
Tipopaciente char(1), - - p=primera vez, R=regular
Nombre
Varchar(40)
NOT NULL,
Fecharegistro datetime,
Ciudad
Varchar(20),
Sexo
Varchar(1), - - M=Masculino, f=Femenino
Provincia
Varchar(20),
PRIMARY KEY (numero)
)
- - Despus de crear la tabla pues agruparemos por tipo de paciente y nombre,
asimismo la cantidad.
SELECT nombre,tipopaciente,count(*) AS cantidad FROM clinica GROUP BY
nombre,tipopaciente WITH ROLLUP
EJEMPLO 201
Agrupar por tipo de paciente y nombre, asimismo cuente la cantidad de
atenciones empleando CUBE
SELECT nombre,tipopaciente, count(*) AS cantidad FROM clinica GROUP BY nombre,
tipopaciente WIITH CUBE
EJEMPLO 202
Contar la cantidad de atenciones agrupados por sexo y tipos de paciente.
SELECT sexo, tipopaciente, count(*) AS Cantidad FROM clinica GROUP BY
sexo,tipopaciente WITH ROLLUP
EJEMPLO 203
Realizar la misma consulta del eje
GROUPING para los datos.
SELECT sexo, tipopaciente, count(*)
AS Resumen por tipo de sex
tipo de pacienteFROM clinica
EJEMPLO 204
Ahora hagamos la misma consulta
SELECT sexo, tipopaciente, count(*)
AS Resumen por tipo de sex
tipo de pacienteFROM clinica
EJEMPLO 205
Diga usted como reportar los nomb
SELECT DISTINCT nombre FROM cl
EJEMPLO 206
Ahora cuente todos los pacientes a
atencin regular
SELECT COUNT(DISTINCT nombre)
EJEMPLO 207
Listar todos los nombres de los so
SELECT DISTINCT nombre FROM cl
EJEMPLO 208
Listar todas las cantidades de los n
SELECT COUNT(DISTINCT nombre)
EJEMPLO 209
Combinar con WHERE para obte
atendidos con el tipo de atencin
SELECT DISTINCT nombre FROM cl
EJEMPLO 210
Diga usted como contar los dife
GROUP BY
SELECT DISTINCT nombre FROM cl
EJEMPLO 211
Listar de la tabla clinica los 10 primeros registros
SELECT TOP 10 FROM clinica
ADD CONSTRAINT DF_Estudio_tota
DEFAULT 0
FOR TOTAL
EJEMPLO 212
Mostrar los 06 primeros registros ordenados por nombres
SELECT TOP 6 nombre,sexo FROM clinica ORDER BY nombre
EJEMPLO 218
Diga usted como visualizar las rest
SP_HELPCONSTRAINT Estudio
EJEMPLO 213
Desarrollando la misma operacin incluya todos los registros que tengan el
mismo tipo de paciente
SELECT TOP 6 WITH TIES nombre,sexo FROM clinica ORDER BY tipopaciente
EJEMPLO 219
Supongamos que tenemos una tab
restriccin CHECK en la columna G
valores negativos
ALTER TABLE Resultados
ADD CONSTRAINT CHECK_Resulta
EJEMPLO 214
Muestre los nombres, sexo y tipo de paciente de los 06 primeros pacientes
ordenados por sexo y por nombres
SELECT TOP 6 nombre,sexo FROM clinica ORDER BY sexo,nombre
EJEMPLO 215
Realice la misma operacin anterior pero ahora incluya todos los valores iguales
al ultimo registro
SELECT TOP 6 WITH TIES nombre, sexo, tipopaciente FROM clinica ORDER BY sexo,
nombre
EJEMPLO 216
Vamos a definir que tenemos una tabla llamada Registro y cuya columna CIUDAD
presenta por defecto un valor el cual es UCAYALI por defecto en caso de no
ingresar valores para dicho campo.
ALTER TABLE Registro
ADD CONSTRAINT DF_Regsistro_ciudad
DEFAULT cayaliFOR ciudad
EJEMPLO 217
Ahora vamos a suponer que tenemos una determinada tabla llamada ESTUDIO el
cual vamos a definir una restriccin DEFAULT para la columna (TOTAL) que
almacena el valor cero (0) en caso de no ingresar un valor
ALTER TABLE Estudio
EJEMPLO 220
Ahora agregue otra restriccin CH
Gastos maximo sea 2000
ALTER TABLE Resultados
ADD CONSTRAINT CHECK_Resulta
EJEMPLO 221
Ahora diga usted, como eliminaria
restriccin
ALTER TABLE Resultados
DELETE FROM Resultados WHERE
ALTER TABLE Resultados
ADD CONSTRAINT CHECK_Resulta
EJEMPLO 222
Ahora efectuemos listar el promed
Resultados.
SELECT AVG(Cantidad) FROM Resu
Go
NOTA
Distinct indica que debe de conraerse los valor
EJEMPLO 223
Reportar el total de la cantidad de los registros de la tabla ejemplo Resultados
SELECT COUNT(DISTINCT numero) FROM Resultados
Go
EJEMPLO 224
Diga usted como deshabilitar una restriccin NO CHECK creada, supongamos
que la tabla se llama Resultados.
ALTER TABLE Resultados
NOCHECK CONSTRAINT CHK_Resultado_Gastos
EJEMPLO 225
Supongamos que deseamos mostrar el codigo, el nombre y el apellido de una
determinada tabla
Select CodigocliID as Codigo , FirstNombres + + LastNombres as Nombre y Apellido
from Codigoclis
Ahora mostrar el precio de venta mas el 10%
Select Detalle_bien Nombre del Producto , Pventa as Precio Unitario ,
Pventa*0.1+Pventa Aumento en 10% from Articulos
Ahora mostrar en forma ascendente, en un ejemplo de de consulta
Select Empresa as Nombre de la Compaia, Pais _empresa as Pais from
ClientesOrder By pais_empresa ASC
Ahora mostrar en forma descendente, en un ejemplo de de consulta Se desea
Visualizar
Select Empresa as Nombre de la Compaia, Pais _empresa as Pais from
ClientesOrder By pais_empresa DESC
NOTA
Recordemos que el operador CUBE devuelve las mismas filas que ROLLUP pero a diferencia es que agrupa
de acuerdo a la segunda columna de GROUP BY sin considerar los valores de la primera columna.
SELECT codigo,nombre, sum(total), AVG(precio) FROM Venta GROUP BY codigo,nombre WITH CUBE
/*En este caso lo agrupa por codigo y nombre pero lo clasifica CUBE solo por nombre*/
EJEMPLO 226
Mostrar todo los productos q
que esten descontinuados = 1 vige
select * from products where (c
and discontinued=1
select * from products where Category
Ahora mostrar todo los pedidos qu
del ao 2010 y la forma de envio se
select*from
orders
where
(ye
and Clienteid=bergs and envio=2
select*from orders where orderdate B
and envio=2
REPASO
EJEMPLO
Vamos a considerar que vamos a
agregaremos restricciones CHECK
IF OBJECT_ID(Empleados)
DROP Tale Empleado
-- Ahora vamos a crear la table con un
CREATE TABLE Empleados(
Tipodocm
Varchar(40),
Nombres
Varchar(40),
Ubicacion
Varchar(20),
Pagomes
Decimal(10,2
);
-- Insertar Valores
INSERT INTO Empleados
VALUES(Boleta,Cesitar,Lima,500,00.00);
--Ahora agregamos las restricciones CHECK para asegurarse que no se deen ingresar
valores negatives
USE Empleados
ALTER TABLE Empleados
Add Constraint CHK_Empleados_seldo CHECK (Sueldo>=0);
-- Ahora intentemos ingresar una opcin WITH NOCHECK
Add Constraint CHK_Empleados_sueldomas CHECK (Sueldo>=0);
Alter table Empleados WITH NOCHECK
EJEMPLO
Deshabilite la restriccin del ejemplo anterior
ALTER TABLE Empleados
NOCHECK Constraint CHK_Empleados_sueldomas;
EJEMPLO
Estalezca una restriccin CHECK en la columna Uicacion ya que solo se pueden
insertar estos alores por defecto(I CiclomII Ciclom III Ciclo)
Nuevas caracteristicas de group
Una caracterstica piola que tiene la n
GROUPING SETS, que ya exista e
estndar ANSI 2006) y permite comb
consulta. El operador GROUPING S
GROUP BY.
Cuando no se requieren todas las ag
operador ROLLUP o CUBE (que ya
GROUPING SETS para especificar
gracias a GROUPING SETS obtenem
nos devuelve el subtotal para cada su
Podramos decir que GROUPING SE
CUBE. Generalmente consultas que
con el anlisis de datos, reporti
Este nuevo operador no permite ha
simplifica y optimiza determinadas c
Veamos un ejemplo de donde utilizarl
Supongamos que tenemos la siguient
CREATE TABLE [dbo].[Client]
ALTER TABLE Empleados
Add Constraint CHKEmpleadoubicate CHECK (Ubicacion IN(I CICLO,II
CICLO,III CICLO);
EJEMPLO
[Pais] [varchar](50) NULL,
Ahora visualicemos las restricciones de la tabla Empleadossi es que estn o no
habilitados
[ID] [int] IDENTITY(1,1) NOT NULL,
[Nombres] [varchar](50) NULL,
[pais] [varchar](50) NULL,
[ao] [int] NULL,
[Precio] [numeric](12, 4) NULL,
SP_HELPCONSTRAINT Empleados;
Y ahora supongamos que queremos traer la suma del campo Precio, agrupada por los
Campos Pais y Lugar, luego solo por Lugar y luego por el total y todo en una sola misma
sentencia de tal manera que el resultado de la consulta fuese el siguiente:
Total
Lugar
pais
3,400.00
Milian
colombia
3,466.00
Las Brisas
Espaa
678.00
Coronel Portillo
Peru
7,899.00
Huanuco
Peru
1,244.00
Paucarbamba
Peru
La primera opcin que uno piensa, es hacer una consulta usando UNION ALL con tres
consultas diferentes, una por cada agrupacin:
SELECT SUM(Value) AS Total, Lugar, Pais FROM dbo.Client
GROUP BY Lugar,Pais
UNION ALL
SELECT SUM(Value), NULL, Pais FROM dbo.Client
GROUP BY Pais
UNION ALL
SELECT SUM(Value), NULL, NULL FROM dbo.Client
ORDER BY Lugar, Pais
Sin embargo, podemos escribir una consulta equivalente y ac entra GROUPING SETS
de SQL Server 2008 para simplificarnos la vida:
SELECT SUM(value) AS Total, Lugar
GROUP BY
GROUPING SETS
(
(Lugar, Pais),
(Pais),
()
)
ORDER BY GROUPING(Lugar), GRO
Ahora como podrn ver en este
GROUPING SETS, hago uso de la fu
el resultado por Zona y Pais.
Esta funcin (que ya exista en SQ
columna especificada en una lista GR
1 para agregado y 0 para no agregad
INSERT INTO #Alumnos VALUES (2,
GROUPING SETS in SQL Server 2008
INSERT INTO #Alumnos VALUES (2,
INSERT INTO #Alumnos VALUES (2,
Con el nuevo
grupo operador
mscontrol sobre
lo
que se
fija incluidos en SQL Server
agrega. Aqu
2008,
usted tiene
est un ejemplo prctico del
uso
de GROUPING SETS de SQL Server 2008With the new GROUPING SETS operator
included in SQL Server 2008, you have more control over what is aggregated. Heres a
INSERT INTO #Alumnos VALUES (2,
INSERT INTO #Alumnos VALUES (2,
INSERT INTO #Alumnos VALUES (2,
practical example of using GROUPING SETS in SQL Server 2008
Vamos a efectuar algunas operacione
--DROP TABLE #Alumnos
Calcular el total de puntuaciones o
CREATE TABLE #Alumnos
SELECT Codalumno, Cursoao, SUM
FROM #Alumnos
Codalumno int ,
GROUP BY Codalumno, Cursoao
Cursoao smallint,
ORDER BY Codalumno
Semestre smallint,
1
2
3
4
Promedio float
)
INSERT INTO #Alumnos VALUES (1, 2008, 1, 5.6)
codalum
1
1
2
2
INSERT INTO #Alumnos VALUES (1, 2008, 2, 6.5)
INSERT INTO #Alumnos VALUES (1, 2008, 3, 8.9)
Calcular el total de puntuaciones o
INSERT INTO #Alumnos VALUES (1, 2008, 4, 9.1)
cada semestre y para cada ao
INSERT INTO #Alumnos VALUES (1, 2009, 1, 4.4)
SELECT Codalumno,semestre, SUM(
INSERT INTO #Alumnos VALUES (1, 2009, 2, 7.9)
FROM #Alumnos
INSERT INTO #Alumnos VALUES (1, 2009, 3, 8.5)
GROUP BY Codalumno,semestre
INSERT INTO #Alumnos VALUES (1, 2009, 4, 8.7)
ORDER BY Codalumno
INSERT INTO #Alumnos VALUES (2, 2008, 1, 5.4)
INSERT INTO #Alumnos VALUES (2, 2008, 2, 9.9)
Sin embargo, con el operador GROUPING SETS, se pueden definir diferentes gruposde
UNION ALL
agregado en una sola consulta, como se muestra a continuacin
SELECT Codalumno, Cursoao,semestre, SUM(Promedio) AS TotPromedio
FROM #Alumnos
GROUP BY GROUPING SETS((Codalumno, Cursoao), (Codalumno,semestre))
ORDER BY Codalumno,semestre
1
2
3
4
5
6
7
8
codalumno
1
1
1
1
2
2
2
2
Semestre
1
2
3
4
1
2
3
4
Totalpromedio
10
14.4
17.4
17.8
11.8
17.8
15.9
14.4
Si en SQL Server 2005, estabas cans
para realizar varias operaciones de i
SQL Server 2008 de alguna manera
nueva caracterstica llamada Constru
funcionalidad y ahorrarnos el trabajo
explico con un ejemplo bastante prct
Primero: Crear una tabla.
CREATE TABLE [Trabajo].[Libro](
[LibroID] [int] IDENTITY(1,1) NOT N
[Titulo] [nvarchar](50) COLLATE La
[Ubicacion] [nvarchar](400) COLLA
[Nombre_conocido] [nvarchar](8) C
[Numguia] [nchar](5) COLLATE Lat
[Nuevo_numero] [int] NOT NULL C
DEFAULT ((0)),
[Status] [tinyint] NOT NULL,
[LibroSummary] [nvarchar](max) CO
[ModifiedDate] [datetime] NOT NUL
DEFAULT (getdate()),
CONSTRAINT [PK_Libro_LibroID] PR
(
[LibroID] ASC
)
) ON [PRIMARY]
Siguiente paso: Insertar Datos. , pode
La ms trabajoso es esta:
INSERT INTO
[Trabajo].[Libro]([Titulo],[Ubicacion],[Nombre_conocido],[Numguia],[Nuevo_numero],[Stat
us],[LibroSummary])
VALUES ('Installing Replacement Pedals','C:\Libros\Installing Replacement
Pedals.doc','.doc','0',32,2,'Detailed instructions ...')
INSERT INTO
[Trabajo].[Libro]([Titulo],[Ubicacion],[Nombre_conocido],[Numguia],[Nuevo_numero],[Stat
us],[LibroSummary])
VALUES ('Introduction 1','C:\Libros\Introduction 1.doc','.doc','4',28,2,NULL)
INSERT INTO
[Trabajo].[Libro]([Titulo],[Ubicacion],[Nombre_conocido],[Numguia],[Nuevo_numero],[Stat
us],[LibroSummary])
VALUES ('Lubrication Maintenance','C:\Libros\Lubrication
Maintenance.doc','.doc','2',11,1,'Guidelines and recommendations...')
INSERT INTO
[Trabajo].[Libro]([Titulo],[Ubicacion],[Nombre_conocido],[Numguia],[Nuevo_numero],[Stat
us],[LibroSummary])
VALUES ('Seat Assembly','C:\Libros\Seat Assembly.doc','.doc','8',55,2,'Worn or
damaged seats...')
Este problema (en SQL Server 2005) se soluciona usando UNION ALL, asi:
INSERT INTO
[Trabajo].[Libro]([Titulo],[Ubicacion],[Nombre_conocido],[Numguia],[Nuevo_numero],[Stat
us],[LibroSummary])
SELECT 'Installing Replacement Pedals','C:\Libros\Installing Replacement
Pedals.doc','.doc','0',32,2,'Detailed instructions ...'
UNION ALL
SELECT 'Introduction 1','C:\Libros\Introduction 1.doc','.doc','4',28,2,NULL
UNION ALL
SELECT 'Lubrication Maintenance','C:\Libros\Lubrication
Maintenance.doc','.doc','2',11,1,'Guidelines and recommendations...'
UNION ALL
SELECT 'Seat Assembly','C:\Libros\S
seats...'
Para SQL Server 2008, usando Cons
INSERT INTO [Trabajo].[Libro](
[Titulo]
,[Ubicacion]
,[Nombre_conocido]
,[Numguia]
,[Nuevo_numero]
,[Status]
,[LibroSummary]
)
VALUES ('Installing Replacement Ped
Pedals.doc','.doc','0',32,2,
'Detailed instructions ...'),
('Introduction 1','C:\Libros\Introduction
('Lubrication Maintenance','C:\Libros\L
'Guidelines and recommendation
('Seat Assembly','C:\Libros\Seat Asse
Fijate que no tenemos que usar UNIO
repetir...) mucho trabajo de estar escr
desear insertar masivamente. Est de
ser insercin directa.
Kill "UNION ALL" para este tipo de op
Tener en cuenta que si usted no est
Auditora de permisos y Roles del servidor (SQL Server)
realizar un filtro utilizando una clu
SPerm.state
Dado que SQL Server implemento un nuevo modelo de seguridad y se pueden asignar
permisos, hay varias vistas del catlogo que nos interesa para realizar una Auditora.
G)
que
Por supuesto, podemos combinar lo
informe.
Ya
que
sabemos
qu
instrucciones SELECT, podemos uti
sys.server_principals : Contiene una fila por cada entidad de seguridad del servidor.
primera consulta (para indicar el ROL
sys.server_permissions : Devuelve una fila por cada permiso a nivel de servidor.
sys.server_role_members : Devuelve una fila por cada miembro de cada funcin fija de
SELECT SP1.[Nombres] AS Login, R
servidor.
SP2.[Nombres] COLLATE DATABAS
FROM sys.server_principals SP1
Para obtener los miembros de la funcin de servidor vamos a
JOIN sys.server_role_members SRM
combinarsys.server_principals sys.server_role_members :
ON SP1.principal_id = SRM.member_
SELECT SP1.[Nombres] AS Login, SP2.[Nombres] AS ServerRole
JOIN sys.server_principals SP2
FROM sys.server_principals SP1
ON SRM.role_principal_id = SP2.princ
JOIN sys.server_role_members SRM
UNION ALL
ON SP1.principal_id = SRM.member_principal_id
SELECT SP.[Nombres] AS Login , S
JOIN sys.server_principals SP2
SPerm.permission_Nombres COLLAT
ON SRM.role_principal_id = SP2.principal_id
ROM sys.server_principals SP
ORDER BY SP1.[Nombres], SP2.[Nombres];
JOIN sys.server_permissions SPerm
Para obtener los permisos,
ON SP.principal_id = SPerm.grantee_
usaremos sys.server_principals y sys.server_permissions :
ORDER BY [Login], [ServerPermissio
SELECT SP.[Nombres] AS Login , SPerm.state_desc + +
SPerm.permission_Nombres ASServerPermission
FROM sys.server_principals SP
JOIN sys.server_permissions SPerm
ON SP.principal_id = SPerm.grantee_principal_id
ORDER BY [Login], [ServerPermission];
EJEMPLO 227
Como saber si existe un metodo en un objeto PEMSTATUS()
Emplearemos PEMSTATUS para saber si existe una propiedad :
* tcObject : Nombre del Objeto a evaluar
Establezca una restriccin CHECK
pueden ingresar estos valores (I CI
ALTER TABLE Alumnos
ADD CONSTRAINT CK_ALUMNOS
CICLO);
* tcMethod : Nombre de la propiedad a comprobar
tcObject = Thisform
tcMethod = NombredelMetodoAVerificar
IF !PEMSTATUS(&tcObject,&tcMethod,5) THEN
WAIT WINDOW No existe Mtodo NOWAIT
ENDIF
EJEMPLO 228
Visualizaremos la restriccin de la
SP_HELPCONSTARINT Alumnos
EJEMPLO 229
Ahora diga usted como establecr
determinada tabla , para que la
valores nulos
ALTER TABLE USUARIOS
ADD CONSTRAINT PK_USUARIOS_
PRIMARY KEY (TIPODOCUM);
EJEMPLO 230
Ahora modificaremos un registro
Boleta Militar por Libreta Militar
UPDATE Usuarios SET TIPODOCU
Militar;
EJEMPLO 231
EJEMPLO 234
Considerando que estamos estableciendo restricciones, pues ahora ejecutaremos
un ejemplo de restriccin por defecto que sea Partida de Nacimiento
Ahora diga usted como restablecer
H y M para el campo o columna den
ALTER TABLE Usuario
ADD CONSTRAINT DF_Usuarios_documento DEFAULT Partida de Nacimiento
FOR TIPODOCUM;
ALTER TABLE CONTROL
ADD CONSTRAINT CK_CONTROL_
COMBINACIONES
EJEMPLO 232
Ahora dentro de una tabla Control tenemos una columna denominada
Tipo_movilidad pues debemos de crear una restriccin DEFAULT
CREATE TABLE CONTROL(
Numdoc
Tinyint identity,
Detalle
char(10) not null,
Tipo_movilidad char(1), _ _ a =auto, m= moto
Horallegada
datetime not null,
Horasalida
datetime
);
Existen 03 tipos de combinaciones y s
Combinaciones internas INNE
Combinaciones externas OUT
Combinaciones cruzadas CR
Las vinculaciones entre tablas se re
registros de dos tablas siempre que h
Su sintaxis es:
SELECT campos FROM tb1 INNER J
En donde:
tb1, tb2
Son los nombres de las ta
campo1,
campo2
Son los nombres de los c
campos deben ser del mi
datos, pero no tienen que
EJEMPLO 233
De la misma manera ahora procederemos a crear un ejemplo con una restriccin
CHECK que pueda almacenar una determinada columna primero 3 digitos
numericos y luego 2 caracteres alfabeticos.
ALTER TABLE CONTROL
ADD CONSTRAINT CK_CONTROL_TIPOK CHECK (TIPOK LIKE [0-9] 0-9][0-9][A-Z]
[A-Z] );
Como
en cualquier operador de c
Se puede utilizar una operacin INN
una combinacin por equivalencia
combinaciones equivalentes son las m
tablas siempre que haya concordanci
Se puede utilizar INNER JOIN con las tablas Departamentos y Registros para
seleccionar todos los Registros de cada departamento. Por el contrario, para seleccionar
todos los departamentos (incluso si alguno de ellos no tiene ningn empleado asignado)
se emplea LEFT JOIN o todos los Registros (incluso si alguno no est asignado a
ningn departamento), en este caso RIGHT JOIN.
Apellido) AS Nombres FROM Registro
DetallesPedidos
ON Pedidos.IdPedido = DetallesPedid
Pedidos.IdEmpleado GROUP BY Nom
Si se intenta combinar campos que contengan datos Memo u Objeto OLE, se produce
un error. Se pueden combinar dos campos numricos cualesquiera, incluso si son de
diferente tipo de datos. Por ejemplo, puede combinar un campo Numrico para el que la
propiedad Size de su objeto Field est establecida como Entero, y un campo Contador.
(Crea dos combinaciones equivalen
Pedidos, y la otra entre las tablas Ped
Registros no contiene datos de MO
contiene datos de los Registros. La
MOVIMIENTOS totales.)
El ejemplo siguiente muestra cmo podra combinar las tablas Categoras y Productos
basndose en el campo IDCategoria:
SELECT NombreCategoria, NombreProducto FROM Categorias INNER JOIN
Productos ON Categorias.IDCategoria = Productos.IDCategoria
En el ejemplo anterior, IDCategoria es el campo combinado, pero no est incluido en la
salida de la consulta ya que no est incluido en la instruccin SELECT. Para incluir el
campo combinado, incluir el nombre del campo en la instruccin SELECT, en este caso,
Categorias.IDCategoria.
Si empleamos la clusula INNER en l
de la tabla de la que hayamos escrit
menos un registro de la tabla que ha
tenemos dos clusulas que sustituye
LEFT y RIGHT. LEFT toma todos lo
tengan ningn registro en la tabla d
pero al contrario, toma todos los reg
ningn registro en la tabla de la izquie
Tambin se pueden enlazar varias clusulas ON en una instruccin JOIN, utilizando la
sintaxis siguiente:
SELECT campos FROM tabla1 INNER JOIN tabla2 ON (tb1.campo1 comp tb2.campo1
AND ON tb1.campo2 comp tb2.campo2) OR ON (tb1.campo3 comp tb2.campo3)
La sintaxis expuesta anteriormente
sentencias con la sintaxis funcionan
dicen que esta sintaxis es incorrecta y
LEFT OUTER JOIN y RIGHT OUTE
una u otra forma.
Tambin puede anidar instrucciones JOIN utilizando la siguiente sintaxis:
SELECT campos FROM tb1 INNER JOIN (tb2 INNER JOIN [( ]tb3
[INNER JOIN [( ]tablax [INNER JOIN ...)]
ON tb3.campo3 comp tbx.campox)] ON tb2.campo2 comp tb3.campo3)
ON tb1.campo1 comp tb2.campo2
No obstante, los INNER JOIN ORAC
sintaxis en formato ANSI para los IN
Tomando como referencia la siguiente
Un LEFT JOIN o un RIGHT JOIN puede anidarse dentro de un INNER JOIN, pero un
INNER JOIN no puede anidarse dentro de un LEFT JOIN o un RIGHT JOIN.
Ejemplo:
SELECT DISTINCT Sum(PrecioUnitario * Cantidad) AS Contenidos, (Nombre + ' ' +
SELECT Facturas.*, Albaranes.* FRO
ON Facturas.IdAlbaran = Albaranes.Id
Facturas.IdCliente = 325
La transformacin de esta sentencia a formato ANSI sera la siguiente:
COMBINACIONES INTERNAS INN
SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes
WHERE Facturas.IdAlbaran = Albaranes.IdAlbaran AND
Facturas.IdCliente = 325 ;
Este tipo de operaciones se emplea
recordemos que las combinaciones
hacer coincidir las filas de las tablas
Como se puede observar los cambios realizados han sido los siguientes:
Todas las tablas que intervienen en la consulta se especifican en la clusula FROM. Las
condiciones que vinculan a las tablas se especifican en la clusula WHERE y se
vinculan mediante el operador lgico AND.
Referente a los OUTER JOIN, no funcionan en ORACLE y adems conozco una sintaxis
que funcione en los tres sistemas. La sintaxis en ORACLE es igual a la sentencia
anterior pero aadiendo los caracteres (+) detrs del nombre de la tabla en la que
deseamos aceptar valores nulos, esto equivale a un LEFT JOIN:
Este tipo de operaciones emplea:
LEFT OUTER JOIN (Externa
RIGHT OUTER JOIN( Extern
FULL OUTER JOIN (Complet
SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes
WHERE Facturas.IdAlbaran = Albaranes.IdAlbaran (+)
AND Facturas.IdCliente = 325
Y esto a un RIGHT JOIN:
SELECT
Facturas.*,
Albaranes.*
FROM
WHERE
Facturas.IdAlbaran
(+)
=
AND Facturas.IdCliente = 325
COMBINACIONES EXTERNAS OUT
COMBINACIONES CRUZADAS CR
Facturas,
Albaranes
Albaranes.IdAlbaran
En SQL-SERVER se puede utilizar una sintaxis parecida, en este caso no se utiliza los
caracteres (+) sino los caracteres =* para el LEFT JOIN y *= para el RIGHT JOIN.
Este tipo de operaciones devuelve la
productos cartesianos .
EJEMPLO 235
Obtener el nombre de los clientes
nombres de los articulos cuyos re
SELECT AM.nomcliente, OR.produ
ARTICULO AS OR ON AM.Idcodcli =
EJEMPLO 236
EJEMPLO 240
Ahora desarrollaremos otro ejemplo, considerando que deseamos retornar todas
las columnas de una tabla llamada CLIENTE donde la columna Idcodin est
relacionada con la tabla MOVIMIENTOS utilizando la combinacin externa
izquierda con respecto a MOVIMIENTOS (Cli_cod) y de esta manera obtener las
columnas Fechaventa y Cantidad.
Select A.Idcodin, A.nombres,B.Fechaventa,B.cantidad FROM CLIENTE AS A LEFT
OUTER JOIN MOVIMIENTOS AS B ON B.Cli_cod = A.Idcodin ORDER BY B.Cli_cod
EJEMPLO 237
Obtener todos los registros comprendos entre las tablas CLIENTES y
MOVIMIENTOS
SELECT A.Codigocli AS CODIGO,A.Nomcli AS NOMBRES, B.Fechaventa, B.Cant,
B.Precio,B.Total FROM CLIENTES AS A INNER JOIN MOVIMIENTOS AS B ON
A.Codigocli = B.Codigo
EJEMPLO 238
Ahora vamos a considerar que en la practica real cuando el operador trabaje con
tres tablas en relacion, donde las tablas son CLIENTES, MOVIMIENTOS y
ALMACEN
SELECT A.Clicod, A.Nombres,B.Fechaventa,B.Cantidad, C.stock FROM CLIENTES AS
A INNER JOIN MOVIMIENTOS AS B ON A.Cli_cod = B.Cli_cod INNER JOIN ALMACEN
AS C ON A.Codbien = C.codbien
EJEMPLO 239
Ejecutar una consulta donde retorne todas las columnas codigocliente, nombre de
cliente, telefono de la tabla CLIENTES utilizando una combinacin externa
izquierda con la tabla MOVIMIENTOS
SELECT A.Codigocliente,Anombreclie AS Nombre cliente, A.telefono,B.factura,
B.Fechaventa, B.total FROM CLIENTES AS A LEFT OUTER JOIN MOVIMIENTOS AS
B ON A.codigocliente = B.codigocliente ORDER BY B.Codigocliente
En este ejemplo vamos a trab
MOVIMIENTOS donde nos piden re
que no efectuaron movimientos, pa
SELECT A.Codigocli, A.Nombre,B.N
LEFT OUTER JOIN MOVIMIENTOS
IS NULL
EJEMPLO 241
Ahora vamos a reportar todas
MOVIMIENTO y LISTADO DE PROV
combinacin externa como ejemplo
SELECT A.Numdoc,A.Cantidad,B.Co
[LISTADO DE PROVEEDORES] AS B
GO
EJEMPLO 242
Ahora deseamos retornar todas
CLIENTES, empleando la combinac
SELECT A.Rucprov,A.Nomprov as PR
FULL OUTER JOIN CLIENTES AS B
EJEMPLO 243-244-245-246
En este caso como ejemplo vamos
los siguiente: En una determinada
cuya tabla se llama CLIENTES tam
se encuentra registrados los sitio
asimismo tenemos una tabla llama
las dependencias organicas en la q
1. Eliminemos las tablas CLIE
2.
3.
4.
5.
Crear las estructuras de las tablas
Ahora obtener algunos registros
Luego listar los datos de ambas tablas en forma ordenada
Reportar los clientes que laboran en la Dependencia NORTE ORIENTE
CUSCO
------------
SELECT A.Nombrecli AS NOMB
CLIENTES AS A INNER JOIN DE
B.Codigodep WHERE B.Nombredep =
IF (Object_id(CLIENTES)) IS NOT NULL
DROP table clientes;
IF (Object_id(DEPENDENCIAS)) IS NOT NULL
DROP table dependencias;
-----------CREATE TABLE CLIENTES(
Codigocli
INT
IDENTITY,
Nombrecli
VARCHAR(60),
Telefono
VARCHAR(40),
Dependenciacod
TINYINT NOT NULL,
PRIMARY KEY (Codigocli)
);
CREATE TABLE DEPENDENCIAS (
Codigodep
TINYINT IDENTITY,
Nombredep
VARCHAR(20),
PRIMARY KEY (Codigodep)
);
------------Para ingresar registros a la tabla cuya columna se encuentre IDENTITY, recordemos
que debemos activar manualmente la opcin SET ON
SET IDENTITY _INSERT DEPENDENCIAS ON
INSERT INTO DEPENDENCIAS (Nombredep) Values(Norte Oriente Cusco);
INSERT INTO DEPENDENCIAS (Nombredep) Values(Oficina Regional Lima);
INSERT INTO DEPENDENCIAS (Nombredep) Values(Region Oriente Pucallpa);
INSERT INTO DEPENDENCIAS (Nombredep) Values(regin centro Huancayo);
------------SELECT A.Nombrecli AS CLIENTE, A.Telefono, B.NombreDep AS Dependencias
FROM CLIENTES AS A INNER JOIN DEPENDENCIAS AS B ON A.Dependenciacod =
B.Codigodep;
-------------
COMBINACION EXTERNA IZQUIERDA
EJEMPLO 247
Una Empresa tiene registrados sus
tabla llamada DEPENDENCIAS, sim
desarrollaria las siguientes consult
Muestre todos los datos d
dependencias.
Muestre solamente los clien
Dependencia
Muestre todas las columnas
y ordenado por nombres.
Muestre todos los datos de lo
----- Ahora vamos a la solucin grupal
SELECT C.Nombres,c.Telefono,D.De
LEFT OUTER JOIN DEPEND
SELECT C.Nombres, C.Telefono, D.D
LEFT OUTER JOIN Depend
BY Nombres;
SELECT c.Nombres, C.Telefono,D.
WHERE D.Nomdep =NORTE ORIEN
COMBINACION EXTERNA DERECHA
EJEMPLO 248
Mostrar todos los datos de los c
usando la clausula RIGHT
Mostrar lo mismo del ejemplo anterior pero en este caso vamos a emplear la
clausula LEFT
SELECT C.Nombre,c.Telefono,D.Dependencia FROM Dependencia AS D
RIGHTOUTER JOIN CLIENTES AS C ON C.Coddep = D.Codigo;
SELECT C.Nombre, C.Telefono, D.Dependencia FROM CLIENTES AS C LEFT
OUTER JOIN Dependencias AS D ON C.Coddep =D.codigo,
SELECT B.Nombres, B.Codigocurs
RIGHT OUTER JOIN ALUMN
SELECT C.Curso FROM ALUMNOS
ON B.Codcurso = C.Codigo
SELECT B.Nombres FROM ALUMN
ON B.Codcurso = C.Codigo
SELECT B.Nombres, B.aula, C.curs
Cursos AS C ON B.Codcur
COMBINACION EXTERNA COMPLETA FULL JOIN
Este tipo de operador se utiliza para devolver todas las filas de una combinacin tengan
o no correspondencia. Es el equivalente a la utilizacin de LEFT JOIN y RIGHT JOIN a
la misma vez. Mediante este operador se obtendrn por un lado las filas que tengan
correspondencia en ambas tablas y tambin aquellas que no tengan correspondencia
sean de la tabla que sean.
EJEMPLO 249
1. Mostrar toda la informacin de la tabla de los alumnos que se han
inscritos para estudiar en la universidad y obtener de la tabla CURSOS el
nombre de cada curso
2. Empleando LEFT JOIN con la tabla CURSOS obtenga todos los registros
3. Efectuar el mismo reporte emplenado RIGHT JOIN
4. Liste todos los cursos que no hay inscritos, empleando la clausula LEFT
JOIN
5. Liste todos los registros de los alumnos matriculados que no contengan y
no contemplen cursos en la tabla CURSOS
6. Empleando la clausula FULL JOIN obtener todos los datos de ambas
tablas.
/* Dando solucin a lo expuesto */
SELECT B.Nombres,B.CodigoAlumno, C.Curso FROM ALUMNOS AS C
INNER JOINCursos AS C ON B.Codcurso = c.codigo;
SELECT B.Nombres, B.codigocurso, C.Curso FROM ALUMNOS AS B
LEFT OUTER JOIN CURSOS AS C ON B.Codcurso = C.codigo;
COMBINACION CRUZADA CROSS JO
Se utiliza en SQL-SERVER para reali
una tabla con todos los autores y otr
listado combinar ambas tablas de ta
ttulo,
EJEMPLO 250
Una Agencia de Empleos almace
clientes inscritos de sexo Femeni
tabla de Varones llamada VARON lo
Listar la combinacin de to
sexo Masculino
Realice la misma combinac
cuya edad sea mayor a 40 a
Luego agrupe las parejas
diferencia superior a 10 ao
/*Dando solucin */
SELECT M.Nombre,M.Edad
VARONESA AS M C
SELECT M.Nombre,M.Edad
VARONESA AS M C
and V.edad>40;
SELECT M.Nombre,M.Edad,V.Nombre,V.Edad FROM VARONESA AS M
CROSS JOIN VARON AS V WHERE M.Edad-V.Edad BETWEEN -10
AND 10;
AUTOCOMBINACION (En la misma tabla)
La autocombinacin se utiliza para unir una tabla consigo misma, comparando valores
de dos columnas con el mismo tipo de datos. La sintaxis en la siguiente:
SELECT alias1.columna, alias2.columna, ... FROM tabla1 as alias1, tabla2 as alias2
WHERE alias1.columna = alias2.columna AND otras condiciones
EJEMPLO 251
En este ejemplo vamos a considerar que tenemos una agencia donde se va
almacenar la informacin de todos sus clientes en una tabla llamada CLIENTES.
Se necesita la combinacin de todas las personas de sexo femenino con las de sexo
masculino y obtengamos:
El mismo reporte pero realizando la operacin JOIN
Listar el mismo reporte empleando JOIN pero asimismo que las parejas no
tengan una diferencia superior entre edades a 5 aos entre cada una de ellas.
SELECT CM.Nombres, CM.Edad, CV.Nombres,CV.Edad FROM CLIENTES AS CM
CROSS JOIN CLIENTES AS CV WHERE CM.SEXO = F AND CV.SEXO=M
SELECT CM.Nombres, CM.Edad, CV.Nombres,CV.Edad FROM CLIENTES AS CM
CROSS JOIN CLIENTES AS CV WHERE CM.SEXO = F AND CV.SEXO=M AND
CM.Edad-CV.Edad BETWEEN -5 AND 5 ;
COMBINACIONES Y FUNCIONES DE A
EJEMPLO 252
Crear una tabla llamada CLIENTE
encuentra los nombres de los depa
Ahora en base a lo titulado en
considerar estas preguntas y consu
Contar la cantidad de cli
nombre de cada departame
Mostrar el promedio de ga
sexo
Liste la cantidad de visitas
Liste el monto mas alto de
una de estas consultas
DEPARTAMENTO, con la si
CREATE TABLE CLIENTES (
Nombre
VARCHAR (40),
Edad
Tinyint,
Sexo
CHAR(1) DEFAULT
Domicilio
Varchar (60),
Codigodep
Tinyint NOT NULL,
Totalmonto
Decimal(10,2)
);
CREATE TABLE DEPARTAMENTO
Codigo
Tinyint identity,
Nombre
Varchar(40)
);
SELECT C.Nombre, COUNT
JOIN CLIENTES AS V ON V.
SELECT C.Nombre, AVG (V.Totalmonto) AS Promedio total FROM
DEPARTAMENTO AS C JOIN CLIENTES AS V ON V.Codigodep = C.codigo
GROUP BY C.Nombre, V.Sexo;
SELECT
C.Nombre,
COUNT(Totalmonto)
AS
TOTAL
FROM
DEPARTAMENTO AS C JOIN CLIENTES AS V ON V.Codigodep = C.Codigo
GROUP BY C.Nombre;
SELECT C.Nombre, MAX(Totalmonto) FROM CLIENTES AS V JOIN
DEPARTAMENTO AS C ON V.Codigodep = C.codigo GROUP BY C.Nombre;
---tabla MOVIMIENTOS
CREATE TABLE MOVIMIENTOS(
Idventa INT PRIMARY KEY ,
nombre VARCHAR(20),
apellido VARCHAR(10),
idOPERADOR INT
foreign key (idOPERADOR) reference
COMBINACIONES ENTRE DOS O MAS TABLAS
Cuando creamos relaciones en SQL S
relacional de las tablas de la base de
Haciendo un repaso breve a lo detallado, sobre combinaciones de tablas vamos a
resaltar una vez mas el uso de los alias en los nombres de las tablas, asicomo la
combinacin de varios conjuntos de resultados mediante el operador UNION.
Asi que debemos recordar que una clave primaria es un campo o varios que se
identifica en un solo registro dentro de una tabla y la clave foranea se define como un
campo cuyo valor coincide con la clave primaria, haciendo referencia a un campo con
una restriccin Primari Key o Unique.
Dando inicio a la introduccin de la misma, consideramos estos ejemplos anexos para el
operador
El uso de alias en los nombres de tab
comandos, facilita la escritura de com
de Transact-SQL. al escribir secuen
tabla descriptivo largo y complejo por
lugar del nombre completo de la tabla
Ejemplo
Se tienen las tablas MOVIMIENTOS y OPERADOR, dichas tablas debern relacionarse
por el idOPERADOR que es la llave primaria en la tabla OPERADOR y es fornea en la
tabla MOVIMIENTOS.
--Creacin de BD
CREATE Database MOVIMIENTOS
GO
USE MOVIMIENTOS
GO
---tabla OPERADOR
CREATE TABLE OPERADOR(
idOPERADOR INT PRIMARY KEY ,
nombre VARCHAR(20),
apellido VARCHAR(10),
);
GO
Sintaxis parcial: SELECT * FROM s
aliasTabla
En este ejemplo se muestran los nom
cantidad vendida de las tablas Regis0
las tablas de la sintaxis de JOIN.
USE Padrondb
SELECT Regis001_Nombres, Conten
JOIN Contenidos ON Regis001.Regis
GO
En este ejemplo se muestran los nom
cantidad vendida de las tablas Regis0
tablas de la sintaxis de JOIN.
USE Padrondb
SELECT Regis001_Nombres, s.Regis
Contenidos AS s ON b.Regis001_id =
GO
Algunas veces, la compleja sintaxis d
nombres de tablas. Por ejemplo, al co
alias.
Ahora la tabla Regis001 se le podr conocer con el alias b y la tabla Contenidos se
podr conocer con el alias s
Combinacin de datos de varias tablas:
Una combinacin es una operacin que permite consultar dos o ms tablas para
producir un conjunto de resultados que incorpore filas y columnas de cada una de las
tablas. Las tablas se combinan en funcin de las columnas que son comunes a ambas
tablas.
Cuando se combinan tablas, Microsoft SQL Server compara los valores de las
columnas especificadas fila por fila y, despus, utiliza los resultados de la comparacin
para combinar los valores que cumplan los criterios especificados en nuevas filas.
Hay tres tipos de combinaciones: combinaciones internas, combinaciones externas y
combinaciones cruzadas. Adicionalmente, en una instruccin SELECT se pueden
combinar ms de dos tablas mediante un conjunto de combinaciones o se puede
combinar una tabla consigo misma mediante una autocombinacin.
JOIN:
Es una operacin que combina registros de dos tablas en una base de datos relacional
que resulta en una nueva tabla (temporal) llamada tabla de JOIN.
Las tablas se combinan para producir un nico conjunto de resultados que incorpore
filas y columnas de dos o ms tablas.
Sintaxis Parcial
SELECT columna [, columna ] FROM {<tablaOrigen >} [, ...n] <tipoCombinacin > ::= [
INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ <sugerenciaCombinacin> ] JOIN
<tablaCombinada> ::= <tablaOrigen > <tipoCombinacin > <tablaOrigen > ON
<condicinBsqueda> | <tablaOrigen > CROSS JOIN <tablaOrigen > |
<tablaCombinada>
Seleccin de columnas especficas de varias tablas:
Una combinacin permite seleccionar columnas de varias tablas al expandir la clusula
FROM de la instruccin SELECT. En la clusula FROM se incluyen dos palabras clave
adicionales: JOIN y ON.
La palabra clave JOIN especifica qu tablas se van a combinar y cmo.
La palabra clave ON especifica las columnas que las tablas tienen en comn.
Consultas de dos o ms tablas para producir un conjunto de resultados:
Una combinacin permite consultar dos o ms tablas para producir un nico conjunto de
resultados. Al implementar combinaciones, tenga en cuenta los siguientes hechos e
instrucciones:
1.
Especifique la condicin de co
externas.
2.
Si una tabla tiene una clave p
debe hacer referencia a toda
3.
Para combinar tablas, utilice c
Dichas columnas deben tener
4.
Haga referencia al nombre de
a combinar tienen el mismo n
con el formato tabla.columna.
5.
Limite el nmero de tablas de
tablas combine, mayor ser la
6.
Puede incluir varias combinac
Uso de combinaciones internas:
Las combinaciones internas combinan
las columnas que son comunes a am
cumplen las condiciones de la combin
Por qu se utilizan combinaciones
Utilice combinaciones internas para o
combinar dicha informacin en un con
internas, tenga en cuenta los siguient
1. Las combinaciones internas
abreviar la clusula INNER JO
2. Para especificar las columnas
incluya los nombres calificado
3. Incluya una clusula WHERE
el conjunto de resultados.
4. No utilice valores NULL como
evalan como iguales entre s
Supongamos que tenemos dos tablas
entre s:
Si quiero obtener todas las trabajosy e
USE TABLA_TRABAJOS
SELECT m.titulodetrabajo, d.Nombres
directors d ON m.director = d.id
Donde los campos a seleccionar son titulodetrabajo que est en la tabla
TABLA_TRABAJOS y nombres que est en la tabla Alumnos, como TABLA_TRABAJOS
tiene el alias m, podemos anteponer ese alias a los campos que queramos seleccionar
de la tabla TABLA_TRABAJOS, esto se hace para no causar ambigedad en caso que
hallan 2 campos con nombres iguales en cada tabla.
Este ejemplo devuelve los valores Regis001_nombres, Regis001_id y qty de los
clientes que han adquirido algn producto. Los clientes que no hayan adquirido nada no
se incluyen en el conjunto de resultados. Los clientes que han adquirido ms de un
producto aparecen una vez por cada compra realizada.
Las columnas Regis001_id de las dos tablas pueden especificarse en la lista de
seleccin.
USE Padrondb
SELECT Regis001_nombres, Contenidos.Regis001_id, qty FROM Regis001
INNER JOIN Contenidos ON Regis001.Regis001_id = Contenidos.Regis001_id
GO
Combinaciones Externas
Una combinacin interna (JOIN) encuentra registros de la primera tabla que se
correspondan con los registros de la segunda, es decir, que cumplan la condicin del
"ON" y si un valor de la primera tabla no se encuentra en la segunda tabla, el registro no
aparece.
Si queremos saber qu registros de una tabla NO encuentran correspondencia en la
otra, es decir, no existe valor coincidente en la segunda, necesitamos otro tipo de
combinacin, "OUTER JOIN" (combinacin externa).
Las combinaciones externas combinan registros de dos tablas que cumplen la
condicin, ms los registros de la segunda tabla que no la cumplen; es decir, muestran
todos los registros de las tablas relacionadas, an cuando no haya valores coincidentes
entre ellas.
Este tipo de combinacin se emplea cuando se necesita una lista completa de los datos
de una de las tablas y la informacin que cumple con la condicin. Las combinaciones
externas se realizan solamente entre 2 tablas.
Hay tres tipos de combinaciones externas: "LEFT OUTER JOIN", "RIGHT OUTER
JOIN" y "FULL OUTER JOIN"; se pueden abreviar con "LEFT JOIN", "RIGHT JOIN" y
"FULL JOIN" respectivamente.
Se emplea una combinacin externa
tabla de la izquierda. Si no encuentra
muestra los campos de la segunda ta
En el siguiente ejemplo solicitamos el
SELECT titulo,nombre FROM editoria
ON codigoeditorial = e.codigo;
El resultado mostrar el ttulo y nom
hay libros, es decir, cuyo cdigo de e
resultado, pero con el valor "null" en e
Es importante la posicin en que se
izquierda es la que se usa para localiz
Entonces, un "left join" se usa para ha
otra tabla (derecha); si un valor de la
la tabla de la derecha, se genera una
todos los campos
Sintaxis:
SELECT CAMPOS FROM TABLAIZQ
ON CONDICION;
EJEMPLO 254
En una universidad se inscriben varios alumnos cuya tabla es llamado ALUMNOS,
en otra tabla se encuentra la relacin de los cursos y en otra existente estn todos
los alumnos llamado GENERAL donde estan todos los alumnos inscritos.
CREATE TABLE ALUMNOS (
Id_codigo
Char(10)
Nombre Varchar(40),
Domicilio
Varchar(60),
PRIMARY KEY (Id_codigo)
);
Recordemos que dentro de las funcio
SELECT, en muchas veces con la cla
EJEMPLO 256 - REPASO
Reportar el valor promedio del prec
tabla Almacen
NOT NULL,
CREATE TABLE CURSOS (
Codigo
Tinyint identity,
Nombre Varchar (40),
Profesor
Varchar(60),
PRIMARY KEY (codigo)
);
CREATE TABLE GENERAL (
Id_codigo
Char(10) NOT NULL,
Codigocurso
Tinyint NOT NULL,
Anio
char(8),
Pago
Char(1), _ _ S=Pago, N = No pago
PRIMARY KEY (Id_codigo,codigocurso,anio)
);
Ahora reporte el nombre del Alumno, el nombre del curso en que se encuentra
matriculado y el ao empleando JOIN
SELECT AVG(Pventa) FROM ARTIC
MAX( )
Expresa el maximo valor
SELECT MAX(Edad) FROM Persona
MIN( )
Expresa el minimo valor
SELECT MIN(Edad) FROM Personal
SUM( )
Suma los valores
SELECT SUM(Precio*Cantidad) FRO
WITH ROLLUP
EJEMPLO 257
Agrupar todas las filas de la tab
valorees de las columnas CODIG
ROLLUP agrupamos los registros e
SELECT S.Nombre AS ALUMNO, D.Nombre AS CURSO, Anio FROM CURSOS AS D
RIGHT JOIN GENERAL AS I ON I.Codigocurso = D.codigo LEFT JOIN ALUMNOS AS S
ON I.Id_codigo = S.Id_codigo;
SELECT Codigoarticulo,ubicacin,A
GROUP BY codigoarticulo, ubicacin
EJEMPLO 255
Ahora diga usted como listar todos los datos de los alumnos matriculados
incluyendo los cursos que no contemplen en la tabla.
SELECT S.Nombre, D.Nombre AS CURSO, I.Anio,I.Pago FROM CURSOS AS D FULL
JOIN GENERAL AS I ON I.Codigocurso =D.codigo FULL JOIN ALUMNOS AS S ON
S.Id_Codigo =I.Id_codigo
COMPUTE BY
Permite que se agrupen todas las filas
mas columnas y luego efectuar una re
La diferencia con GROUP BY es que
cada grupo
EJEMPLO 258
Retornar las columnas Id_codigo, nombres, numerodocumento de la tabla
personal y ademas el tipo de documento de la tabla documento, empleando la
combinacin interna.
SELECT B.Id_codigo,B.nombres,c.Tipodocum FROM PERSONAL AS B INNER JOIN
Tipodocum AS C ON B.Codigodocum = C.Codigo ORDER BY 2
EJEMPLO 259
Del ejemplo anterior reportar todas las columnas Id_codigo, nombres y el tipo de
documento empleando la combinacin externa izquierda
SELECT B.Id_codigo,b.Nombres,C.Tipodocum FROM PERSONAL AS B LEFT OUTER
JOIN Tipodocum AS C ON B.Codigodocum = C.Codigo ORDER BY 1
CROSS JOIN
EJEMPLO 260
Retornar todas las columnas: idcodigo y nombres de la tabla personal, asi como
el codigo de tipo de documento de la tabla documento empleando una
combinacion externa completa
SELECT C.Idcodigo, C.Nombres, B.Tipodocumento FROM PERSONAL AS C FULL
OUTER JOIN DOCUMENTO AS B ON C.Iddocum = B.Coddocum ORDER BY 2
EJEMPLO 261
Reportar todas las columnas Idcodigo y nombres de la tabla personal y
tipodocume de la tabla documento empleando una combinacin cruzada
SELECT C.Idcodigo, C.Nombres, B.Tipodocumento FROM PERSONAL AS C CROSS
JOIN DOCUMENTO AS B ORDER BY 2
SUB CONSULTAS
Una sub consulta es una sentencia SE
de otra sentencia SQL, llamada sente
La sub consulta (consulta interna) obt
sentencia padre. Usar una sub consu
consultas secuenciales y utilizar el res
de bsqueda en la consulta externa (c
Las sub consultas pueden ser usad
Proveer valores para condicio
WITH de sentencias SELECT
Definir el conjunto de filas
INSERT o CREATE TABLE
Definir el conjunto de filas
sentencia CREATE VIEW o C
Definir uno o ms valores par
UPDATE
Definir una tabla para ser ope
(Esto se hace colocando la su
hacerse tambin en sentencia
Sub consultas
Se pueden construir sentencias pode
pueden ser muy tiles cuando necesit
que dependa de los datos de la mism
para escribir sentencias SQL que ne
desconocidos.
Donde:
operator incluye un operador de comp
NOTA
los operadores de comparacin se encuentran
operadores de mltiples filas
SUB CONSULTAS DE MLTIPLES COLUMNAS
Hasta ahora hemos escrito sub consultas de filas nicas y sub consultas de mltiples
filas donde solo una columna es obtenida por la sentencia SELECT interna y estas son
usadas para evaluar la expresin en la sentencia SELECT padre. Si quieres comparar
dos o ms columnas, debemos escribir una clusula WHERE compuesta usando
operadores lgicos. El uso de sub consultas de mltiples columnas, puede combinar
condiciones WHERE duplicadas en una simple clusula WHERE.
Una sub consulta de mltiples columnas puede tambin ser una comparacin no par. En
una comparacin no par, cada columna de la clusula WHERE de la sentencia SELECT
padre es individualmente comparada con mltiples valores recuperados por la sentencia
SELECT interna. Las columnas individuales pueden corresponder con algunos de los
valores recuperados por la sentencia SELECT interna. Pero en conjunto, todas las
condiciones mltiples de la sentencia SELECT principal deben ser satisfechas para las
filas a ser desplegadas.
escalar ha sido mejorado en Oracle9
en:
Condiciones y parte de expresiones
Todas las clusulas del SELECT exc
En el lado izquierdo del operador en
UPDATE
Sin embargo, las sub consultas esca
lugares:
Como valor por defecto para column
En la clusula RETURNING de sent
Como base de una funcin base ind
En la clusula GROUP BY, constrain
Clusulas HAVING
En clusulas START WITH y CONN
En sentencias que no son relacionad
Sub consulta correlacionada
Usando una sub consulta dentro de la clusula FROM
Se puede usar una sub consulta en la clusula FROM de una sentencia SELECT, el
cul es muy similar al manejo de las vistas que hemos usado. Una sub consulta en la
clusula FROM de una sentencia SELECT es tambin llamada una vista en lnea. Una
sub consulta en una clusula FROM de una sentencia SELECT define un origen de
datos para esa sentencia SELECT en particular, y solo esa sentencia SELECT.
Sub consultas escalares en SQL
Una sub consulta que obtiene exactamente un valor de una columna de una fila es
tambin llamada sub consulta escalar. Sub consultas de mltiples columnas escritas
para comparar dos o ms columnas, usando una clusula WHERE compuesta y
operadores lgicos, no pueden ser calificados como sub consultas escalares.
El servidor de Oracle ejecuta sub co
relaciona con una columna de una
consulta correlacionada es evaluada
padre. La sentencia padre puede ser
Sub consultas anidadas contra sub
Con una sub consulta anidada norm
ejecuta una sola vez, obteniendo val
sub consulta correlacionada, sin emb
considerada por la consulta externa.
para la consulta externa.
Funcionamiento de sub consultas a
El valor de una expresin en una sub consulta escalar es el valor del elemento de la lista
seleccionado de la sub consulta. Si la sub consulta obtiene 0 filas, el valor de la
expresin de la sub consulta escalar es nulo. Si la sub consulta obtiene ms de una fila,
el servidor de Oracle muestra un error. El servidor de Oracle siempre tiene el apoyo para
usar una sub consulta escalar en una sentencia SELECT. El uso de una sub consulta
La consulta interna se ejecuta prime
La consulta externa se ejecuta una v
Funcionamiento de sub consultas correlacionadas
Recibe una fila candidata (obtenida por la consulta externa)
Ejecuta la consulta interna usando el valor de la fila candidata
Usa los valores resultantes de la consulta interna para calificar o descalificar la fila
candidata
Se repite hasta terminar con las filas candidatas
Una sub consulta correlacionada es un camino de lectura de cada fila en una tabla y la
comparacin de valores en cada fila contra los datos relacionados. Es usado cuantas
veces una sub consulta deba retornar un resultado diferente o conjunto de resultados
para cada fila candidata considerada por la consulta principal. En otras palabras, utilice
una consulta correlacionada para resolver una pregunta de mltiples partes cuya
respuesta dependa del valor de cada fila procesada por la sentencia padre. El servidor
de Oracle ejecuta una sub consulta correlacionada cuando la sub consulta hace
referencia a una columna de la consulta padre.
Nota: Puedes usar los operadores ANY y ALL en una sub consulta correlacionada.
Operador EXISTS
Cuando anidamos sentencias SELECT, todos los operadores lgicos son vlidos. En
suma, se puede usar el operador EXISTS. Este operador es frecuentemente usado en
sub consultas correlacionadas para verificar cuando un valor recuperado por la consulta
externa existe en el conjunto de resultados obtenidos por la consulta interna. Si la sub
consulta obtiene al menos una fila,
el operador obtiene el valor TRUE. Si el valor no existe, se obtiene el valor FALSE.
Consecuentemente, NOT EXISTS verifica cuando un valor recuperado por la consulta
externa no es parte del conjunto de resultados obtenidos por la consulta interna.
Operador NOT EXISTS como solucin alternativa
Un operador NOT IN puede ser utilizado como una alternativa para el operador NOT
EXISTS, como se muestra en el siguiente ejemplo:
Sin embargo, NOT IN evala a FALSE si algn miembro del conjunto de resultados es
un valor nulo. Por consiguiente, las consultas pueden no obtener algunas filas si estas
filas en la tabla DEPARTMENTS no satisfacen la condicin WHERE.
UPDATE Correlacionado
En el caso de la sentencia UPDATE
para actualizar filas en una tabla con
DELETE Correlacionado
En el caso de la sentencia DELETE
para eliminar solo aquellas filas que t
mantener solo los ltimos cuatro
entonces cuando un empleado sea tr
filas mas antiguas.
Clusula WITH
Usando la clusula WITH, se puede d
sea
usada.
La
clusula
subquery_factoring_clausula clusu
reutilizacin del mismo bloque de la
ocurre en mas de una ocasin en u
cuando una consulta tiene muchas r
tienen asociaciones y agrupaciones.
Lo bueno de la clusula WITH
Hace que la consulta sea fcil de lee
Evala una clusula una sola vez, a
la consulta, por esta razn aumenta e
EJEMPLO 262
Reportar todas las columnas Idc
unitario de lo adquirido
SELECT B.Idcodigo, B.Fechaingreso
AS C WHERE B.Cdobien = C.Codbie
EJEMPLO 263
Reportar todas las columnas de lo
iguales o mayor que el precio del c
SELECT * FROM ARTICULOS AS B WHERE
MAX(Preciounitario) FROM ARTICULOS AS C)
Preciounitario
(SELECT
EJEMPLO 268 (Emplearemos DIST
Listar todas las columnas de los
codigo respectivo.
EJEMPLO 264
Reportar todas las columnas de los Alumnos inscritos en la universidad que se
encuentran cursando el mismo ciclo de estudios de la facultad de Ingenieria del III
Ciclo o semestre academico.
SELECT DISTINCTROW Clientes
WHERE Clientes.Nombres IN (SELEC
SELECT Nombres, Apellidos, Carnet FROM ALUMNOS WHERE Ciclo IN (SELECT
Ciclo FROM Alumnos WHERE Ciclo =III)
EJEMPLO 269
Recuperar todos los registros de la
Listaremos todos los productos de
rango determinado de fechas.
EJEMPLO 265 (Emplearemos NOT IN )
Listar del ejemplo anterior todos los alumnos que curcen ciclos diferentes al III
Ciclo
SELECT Nombres, Apellidos, Carnet FROM ALUMNOS WHERE Ciclo NOT IN
(SELECT Ciclo FROM Alumnos WHERE Ciclo =III)
Recuerda, pues que cuando presenta la clausula EXISTS dentro de una sub
consulta funciona como una existencia.
EJEMPLO 266 (Emplearemos NOT IN )
Listar todas las columnas Idcodigo, Nombres de todos los clientes que hayan
efectuado al menos una compra o movimiento.
SELECT Idcodigo, Nombres FROM CLIENTES AS B WHERE EXISTS (SELECT *
FROM CLIENTES AS CINNER JOIN VENTAS AS D ON (C.Codigo = D.Idcodigocli )
WHERE C.Codigo = D.Idcodigocli)
EJEMPLO 267
De acuerdo al emplo anterior listar todos los clientes que no efectuaron compra
alguna.
SELECT Idcodigo, Nombres FROM CLIENTES AS B WHERE NOT EXISTS (SELECT *
FROM CLIENTES AS CINNER JOIN VENTAS AS D ON (C.Codigo = D.Idcodigocli )
WHERE C.Codigo = D.Idcodigocli)
SET DATE FORMAT dmy
SELECT DISTINCTROW Articulos.I
LEFT JOIN VENTAS ON ART
(VENTAS.codigo IS NULL) AND (VE
30-08-2010 #)
Recordemos que las consultas d
permite visualizar los datos en la sf
FUNCION AGREGADA
Es una funcin de SQL que se opera
SELECT
Es una isntruccin y
crear cabeceras de la
Valor1
son los valores Regis
TRANSFORM Es opcional pero si
SQL, procede a la
utilizados como enc
especifica el agrupam
Sintaxis :
TRANSFROM Funcionagregada.Ins
SELECT PIVOT Campo PIVOT {[IN V
EJEMPLO 270
Crear una consulta de tabla de refe
productos por cada semestre.
SET DATE FORMAT dmy
TRANSFORM SUM(Cantidad) AS VENTAS SELECT ARTICULO FROM MOVIMIENTO
WHERE Fecha BETWEEN # 01-01-2010# AND #31-12-2010# group by Articulo ORDER
BY
Articulo
PIVOT
Semestre
&Datepart
(q,
Fechaven)
IN
(Semestre1,Semestre2,Semestre3,Semestre4,Semestre5,Semestre6)
ARTICULO Semestre 1 Semestre 2 Semestre 3 Semestre 4 Semestre 5 Semestre 6
Zapatillas
Zapatos
Toallas
200.00
340.00
500.00
120.00
120.00
45.00
48.00
57.00
69.00
30.00
567.00
900.00
23.00
59.00
90.00
100.00
23.00
340.00
EJEMPLO 271 (Emplearemos PIVOT )
Crear una tabla d ereferencias cruzadas similar al ejemplo anterior por cada mes.
SET DATE FORMAT dmy
TRANSFORMT SUM(Cantidad) AS VENTAS SELECT Articulo FROM MOVIMIENTO
WHERE Fecha BETWEEN #01-01-2010# AND #31-12-2010# GROUP BY Articulo
ORDER BY Articulo PIVOT DATEPART (M ,Fcehaventa)
EJEMPLO 272 (Emplearemos PIVOT )
Crear una tabla d ereferencias cruzadas listando e total de productos vendidos en
un ao.
SET DATE FORMAT dmy
TRANSFORMT SUM(VENTAS.Cantidad) AS TOTALVENTAS SELECT Articulo.Nombre
AS ARTICULO, VENTAS.Codigobien AS CODIGO, SUM(VENTAS.Cantidad) AS
RESULTADO, AVG(VENTAS.Cantidad) AS PROMEDIO FROM VENTAS INNER JOIN
ARTICULOS
ON VENTAS.Codigobien = ARTICULOS.Codigo GROUP BY
VENTAS.Codigobien,ARTICULOS.Nombre PIVOT YEAR(Fecha)
ARTICULO codigo
Zapatillas A100
Zapatos A200
Toallas
A300
Resultado Promedio 2000 2001 2002 2003 2004 2010
40 46.00
30
23 100 30
23 100
20 89.00
567 59
23 567 59
23
80 100.20 900 90 340 900 90 340
Recordemos que la clausula TRAN
en las columnas que realmente per
PIVOT
GROUP BY
Indica el nombre de
Especifica el agrupa
OCASIONES PARA USO DE PIVOT
Por Trimestre
PIVOT TRIM
Por Meses
PIVOT FORM
(ENERO,F
Por das
PIVOT FORM
SUB CONSULTAS
Como sabemos es una instruccin SE
SELECT INTO, DELETE o UPDATE.
Dentro de los terminos Registros en u
COMPARACION
EXPRESION
INSTRUCCIN
Es u
resul
Es u
resul
Es u
que c
Se p
expre
SELE
debe
ANY
regis
comp
SELECT * FROM VENTAS WHERE
MOV
SELECT * FROM VENTAS WHER
Preci
IN
El predicado IN se emplea para recuperar los registros de la consulta principal
NOT IN
Se emplea para recuperar nicamente aquellos registros de la consulta principal para
los que no hay ningn registro de la sub consulta que contenga un valor igual.
EJEMPLO 273
Listar todos los nombres yprecios de todos los artculos cuyo preciounitario es
mayor que los del laboratorio TRIFARMA Y MEDIFARMA.
SELECT Nombres,unidamedida AS MEDIDA,preciounitario AS PRECIO FROM
ARTICULOS WHERE Laboratorio LIKE TRIFARMA* AND Preciounitario>ALL
(SELECT
Preciounitario
FROM
ARTICULOS
WHERE
(Laboratorio
LIKE
*MEDIFARMA* ))
EJEMPLO 274
Obtener una lista con el nombre y el precio de venta de todos los productos con el
mismo precio que el del medicamento llamado HEPABIONTA.
SELECT DISTINCTROW Nombre,Precioventa FROM PRODUCTOS
(Precioventa
=
(SELECT
Precioventa
FROM
PRODUCTOS
Nombre=HEPABIONTA)
WHERE
WHERE
EJEMPLO 275
Ahora nos piden listar todas las empresas proveedoras y todas las unidades de
cada rea que han realizado un pedido en el segundo trimestre del ao 2010.
SELECT Nombres, Apellidos FROM
FROM VENTAS AS C WHERE C.Cod
EJEMPLO 277
Recuperar el cdigo del producto
detallando el nombre del producto
SELECT
DISTINCTROW
VEN
DISTINCTROW
ARTICULOS.No
ARTICULOS.Codigo = VENTAS.Cod
BY VENTAS.Codbien
EJEMPLO 278
Recuperar todos los datos de los
talla de zapato.
SELECT Nombres,cdigo FROM CLE
FROM CLIENTES WHERE Talla = CL
EJEMPLO 279
Reportar las piezas que se encuent
anterior.
SELECT Tipo,modelo,Precioventa F
Modelo FROM VENTAS WHERE Tipo
SET DATE FORMAT dmy
SELECT DISTINCTROW Nombrearea AS AREA, Nombreprov AS PROVEEDOR,
Telefono FROM DEPENDENCIAS WHERE (Codarea IN (SELECT DISTINCTROW
Codarea FROM VENTAS WHERE Fechaventa>=#04-01-2010# AND fechaventa<#0701-2010#)
CONSULTAS CON PARAMETROS
EJEMPLO 276
Seleccionar el nombre de todos los Registros que han reservado por lo menos un
pedido de un artculo en una venta.
Las consultas con parmetros son aq
mediante parmetros. Si se ejecutan
sido definidas aparecer un mensaje
Si deseamos ejecutarlas desde una
parmetros y despus ejecutarlas. Su
PARAMETERS nombre1 tipo1, nombre2 tipo2, ... , nombreN tipoN Consulta
En donde:
Parte
Descripcin
Qd.Parameters!FechaInicio = #3
Set Rs = Qd.OpenRecordset()
End Sub
Ejemplo:
nombre
Es el nombre del parmetro
tipo
Es el tipo de datos del parmetro
consulta
Una consulta SQL
Puede utilizar nombre pero no tipo de datos en una clusula WHERE o HAVING.
PARAMETERS Precio_Minimo Currency, Fecha_Inicio DateTime;
SELECT IDPedido, Cantidad FROM Pedidos WHERE Precio > Precio_Minimo AND
FechaPedido >= Fecha_Inicio;
El ejemplo siguiente muestra como utilizar los parmetros en el programa de
Visual Basic:
Public Sub GeneraConsulta()
Dim SQL As String
Dim Qd As QueryDef
Dim Rs As Recordset
SQL = "PARAMETERS Precio_Minimo Currency, Fecha_Inicio DateTime; "
SQL = SQL & "SELECT IDPedido, Cantidad FROM Pedidos WHERE Precio >
"
SQL = SQL & "Precio_Minimo AND FechaPedido >= Fecha_Inicio; "
Set Qd = BaseDatos.CreateQueryDef(MiConsulta, SQL)
Qd.Parameters!Precio_Minimo = 2
PARAMETERS [Escriba los Apellidos
WHERE [Escriba los Apellidos:] = [A
La ejecucin desde la base de dato
despus muestra los resultados
no obstante los campos no tienen p
CONSULTAS DE UNIONES EXTERNAS
datos.
Se utiliza la operacin UNION para crear una consulta de unin, combinando los
resultados de dos o ms consultas o tablas independientes. Su sintaxis es:
Se puede utilizar una clusula GRO
para agrupar los datos devueltos. P
ltimo argumento consulta para visua
[TABLE] consulta1 UNION [ALL] [TABLE]
consulta2 [UNION [ALL] [TABLE] consultan [ ... ]]
SELECT NombreCompania, Ciudad
UNION SELECT NombreCompania,
En donde:
consulta 1,consulta
2, consulta n
(Recupera los nombres y las ciudades
Son instrucciones SELECT, el nombre de una consulta almacenada
o el nombre de una tabla almacenada precedido por la palabra
clave TABLE.
Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT,
en cualquier orden, en una nica operacin UNION. El ejemplo siguiente combina una
tabla existente llamada Nuevas Cuentas y una instruccin SELECT:
TABLE NuevasCuentas UNION ALL SELECT * FROM
Clientes WHERE
CantidadPedidos > 1000
Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la
operacin UNION, no obstante puede incluir el predicado ALL para asegurar que se
devuelven todos los registros. Esto hace que la consulta se ejecute ms rpidamente.
Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos,
SELECT NombreCompania, Ciudad
UNION SELECT NombreCompania,
ORDER BY Ciudad
(Recupera los nombres y las ciudades
Peru, ordenados por el nombre de la
SELECT NombreCompania, Ciudad
UNION SELECT NombreCompania,
UNION SELECT Apellidos, Ciudad F
Norte'
(Recupera los nombres y las ciudades
apellidos y las ciudades de todos los R
Se utiliza la operacin UNION para crear una consulta de unin, combinando los
resultados de dos o ms consultas o tablas independientes. Su sintaxis es:
consulta1 UNION consulta2 UNION consulta N
En donde:
Consulta1, consulta2, consulta n Son instrucciones SELECT
Puede combinar los resultados de dos o ms consultas, instrucciones SELECT, en
cualquier orden, en una nica operacin UNION. Todas las consultas en una operacin
UNION deben pedir el mismo nmero de campos, no obstante los campos no tienen
porqu tener el mismo tamao o el mismo tipo de datos.
Se puede utilizar una clusula GROUP BY y/o HAVING en cada argumento consulta
para agrupar los datos devueltos. Puede utilizar una clusula ORDER BY al final del
ltimo argumento consulta para visualizar los datos devueltos en un orden especfico.
CRITERIOS DE SELECCIN
Antes de comenzar el desarrollo de este apartado hay que recalcar tres detalles de vital
importancia. El primero de ellos es que cada vez que se desee establecer una condicin
referida a un campo de texto la condicin de bsqueda debe ir encerrada entre comillas
simples; la segunda hace referencia a las fechas se hace necesario particularizarlas
segn el banco de datos.
Referente a los valores lgicos True o False; en estos sistemas se utilizan los campos
BIT que permiten almacenar valores de 0 1, 0 para los valores FALSE, y 1 para los
valores TRUE, se puede utilizar la sintaxis siguiente que funciona en todos los casos: si
se desea saber si el campo es falso "... CAMPO = 0" y para saber los verdaderos
"CAMPO <> 0" o CAMPO = 1.
Operadores Lgicos
Los operadores lgicos soportados por SQL son: AND, OR, NOT. A excepcin del ltimo
todos poseen la siguiente sintaxis:
<expresin1> operador <expresin2>
En donde expresin1 y expresin2 son las condiciones a evaluar, el resultado de la
operacin vara en funcin del operador lgico. La tabla adjunta muestra los diferentes
posibles resultados:
<expresin1> Operador <expresin2> Resultado
Verdad AND Falso Falso
Verdad AND Verdad Verdad
Falso AND Verdad Falso
Falso AND Falso Falso
Verdad OR Falso Verdad
Verdad OR Verdad Verdad
Falso OR Verdad Verdad
Falso OR Falso Falso
Si a cualquiera de las anteriores c
resultado de la operacin ser el cont
Ejemplos:
EJEMPLO 280
SELECT * FROM Registros WHERE
SELECT * FROM Registros WHERE
SELECT * FROM Registros WHERE
SELECT * FROM Registros WHERE
'Chimbotano' AND Estado = 'Casado')
Valores Nulos
En muchas ocasiones es necesario e
los campos. Podemos emplear el ope
ejemplo:
SELECT * FROMRegistros WHERE D
Intervalos de Valores
Para indicar que deseamos recupera
campo emplearemos el operador Betw
campo [Not] Between valor1 And valo
En este caso la consulta devolvera
incluido en el intervalo valor1, valor2 (
devolver aquellos valores no incluido
SELECT * FROM Registros WHERE
El Operador Like
Se utiliza para comparar un campo con un modelo en una expresin SQL. Su sintaxis
es:
campo Like modelo
En donde campo se compara con el modelo expresin. Se puede utilizar el operador
Like para encontrar valores en los campos que coincidan con el modelo especificado.
Por modelo puede especificar un valor completo (Ana Mara), o se puede utilizar una
cadena de caracteres comodn como los reconocidos por el sistema operativo para
encontrar un rango de valores (An%,).
El operador Like se puede utilizar en una expresin para comparar un valor de un
campo con una expresin de cadena. Por ejemplo, si introduce Like C* en una consulta
SQL, la consulta devuelve todos los valores de campo que comiencen por la letra C. En
una consulta con parmetros, puede hacer que el usuario escriba el modelo que se va a
utilizar.
La clusula WHERE
La clusula WHERE puede usarse para determinar qu registros de las tablas
enumeradas en la clusula FROM aparecern en los resultados de la instruccin
SELECT. Despus de escribir esta clusula se deben especificar las condiciones
expuestas en los apartados anteriores. Si no se emplea esta clusula, la consulta
devolver todas las filas de la tabla. WHERE es opcional, pero cuando aparece debe ir a
continuacin de FROM o INNER, LEFT RIGHT JOIN.
SELECT IdPedido, FechaPedido F
19940101 And 19941231
SELECT Apellidos, Nombre, Ciudad
Angeles', 'Barcelona')
EJEMPLO 282
Seleccionar todos los nombres de
pas de PERU, asi como los de la t
pas.
SELECT Nombre, Ruc, Pais FROM
SELECT Clientes, Ruc, Pais FROM C
EJEMPLO 283
Seleccionar todos los nombres y la
radicados en PERU, ordenados por
SELECT [Datos de Proveedores],c
PERU UNION SELECT [Datos de lo
Pais =PERU ORDER BY Ciudad
EJEMPLO 284
Seleccionar todos los nombres y la
de PERU y los apellidos y ciudades
SELECT [Nombre de la empre
Pais=PERU UNION SELECT [Apelli
=PERU
EJEMPLO 281
SELECT Apellidos, Salario FROMRegistros WHERE Salario = 21000
SELECT IdProducto, Existencias FROMProductos WHERE Existencias <=
NuevoPedido
SELECT * FROMPedidos WHERE FechaEnvio = 19943005
SELECT Apellidos, Nombre FROM Registros WHERE Apellidos = 'King'
SELECT Apellidos, Nombre FROM Registros WHERE Apellidos Like 'S%'
SELECT Apellidos, Salario FROM Registros WHERE Salario Between 200 And 300
SELECT Apellidos, Salario FROM Registros WHERE Apellidos Between 'Lon' And 'Tol'
Volviendo a dar el repaso respectivo a
considerar que as vinculaciones en
que combina registros de dos tablas
campo comn. Su sintaxis es:
SELECT campos FROM tb1 I
En donde:
tb1, tb2 Son los nombres de las tablas desde las que se combinan los registros.
campo1, campo2 Son los nombres de los campos que se combinan. Si no son
numricos, los campos deben ser del mismo tipo de datos y contener el mismo tipo de
datos,pero no tienen que tener el mismo nombre.
comp Es cualquier operador de comparacin relacional: =, <,<>, <=, =>, >.
Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea
una combinacin por equivalencia, conocida tambin como unin interna. Las
combinaciones equivalentes son las ms comunes; stas combinan los registros de dos
tablas siempre que haya concordancia de valores en un campo comn a ambas tablas.
Se puede utilizar INNER JOIN con las tablas Departamentos y Registros para
seleccionar todos los Registros de cada departamento.
Por el contrario, para seleccionar todos los departamentos (incluso si alguno de ellos no
tiene ningn empleado asignado) se emplea LEFT JOIN o todos los Registros (incluso si
alguno no est asignado a ningn departamento), en este caso RIGHT JOIN.
Tambin se pueden enlazar varias clusulas ON en una instruccin JOIN, utilizando la
sintaxis
siguiente:
SELECT campos FROM tabla1 INNER JOIN tabla2 ON ( tb1.campo1 comp
tb2.campo1 AND tb1.campo2 comp tb2.campo2 ) OR tb1.campo3 comp
tb2.campo3
WHERE alias1.columna = alias2.colum
Por ejemplo, para visualizar el nmero
nmero,nombre y puesto del supervis
sentencia:
SELECT t.num_emp, t.nombre, t.pues
AS t, Registros AS s WHERE t.num_s
AGRUPAMIENTO DE REGISTROS
GROUP BY
Combina los registros con valores id
nico registro. Para cada registro se c
agregada, como por ejemplo Sum o C
SELECT campos FROM tabla WHER
GROUP BY es opcional. Los valore
SQL agregada en la instruccin SEL
se agrupan y no se omiten. No obsta
las funciones SQL agregadas.
Si empleamos la clusula INNER en la consulta se seleccionarn slo aquellos registros
de la tabla de la que hayamos escrito a la izquierda de INNER JOIN que contengan al
menos un registro de la tabla que hayamos escrito a la derecha. Para solucionar esto
tenemos dos clusulas que sustituyen a la palabra clave INNER, estas clusulas son
LEFT y RIGHT. LEFT toma todos los registros de la tabla ubicada en FROM aunque no
tengan ningn registro en la tabla del JOIN. RIGHT realiza la misma operacin pero al
contrario, toma todos los registros de la tabla del JOIN aunque no tenga ningn registro
en la tabla del FROM.
Se utiliza la clusula WHERE para ex
clusula HAVING para filtrar los regis
Todos los campos de la lista de camp
clusula GROUP BY o como argumen
SELECT IdFamilia, Sum(Stock) AS S
Consultas de Auto combinacin
La auto combinacin se utiliza para unir una tabla consigo misma, comparando valores
de dos
columnas con el mismo tipo de datos. La sintaxis en la siguiente:
SELECT alias1.columna, alias2.columna, ... FROMtabla1 as alias1, tabla2 as alias2
por la clusula GROUP BY que satisf
HAVING es similar a WHERE, determ
registros se han agrupado utilizando
van a mostrar.
SELECT IdFamilia, Sum(Stock) AS S
Una vez que GROUP BY ha combina
registro agrupado
HAVING StockActual > 100 AND NombreProducto Like BOS%
En donde expr es el campo sobre el
el nombre de un campo de una tabla
intrnseca o definida por el usuario pe
AVG
Calcula el promedio de un conjunto de valores contenidos en un campo especificado de
una consulta. Su sintaxis es la siguiente
Avg (expr)
En donde expr representa el campo que contiene los datos numricos para los que se
desea calcular el promedio o una expresin que realiza un clculo utilizando los datos
de dicho campo. El promedio para Avg se calcula asi: la suma de los valores dividido
por el nmero de valores). La funcin Avg no incluye ningn campo Null en el clculo.
SELECT Min(Gastos) AS ElMin FROM
SELECT Max(Gastos) AS ElMax FRO
SELECT Avg(Gastos) AS Promedio FROM Pedidos WHERE Gastos > 100
Count
Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente
Count(expr) En donde expr contiene el nombre del campo que desea contar. Los
operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o
una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las
funciones agregadas de SQL). Puede contar cualquier tipo de datos incluso texto.
Aunque expr puede realizar un clculo sobre un campo, Count simplemente cuenta el
nmero de registros sin tener en cuenta qu valores se almacenan en los registros. La
funcin Count no cuenta los registros que tienen campos null a menos que expr sea el
carcter comodn asterisco (*). Si utiliza un asterisco, Count calcula el nmero total de
registros, incluyendo aquellos que contienen campos null. Count(*) es
considerablemente ms rpida que Count(Campo). No se debe
poner el asterisco entre dobles comillas ('*').
SELECT Count(*) AS Total FROMPedidos
Max, Min
Devuelven el mximo o el mnimo de un conjunto de valores contenidos en un campo
especifico de una consulta. Su sintaxis es:
Min(expr)
Max(expr)
Sum
Devuelve la suma del conjunto de v
consulta. Su sintaxis es:
Sum(expr)
En donde expr representa el nombr
sumarse o una expresin que realiza
Los operandos de expr pueden in
constante o una funcin (la cual pue
otras de las funciones agregadas de S
SELECT Sum(PrecioUnidad * Cantida
SUBCONSULTAS
Una subconsulta es una instrucci
SELECT,
SELECT...INTO, INSERT...INTO, DE
Puede utilizar dos formas de sintaxis
expresin [NOT] IN (instruccin sql) [
En donde:
Expression Es una expresin por
subconsulta.
Es una instruccin SELECT, que sigu
otra instruccin SELECT. Debe ir entr
Se puede utilizar una subconsulta en
una instruccin SELECT o en una cl
utiliza una instruccin SELECT para
especificados para evaluar en la expr
El predicado IN se emplea para recu
principal para los que algunos regis
ejemplo siguiente devuelve todos los productos vendidos con un descuento igual o
mayor al 25 por ciento:
SELECT * FROM Productos WHERE IDProducto IN ( SELECT Improducto FROM
DetallePedido WHERE Descuento = 0.25 )
Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de
la consulta principal para los que no hay ningn registro de la subconsulta que contenga
un valor igual.
El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en
comparaciones de verdad/falso para determinar si la subconsulta devuelve algn
registro. Supongamos que deseamos recuperar todos aquellos clientes que hayan
realizado al menos un pedido:
SELECT Clientes.Compaa, Clientes.Telfono FROM Clientes WHERE EXISTS (
SELECT * FROM Pedidos WHERE Pedidos.IdPedido = Clientes.IdCliente )
Esta consulta es equivalente a esta otra:
SELECT Clientes.Compaa, Clientes.Telfono FROM Clientes WHERE IdClientes IN (
SELECT Pedidos.IdCliente FROM Pedidos )
Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse
a tablas listadas en la clusula FROM fuera de la subconsulta. El ejemplo siguiente
devuelve los nombres de los Registros cuyo salario es igual o mayor que el salario
medio de todos los Registros con el mismo ttulo. A la tabla Registros se le ha dado el
alias T1:
SELECT Apellido, Nombre, Titulo, Salario FROM Registros AS T1 WHERE Salario = (
SELECT Avg(Salario) FROM Registros WHERE T1.Titulo = Registros.Titulo )
ORDER BY Titulo
En el ejemplo anterior, la palabra reservada AS es opcional.
SELECT Apellidos, Nombre, Cargo, Salario FROM Registros WHERE Cargo LIKE
'Agente Ven%' AND Salario > ( SELECT Salario FROM Registros WHERE Cargo LIKE
'%Jefe%' OR Cargo LIKE '%Director%' )
(Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo
salario es mayor que el de todos los jefes y directores.)
SELECT DISTINCT NombreProdu
PrecioUnidad = ( SELECT PrecioUni
'Almbar anisado' )
(Obtiene una lista con el nombre y el
precio que el almbar anisado.)
EJEMPLO 285
SELECT DISTINCT NombreContacto, N
Clientes WHERE IdCliente IN ( SELECT
WHERE FechaPedido < 19930701 )
(Obtiene una lista de las compaas y
realizado un
pedido en el segundo trimestre de 199
SELECT Nombre, Apellidos FROM R
Pedidos AS O WHERE O.IdEmpleado
(Selecciona el nombre de todos los R
SELECT
DISTINCT
Pedidos.Id
roductos.Nombre FROM Productos W
) AS ElProducto FROM Pedidos
Pedidos.Id_Producto
(Recupera el Cdigo del Producto y l
el nombre del producto de la tabla de
SELECT NumVuelo, Plazas FROM
SELECT T1.NumVuelo FROM Vue
T1.NumVuelo=Vuelos.NumVuelo )
(Recupera nmeros de vuelo y cap
plazas libres
EJEMPLO 286
Acceder a la base de datos externa llamada REGISTRO.MDB, y seleccionar los
registros de la tabla clientes cuyo codigo empiece con A
--------------------------------------------------
SELECT Codigo FROM CLIENTES IN REGSITRO.MDB WHERE Codigo LIKE A*
EJEMPLO 288
Devolver un conjunto de resulta
DEPARTAMENTO, especificando e
como TRUE al emplear EXISTS
EJEMPLO 287
Recuperar los datos de la tabla PARADOX Version 3.X , con las mismas
condiciones del ejemplo anterior
Pues, debemos saber que para recuperar los datos de 3.X hay que sustituir por
PARADOX 4.X
SELECT Codigo FROM CLIENTES IN C:\PARADOX\BD\VENTAS PARADOX 4.X;
WHERE Codigo LIKE A*
OMITIR PERMISOS DE EJECUCION
En entornos de base de datos con permisos de seguridad para grupos de trabajo se
pueden emplear la clausula WITH OWNERACCES OPTION para que el usuario actual
adquiera los derechos a la hora de actualizar y ejecutar la consulta.
Pues en este caso ejemplo el cual vamos a considerar es que primero vamos a declarar
el acceso al fichero de grupo de trabajo (generalmente SYSTEM.MDA o
SYSTEM.MDW) de la base de datos vigente.
INSTRUCCION SQL WITH OWNERACCES OPTION
SELECT Apellido, Nombre,Gastos FROM REGISTROS ORDER BY Apellido WITH
OWNERACCES OPTION
PROCEDURE
Esta clausula es poco usual y se usa para crear una consulta a la misma vez que se
ejecuta.
SINTAXIS:
PROCEDURE Nombre de la consulta Parametro1 Tipo1, Tipo2tipo N
--------------------------------------------------
Use Master
SELECT Codigo, Nombres FROM
NULL) ORDER BY 2
EJEMPLO 289
Comparar consultas mediante EXI
dos consultas que sean semantica
emplee EXISTS y en la segunda IN
lladas PERSONAL y DETALLE, cuy
datos RRHH, y a esta busqueda
apellidos PEREDA
EMPLEANDO EXISTS
SELECT A.Nombres,A.Apellidos FR
(SELECT * FROM RECURSOS.Det
AND A.Apellidos =PEREDA
-----------------------------------AHORA EMPLEANDO IN
SELECT A.Nombres,A.Apellidos FRO
IN (SELECT A.Apellidos FROM R
=B.codubicacion AND A.Apellidos =P
EJEMPLO 290
Ahora en el ejemplo siguiente de
calles cuyo nombre sea el mismo q
Cmo vamos, hasta el momento entiendes. Entonces ejemplo para el operador?
Reportar todos los productos y los datos de los proveedores de cualquier
combinacin de partes suministradas por la empresa cuyo nombre empiece por la
letra H y el precio de venta sea mayor a 10,000.
SELECT DISTINCT B.Nombre, FROM
* FROM CONTROL.REGISTRO AS D
Observemos que hemos trabajado en el ejemplo anterior con dos bases de datos
diferentes donde en cada base de datos esta cada una de las tablas que hemos
trabajado.
EJEMPLO 291
Localizar todos los Registros de las diferentes reas que comiencen con M
SELECT B.Nombres,B.apellidos,C.area FROM PERSONAL.PADRON AS B JOIN
DEPARTAMENTO AS C ON C.AREA =B.AREA WHERE EXISTS (SELECT * FROM
DEPARTAMENTO.Ubicacion AS D JOIN DEPARTAMENTO.DEPART AS EDH WHERE
C.Codigo =EDH.Codigo AND D.Nombre LIKE M%
REPASO
EJEMPLO
Recupre todos los registros de
considerando que sean exclusivam
considerando qe ambos estn relac
SELECT Nombre, Ruc, Pais FROM
SELECT Clientes,Ruc,Pais FROM CL
GUNE
DATEDIFF (Transact TSQL)
Se utiliza la operacin UNION para crear una consulta de uni
Del capitulo V sobre las funciones de fecha tenemos :
Devuelve el recuento (entero con firma) de los lmites datepart que se han cruzado entre
los valores startdate y enddate especificados.
Sintasix:
DATEDIFF ( datepart , startdate , enddate )
datepart = Obtener la diferencia en (Aos, Meses, Dias, Horas, Minutos o Segundos )
entre dos fechas.
startdate = Fecha Inicial
enddate = Fecha Final
Ejemplos en sql:
select DateDiff(minute, '2009/08/01', '2009/08/05') as DiferenciaMinutos
select DateDiff(hour, '2009/08/01', '2009/08/05')as DiferenciaHoras
select DateDiff(day, '2009/08/01', '2009/08/05') as DiferenciaDias
select DateDiff(second, '2009/08/01', '2009/08/05') as DiferenciaSegundos
select DateDiff(month, '2009/08/01', '2009/08/05') as DiferenciaMes
select DateDiff(year, '2008/08/01', '2009/08/05') as DiferenciaAnnio
SQL DINAMICO T-SQL
Transact SQL (TSQL) es el le
Procedures Triggers Querys
Sin dudas que TSQL no dispone
puede tener un lenguaje como C#
NUMERANDO REGISTROS (ROW
En muchas ocasiones es necesar
de registro o tambin poder gene
operaciones no eran tan simples
directas. Apartir de TSQL 2005 d
cuales nos hacen el trabajo much
trata ello.
Row_Number: Esta nueva funcin de TSQL nos permitir numerar los
resultados de una query.
A las funciones de numeracin como Row_number() le podemos agregar la
clusula Partition la cual nos permitir numerar pero haciendo un corte y
reiniciando el numerador a partir de ese corte. En el siguiente ejemplo hacemos
uso de ello:
Control de Errores:
Apartir de Tsql 2005 incorpora al control de errores los bloques TRY..CATH. La
administracin de errores de esta manera es conocida por los desarrolladores
de la actualidad ya que .NET administra de la misma manera.
DDL TRIGGERS
En la versin 2000 de MS
(Desencadenadores) DML para
Apartir de SQL 2005 incorpora un
los cuales pueden tener efecto
CREATE TABLE.
Los DDL triggers son una nueva
nos permitir desde ahora poder
as tambin poder realizar auditori
ERROR_LINE() : Retorna el nmero de lnea donde se genero el error. El
resultado es NULL cuando el error se genero fuera del bloque Try.
ERROR_MESSAGE(): Retorna el texto del error.
ERROR_PROCEDURE(): Retorna el nombre del Procedimiento Almacenado o
el Trigger desde donde se ha generado el error en el bloque Try Catch
ERROR_SEVERITY(): Retorna la severidad del error
MAX para las columnas dinmicas
Recordemos que en SQL se encuentra una diversidad de caracteristicas tales
en etse caso como MAX que son Registros para los tipos de datos VARCHAR,
NVARCHAR y VARBINARY. La idea de esta caracterstica es poder ampliar la
capacidad de estos tipos de datos. En sql2000 estos tipos de datos disponan
un mximo de 8000 y 4000 (para los Nvarchar), con MAX se puede almacenar
hasta 2GB de informacin en estos tipos de datos. La idea seria reemplazar
donde se pueda este tipo de datos por los viejos IMAGE , TEXT y NTEXT.
TRIGGERS SQL SERVER 2008
Un ejemplo de triggers para el cont
USE master
GO
IF EXISTS (SELECT NOMBRES FRO
WHERE nombres = StockArtic
BEGIN
DROP DATABASE StockArticulos
END
CREATE DATABASE StockArticulos
GO
USE StockArticulos
GO
CREATE TABLE dbo.Articulos (ID INT PRIMARY KEY,
GROUP BY ARTICULO_ID
NOMBRE VARCHAR(100),STOCK DECIMAL(18,2))
)T
GO
ON
CREATE TABLE dbo.Movimientos
A.ID = T.ARTICULO_ID
(TRANSACCION INT,FECHA DATEDEFAULT(GETDATE()),ARTICULO_ID INT FOREI
END
GN KEY
GO
REFERENCES DBO.ARTICULOS(ID),CANTIDAD DECIMAL(18,2),
CREATE TRIGGER dbo.Movimientos
TIPO CHAR(1) CHECK (TIPO =I OR TIPO = O))
FOR DELETE
GO
AS
Insertamos registros a la tabla Articulos
BEGIN
INSERT
No retorna el mensaje de cantid
INTO dbo.Articulos(ID,NOMBRE,STOCK) VALUES (1,Monitores,0),(2,CPU,0),(3,Mou
SET NOCOUNT ON
se,0)
UPDATE dbo.Articulos
GO
SET STOCK = STOCK T.PARCIAL
Creamos los triggers para tener actualizado los articulos
FROM dbo.Articulos A
CREATE TRIGGER dbo.MovimientosInsert ON dbo.Movimientos
INNER JOIN
FOR INSERT
( SELECT ARTICULO_ID,
AS
SUM(CASE WHEN TIPO=I THEN
BEGIN
AS PARCIAL FROM DELETED
No retorna el mensaje de cantidad de registros afectados
GROUP BY ARTICULO_ID
SET NOCOUNT ON
)T
UPDATE DBO.ARTICULOS
ON
SET STOCK = STOCK + T.PARCIAL
A.ID = T.ARTICULO_ID
FROM DBO.ARTICULOS A
END
INNER JOIN
GO
( SELECT ARTICULO_ID,
Probemos el ejercicio
SUM(CASE WHEN TIPO=I THEN CANTIDAD ELSE -CANTIDAD END)
Mostremos el Stock actual
AS PARCIAL FROM INSERTED
SELECT A.ID,A.NOMBRE,A.STOCK
Insertemos un registro para el articulo 1
Mostremos el stock actual de la ta
INSERT INTO dbo.Movimientos
SELECT A.ID,A.NOMBRE,A.STOCK
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO)
VALUES (1,1,GETDATE(),100,I')
Mostremos el Stock actual para el ID 1
SELECT A.ID,A.NOMBRE,A.STOCK FROM dbo.Articulos A WHERE A.ID = 1
Insertemos otros registros
EJEMPLO 292
Diga usted como mostrar una cade
DECLARE @SQL NVARCHAR(100)
SET @SQL =SELECT Codi
Exec (@SQL)
INSERT INTO dbo.Movimientos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO)
VALUES (2,1,GETDATE(),10,I'), (3,1,GETDATE(),5,O'), (4,2,GETDATE(),5,I')
Mostremos el Stock actual para el ID 1
SELECT A.ID,A.NOMBRE,A.STOCK FROM dbo.Articulos A WHERE A.ID = 1
Eliminemos la transaccion (1) de cantidad = 100
DELETE FROM dbo.Movimientos WHERE TRANSACCION = 1
Eliminemos la transaccion (3) de cantidad = 5
Tambin con SQL dinamico podemo
TABLE
DECLARE @SQL =CREATE TAB
VARCHAR(40))
EXEC (@SQL)
SET @SQL =SELECT * FRO
EXEC (@SQL)
El principal inconveniente de trabajar
de parametros, adems el uso de la
de rendimiento que SP_ECECUTESQ
DELETE FROM dbo.Movimientos WHERE TRANSACCION = 3
Mostremos el stock actual de la tabla Articulos
EL PROCEDIMIENTO ALMACENAD
SELECT A.ID,A.NOMBRE,A.STOCK FROM dbo.Articulos A
Para ejecutar SQL Dinamico se re
SP_EXECUTESQL en lugar de una is
Eliminamos todos los movimientos realizados
DELETE FROM dbo.Movimientos
ALTER TABLE dbo.Movimientos DISABLE TRIGGER ALL
DECLARE @SQL NVARCHAR(100)
SET @SQL = SELECT Codig
EXEC SP_EXECUTE@SQL
Mostremos lo que pasa se insertamos un registro en la tabla
EJEMPLO 293
Deshabilitar los triggers
Movimientos que tiene deshabilitados los triggers
INSERT INTO dbo.Movimientos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO)
VALUES (1,1,GETDATE(),100,I')
Ahora como ya hemos visto el uso
que avise a la base WEB con un em
WEB.
Pues lo primero es declarar dos variables, una de ellas es para el mensaje que se
enviara al email y la otra sera para obtener el ID del registro para luego conectarla al
mensaje y enviarlo.
SELECT b.Idcodigo AS CODIGO DE
FROM VENTAS AS b INNER JOIN
c.Almacen =ALMACEN SIABA GRO
EJEMPLO 294 SUB CONSULTAS ANIDADAS
EJEMPLO 298
Mostrar todas las ventas que se hayan ejecutado y adquirido el articulo PERNOS
3/8, para esto vamos a considerar que tenemos tres tablas las cuales son :
VENTAS, MOVIMIENTOS DE VENTAS y PRODUCTOS.
Listar todos los nombres de los
cantidades de ventas efectuadas p
tablas llamadas OPERARIOS y VEN
SELECT IdCodigo,fecha, UnidadMedida FROM VENTAS WHERE Idcodigo IN (SELECT
Idocidog FROM [MOVIMIENTOS DE VENTAS] WHERE Idcodigo IN (SELECT Codigo
FROM PRODUCTOS WHERE Descripcion =PERNOS 3/8
SELECT b.Nombres, COUNT(c.Cod
OPERARIOS AS b INNER JOIN VEN
BY c.Codvendedor, b.Nombres ORDE
EJEMPLO 295 SUB CONSULTAS ANIDADAS
EJEMPLO 299
Diga usted ahora como mostrar todos los clientes que compraron los pernos de
3/8
Mostrar todos los datos de los alum
semestral de estudios dentro de la
SELECT Nombres,apellidos, FROM CLIENTES WHERE Idcodcli IN (SELECT Idcodcli
FROM VENTAS WHERE Idcodbien FROM ARTICULOS WHERE Descripcion
=PERNOS 3/8
SELECT b.Nombres, b.Apellidos, CO
FROM MATRICULADOS AS c INNER
EJEMPLO 296 (REPASO)
CREATE RULE (Transact-SQL)
Listar cuantos articulos existen por categoria, debiendo considerar que tenemos
dos tablas llamadas ALMACEN y VENTAS
SELECT b.Categoria, COUNT(c.Codigo) AS CANTIDAD FROM ALMACEN AS b
INNER JOIN VENTAS AS c ON (b.Idcateg = c.Codcategoria ) GROUP BY
c.Codcategooria, c.Nombrecategoria
EJEMPLO 297
Listar la cantidad de ventas efectuadas por cada producto que son del almacen
ALMACEN SIABA, considerando qque tenemos dos tablas denominadas VENTAS y
ARTICULO.
Crea un objeto denominado regla. Cu
de alias, la regla especifica los valore
columna.
Argumentos
schema_Nombres
Es el nombre del esquema al
rule_Nombres
Es el nombre de la nueva regla. Los nombres de las reglas deben ajustarse a
las reglas de los identificadores. La especificacin del propietario de la regla es
opcional.
condition_expression
Es la condicin o condiciones que definen la regla. Una regla puede ser
cualquier expresin vlida en una clusula WHERE y puede incluir elementos
como operadores aritmticos, operadores relacionales y predicados (por
ejemplo, IN, LIKE, BETWEEN). Una regla no puede hacer referencia a
columnas u otros objetos de base de datos. Se pueden incluir funciones
integradas que no hagan referencia a objetos de base de datos. No es posible
utilizar funciones definidas por el usuario.
condition_expression incluye una variable. El carcter arroba (@) precede a
cada variable local. La expresin hace referencia al valor especificado con la
instruccin UPDATE o INSERT. Se puede utilizar cualquier nombre o smbolo
para representar el valor cuando se crea la regla, pero el primer carcter debe
ser la arroba (@).
Nota:
Evite crear reglas en expresiones que utilicen tipos de datos de alias. Aunque es
posible crear reglas en expresiones que utilicen tipos de datos de alias, despus de
enlazar las reglas a las columnas o a los tipos de datos de alias, cuando se hace
referencia a las expresiones, stas no se compilan.
Notas
CREATE RULE no se puede combinar con otras instrucciones Transact-SQL en un
nico lote. Las reglas no se aplican a los datos ya existentes en la base de datos en el
momento en que se crean las reglas y no se pueden enlazar a los tipos de datos del
sistema. Para obtener ms informacin,
Una regla slo se puede crear en la
ejecute sp_bindrule para enlazarla a
regla debe ser compatible con el tip
LIKE A%" no se puede utilizar como
puede enlazar a una columna con u
nvarchar(max), varbinary(max), xm
regla no se puede enlazar a una colum
Incluya las constantes de fecha y de
constantes binarias de 0x. Si la regla
enlazado, el Motor de base de dato
cuando se inserta un valor, pero no cu
Una regla enlazada a un tipo de d
actualizar o insertar un valor en una
alias. Dado que las reglas no prueban
tipo de datos de alias que sera rech
mismo tipo de datos.
Para obtener un informe sobre una re
de una regla, ejecute sp_helptext c
cambiar el nombre de una regla, utilic
Una regla debe quitarse mediante DR
nombre y debe cancelarse el enlace
sp_unbindrule para cancelar el enlac
Una nueva regla se puede enlazar a
de la anterior; la nueva regla anula la
tienen prioridad sobre las enlazadas
columna sustituye una regla ya enlaz
embargo, el enlace de una regla a u
una columna de ese tipo de datos
cuando se enlazan reglas a columna
reglas.
EJEMPLO 300
CREATE RULE RG_VEHICULOS_TI
Crear una tabla llamada ESTACION donde ingresen los vehiculos en una playa de
estacionamiento, donde el cual vamos a asociar reglas dentro de ellas.
EJEMPLO 304
Ahora asociaremos la regla creada
IF OBJECT_Id (VEHICULOS) IS NOT NULL
DROP TABLE VEHICULOS;
- - Eliminamos las reglas creadas en la tabla
IF OBJECT_Id (RG_PATENTE_PATRON) IS NOT NULL
DROP RULE RG_PATENTE_PATRON;
IF OBJECT_Id(RG_FECHA_HORA) IS NOT NULL
DROP RULE RG_FECHA_HORA;
SP_BRINRULE RG_VEHICULOS_TIP
Ahora creamos la tabla:
CREATE TABLE VEHICULOS(
Patente
char(10) NOT NULL,
Tipo
char(1), - - a = auto, m= moto
Domicilio
varchar(30) NOT NULL,
Fechaing
datetime NOT NULL
);
EJEMPLO 306
Si la asociamos a un campo que
reemplaza a la asociacion anterior
campo TIPO
EJEMPLO 301
Crear una regla en una tabla llamada VEHICULOS para restingir los valores que se
pueden ingresar en un campo PATENTE que contenga tres letras seguidas de tres
digitos
EJEMPLO 307
Crear una regla que permita ingre
dia.
CREATE RULE RG_PATENTE_PATRON AS @patente LIKE [A-Z][A-Z][A-Z][0-9][0-9]
[0-9]
EJEMPLO 302
Ahora asociaremos la regla creada al campo PATENTE de la tabla anterior llamada
VEHICULOS
EJEMPLO 305
Crear una regla llamada RG_VEHIC
campo TIPO para que solamente pu
CREATE RULE RG_VEHICULOS_TI
SP_BRINRULE RG_VEHICULOS_TIP
CREATE RULE RG_menor_fecha AS
EJEMPLO 308
Ahora intente establecer una restri
de llegada no sea posterior a la hor
SP_BRINRULE RG_PATENTE, Vehiculos.patente;
ALTER TABLE VEHICULOS
ADD CONSTRAINT CHK_VEHICULO
SP_HELPCONSTRAINT VEHICULOS
EJEMPLO 303
Crear una regla que controle los valores para el campo TIPO para que solamente
puedan ingresar las letras M y H
EJEMPLO 309
Crear una regla para establecer un
campo PATENTE dos letras seguid
CREATE RULE RG_Vehiculos_Patente AS @Valor LIKE [A-Z][A-Z][0-9][0-9];
EJEMPLO 310
Asocie la regla anterior al campo patente
DROP DEFAULT Vp_vehiculo
EXEC SP_BRINDRULE RG_Vehiculos_patente, Vehiculos.patente;
EJEMPLO 316
Supongamos que tenemos una tab
una regla para impedir que se ingre
luego asociemos la regla al campo
EJEMPLO 311
Crear un valor predeterminado para el campo PATENTE (MHPP) llamado
VP_VEHICULO_PATENTE
CREATE RULE RG_POSOTIVO
AS @valor>=0;
EXEC SP_BRINDRULE RG_POSITIV
CREATE DEFAULT VP_VEHICULO_PATENTE AS MHPP;
EJEMPLO 316
Ahora del mismo ejemplo anterior a
EJEMPLO 312
Asociar al campo patente
EXEC SP_BRINDRULE RG_POSITIV
EXEC SP_BRINDEFAULT VP_Vehiculo_patente, Vehiculo.patente;
EJEMPLO 313
Crear un valor predeterminado con la cadena ?? llaamdo VP_datoincognito
CREATE DEFAULT VP_Datoincognito AS ??;
EJEMPLO 314
Asocie el valor predeterminado anterior al campo domicilio
EXEC SP_BRINDEFAULT
VP_datoincognito, Vehiculo.domicilio
ELIMINAR VALORES PREDETERMINADOS
EJEMPLO 315
Recordemos que si eliminamos una tabla, las asociaciones de reglas y valores
predeterminados de sus campos desaparecen, pero las reglas y valores
predeterminados siguen existiendo. Entonces Cmo eliminamos un valor
predeterminado?
IF OBJECT_ID(Vp_vehiculo.patente) IS NOT NULL
EJEMPLO 317-318
En este ejemplo crearemos un val
cero llamado VP_CERO en la colum
CREATE DEFAULT VP_CERO AS 0
EXEC SP_BRINDEFAULT VP_CERO
EJEMPLO 319 -320
De la misma manera ahora creare
MOVIMIENTO llamado VP_MOVIMIE
al campo PAGINAS
CREATE DEFAULT VP_MOVIMIENT
EXEC SP_BRINDEFAULT VP_MOV
EXEC SP_BRINDEFAULT VP_MOV
EJEMPLO 321
Ahora visualice usted y vea las reg
SP_HELP;
EJEMPLO 322
Diga usted como visualizar las reglas y valores predeterminados asociados a la
tabla librera.
Table - dbo.Registro
Id Nombres
100 Harumi Pereda
SP_HELPCONSTRAINT librera;
EJEMPLO 323
Ahora diga usted como quitar la asociacion del valor predeterminado VP_CERO al
campo precio que se encuentra en la tabla libreria
EXEC SP_UNBNIDEFAULT librera,precio;
EJEMPLO 324
Verificar que el valor predeterminado VP_CERO existe aun
SP_HELP Vp_cero;
EJEMPLO 325
Quite la asociacion del valor predeterminado VP_CERO al campo CANTIDAD y
luego verifique que ya no existe la asociacion de este valor predeterminado en la
base de datos.
EXEC SP_UNBINDEFAULT librera.cantidad;
SP_HELPCONSTRAINT librera;
CONSULTAS RECURSIVAS USANDO SQL SERVER
101
102
103
104
105
106
107
108
109
110
Mariluisa Pascal
Cesar Pereda
Carlos Lopez
Wilmer Pereda
Maria Torres
Juana Torres
Cintia Pereda
Julia Lopez
Maria Lopez
Gune Pereda
Esta forma de almacenar es bas
flexibilidad, puesto que no tiene limi
tampoco en la cantidad de hijos que
no contienen informacin repetida ent
a partes de la jerarqua sin afectar al r
Las desventajas aparecen cuando se
puesto que no es posible realizar un
toda o parte de la jerarqua.
Definiendo la siguiente funcin:
Las jerarquas son muy comunes en los sistemas de informacin, se utilizan para
organizar elementos por orden de importancia o por tamao.
Para almacenar este tipo de estructuras en la base de datos se utiliza lo que se conoce
como lista de adyacencia, en donde cada nodo de la jerarqua guarda el Id del nodo
padre.
CREATE FUNCTION [dbo].[GetIdReg
RETURNS @retRegistros TABLE (Id
AS
BEGIN
DECLARE @RegistrosDirectos_Id
DECLARE RegistrosDirectos CURS
SELECT Id FROM dbo.Registro WHERE Codigoubica=@Codigoubica
Common Table Expressions (Recurs
sin tener que definir una funcin para
INSERT INTO @retRegistros VALUES(@Codigoubica)
OPEN RegistrosDirectos
FETCH NEXT FROM RegistrosDirectos
INTO @RegistrosDirectos_Id
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO @retRegistros
SELECT * FROM dbo.GetIdRegistros(@RegistrosDirectos_Id)
FETCH NEXT FROM RegistrosDirectos
INTO @RegistrosDirectos_Id
END
CLOSE RegistrosDirectos
DEALLOCATE RegistrosDirectos
RETURN
END
Esta funcin es capaz de devolver todos los identificadores de los Registros que
reportan directa o indirectamente a una persona. Utilizando el resultado de esta funcin
es posible responder a la consulta Cual es el Gasto total de Mariluisa Pascal, primero
buscando el Id de Mariluisa Pascal, luego llamando a la funcin GetIdRegistros con ese
Id como parmetro, realizando un join entre el resultado de la funcin la tabla empleado,
para finalmente obtener la suma de los Gastos de los Registros.
elect sum(Gastos) as GastosTotal From GetIdRegistros(
(select Id from dbo.Registro WHERE Nombre='Mariluisa Pascal')
) emp inner join dbo.Registro e on emp.Id = e.Id
A partir de SQL Server 2005 se introdujo una nueva funcionalidad al motor que facilita
aun ms el trabajo con jerarquas. Esta nueva funcionalidad se llama Recursive
WITH CTE_Registros (Id, Gastos)
AS
(
SELECT Id, Gastos FROM Emplea
UNION ALL
SELECT e.Id, e.Gastos FROM Emp
INNER JOIN CTE_Registros cte ON
)
SELECT sum(Gastos) FROM CTE_R
Esta consulta se resuelve de forma
mejor manera que es lo que se
considerable. Algunas pruebas rea
descritas mostraron que las consultas
10 veces menos que las que utilizaba
La versin de SQL Server 2008 trae
uso de las consultas sobre jerarquas
de datos llamado HierarchyID, ex
almacenamiento y manipulacin de je
OrdPath
Los OrdPaths son una forma de codif
del rbol al que pertenece. En esta
hijo en el rbol, obteniendo algo simil
que est en el tercer nivel de la jerarq
primer hijo de la raz.
Otra ventaja de esta codificacin es
OrdPaths se obtienen los nodos del
first) y si se ordenan utilizando el nivel y el OrdPath en un ndice compuesto, se obtienen
los nodos ordenados en orden ancho primero (Breadth-first).
Ahora se deben asignar los valores co
deben utilizar los mtodos definidos G
Pero esta codificacin retorna una cadena de caracteres, lo que no es muy eficiente en
cuanto a almacenamiento y distribucin. Es por eso que se dise una forma de guardar
los OrdPaths en formato binario el cual es realmente eficiente en cuanto a
requerimientos de espacio y tiene gran ventaja de mantener todas las propiedades
antes mencionadas.
Lo primero es obtener el valor corresp
update empleado set jerarquia=hier
Luego se asigna el valor del primer hi
Como trabajar con los HierarchyId
Siguiendo con el ejemplo del artculo anterior, se toma la tabla empleado y se le agrega
una columna de tipo HierarchyId y opcionalmente una columna calculada que describe
el nivel de la jerarqua.
update empleado set jerarquia=hier
.GetDescendant(null, null) wher
Luego se asigna el valor del segundo
indicar si el hijo va a ir antes o despu
mantienen el orden entre los hijos, a
hijo.
update empleado set jerarquia=hier
.GetDescendant((select jerarqu
update empleado set jerarquia=hier
.GetDescendant((select jerarqu
update empleado set jerarquia=hier
.GetDescendant((select jerarqu
Para agregar un hijo a un nodo no ra
update empleado set jerarquia=(sele
.GetDescendant(null, null) wher
update empleado set jerarquia=(sele
.GetDescendant(null, null) wher
update empleado set jerarquia=(sele
.GetDescendant((select jerarqu
update empleado set jerarquia=(select jerarquia from empleado where id=7)
.GetDescendant(null, null) where id=9
Es importante destacar que todas las llamadas a los mtodos del HierarchyId nunca
acceden a los datos de la tabla para contestar, por lo que para los mismos parmetros
de entrada siempre se obtendr el mismo resultado. Esto puede parecer muy obvio pero
es importante ya que durante la creacin de los HierarchyId no se garantiza la correcta
operacin en ambientes concurrentes, por lo cual es responsabilidad de la aplicacin
controlar esta situacin.
Como hacer consultas utilizando los HierarchyId
Es en esta parte del proceso donde se obtienen los mayores resultados, puesto que el
optimizador de consultas es capaz de transformar las llamadas a IsDecendent y
GetAncestor en operaciones mucho ms eficientes.
Esto:
WHERE @value.IsDescendant(Jerarquia)
Se transforma en:
WHERE Jerarquia >= @Value AND Jerarquia <= @Value.DescendantLimit()
DescendantLimit es el valor mximo que puede tener un hijo de este nodo, lo que es
solo un clculo aritmtico.
Como se ve en esta transformacin si existe el ndice sobre el campo Jerarquia es
posible resolver la consulta de forma muy eficiente.
En el caso del mtodo GetAncestor ocurre algo similar,
Se transforma en:
WHERE Jerarquia >= @Value AND
AND Jerarquia.GetAncestor(1) =
Esta consulta utiliza el ndice sobre J
ser ancestros de @value. Pero s
Jerarquia, conocido como ndice d
transforma en lo siguiente:
WHERE Jerarquia >= @value AND
AND @value.GetLevel()+1 = Je
Es importante destacar que esta co
requiere de recursividad para resolver
Para comparar la forma de recupera
2005 (Recursive Common Table Exp
se muestran 2 consultas que obtienen
SQL Server 2005
WITH CTE_Registros (Id, Gastos)
AS
(
SELECT Id, Gastos FROM Emple
UNION ALL
SELECT e.Id, e.Gastos FROM Em
INNER JOIN CTE_Registros cte
)
SELECT sum(Gastos) FROM CTE_R
Esto:
WHERE Jerarquia.GetAncestor(1) = @value
SQL Server 2008
SELECT sum(Gastos) FROM Empleado
WHERE (SELECT jerarquia FROM Empleado WHERE Nombre = 'Mariluisa Pascal')
.IsDescendant(Jerarquia) = 1
O esto que es equivalente a la consulta anterior
DECLARE @Jefe HIERARCHYID
SELECT @Jefe=jerarquia FROM Empleado
WHERE Nombre = 'Mariluisa Pascal'
SELECT nombre, jerarquia.ToString() Jerarquia, jerarquia.GetLevel() Nivel FROM
Empleado
WHERE @Jefe.IsDescendant(Jerarquia) = 1
Limitaciones
Pero lamentablementes, no todo puede ser tan bueno. Los HierarchyId no representan
un rbol automticamente, lo que significa que cada fila almacena la informacin sobre
la posicin que tiene en el rbol, algo que no garantiza que se pueda generar un rbol al
tomar todas las filas, puesto que puede haberse borrado un nodo padre o puede existir
ms de un nodo con el mismo HierarchyId.
Tambin es necesario controlar la concurrencia y la unicidad de los HierarchyId, puesto
que la base de datos no controla estos aspectos, sin embargo, siempre se puede definir
un ndice o un constraint que garanticen la unicidad.
Por ltimo, a diferencia de las referencias a otras entidades tradicionales (foreign key),
los HierarchyId no mantienen la integridad referencial, lo que permitira eliminar un nodo
que era padre de otros nodos sin que la base de datos lance un error.
Conclusiones
Los HierarchyId son una nueva y p
todas las aplicaciones que requieran
organigrama, una lista de materiales
directorios.
EJEMPLO 326 -329
En la universidad se tiene dos tab
llamada SEMESTRE, diga usted :
Eliminar si existe
Crear las tablas
Establecer una restriccin
cascada para actualizacione
IF OBJECT_ID(ALUMNOS) IS NOT
DROP TABLE ALUMNOS
IF OBJECT_ID(SEMESTRE) IS NOT
DROP TABLE SEMESTRE
CREATE TABLE ALUMNOS(
Codigo
Int
Identity,
Nombres
Varchar (40),
Domicilio
Varchar(20),
Semestre
Tinyint,
PRIMARY KEY (Codigo)
);
CREATE TABLE SEMESTRE(
Codigo
Tinyint,
Descripcion
Varchar(40),
PRIMARY KEY (Codigo)
);
ALTER TABLE ALUMNOS
ADD CONSTRAINT FK_Alumnos_sem
FOREIGN KEY (Semestre) R
ON UPDATE CASACADE
ON DELETE NO ACTION;
EJEMPLO 330
En una empresa existen registros de datos, de los cuales tenemos las siguientes
tablas
CREATE TABLE PROFESORES(
Documento
char(6)
NOT NULL,
Nombre
Varchar(40),
Domicilio
Varchar(60),
CONSTRAINT CHK_Profesores_documento CHECK (documento LIKE [0-9] [0-9] [0-9]
[0-9] [0-9] [0-9]),
CONSTRAINT PK_Profesores_documento
PRIMARY KEY (documento)
);
CREATE TABLE DEPORTES(
Codigo
Tinyint
Identity,
Nombre
varchar(40)
NOT NULL,
Dias
Varchar(40) CONSTRAINT DF_Deportes_dia DEFAULT (Lunes),
Profesor
char(10),
- documento del profesor
CONSTRAINT CHK_Deportes_dia_lista
CHECK(dia IN (Lunes,Martes,Miercoles,Jueves, viernes)),
CONSTRAINT PK_deportes_codigo
PRIMARY KEY (Codigo)
);
CREATE TABLE SOCIOS(
Numero
int Identity,
Documento
char(6),
Nombre
Varchar(40),
Domicilio
varchar(60),
CONSTRAINT CHK_documento_orden CHECK(documento LIKE [0-9] [0-9] [0-9] [0-9]
[0-9] [0-9]),
CONSTRAINT PK_SOCIOS_Numero
PRIMARY KEY NONCLUSTERED (Numero),
CONSTRAINT UQ_Sociso_documento
UNIQUE CLUSTERED (Documento)
);
EJEMPLO 331
En una empresa existen registr
profesores, deportes, socios, ins
restricciones.
CREATE TABLE PROFESORES(
Documeno
Cha(6) OT NULL,
Nombre
Varchar(40),
Domicilio
Varchar(60),
CONSTRAINT CH_PROFESORES_D
[0-9][0-9][0-9]),
CONSTRAINT PK_Profesores_docme
);
CREA TALE DEPORTES(
Codigo
Identit,
Nombre
Varchar(40) Not Null,
Das
Vachar(40)
CONSTRAINT DF_Deportes_
Profesor
Char(10), - document
CONSTRAINT CHK_DEPORTES_DIA
Miercoles,Jueves,Viernes
CONSTRAINT PK_DEPORTES_COD
):
CREATE TABLE SOCIOS(
Numero
Int IDENTITY,
Documento
Char(6),
Nombre
Varchar(40),
Domicilio
Varchar(60),
CONSTRAINT CHK_DOCMENTO_O
[0-9][0-9][0-9]),
CONSTRAINT PK_SOCIOS_NUMER
CONSTRAINT UQ_SOCISO_DOCUM
);
CREATE TABLE INSCRITOS(
Numerosocio Int NOT NULL,
Codigodeporte Tynyint,
Matricula
Char(1),
CONSTRAINT PK_INSCRITOS_NU
(Numerosocio,Codigodeporte),
CONSTRAINT
FK_INSCRITOS_DEPORTE
FOREIGN
KEY(Codigodeporte)
REFRENCES Deportes(Codigo) ON UPDATE CASCADE,
CONSTRAIT CHK_MATRICULA_VALORES CHECK (Matricula IN(S,N))
);
EJEMPLO 336
Como repaso, ahora explique ust
tabla SOCIOS
SP_Helpconstraint SOCIOS;
EJEMPLO 332
Ejecute un JOIN para reportar todos los datos de los socios junto con el nombre
de los deportes en las cuales esta inscito, asicomo el da que tiene que asistir y el
nomre del profesor.
Select b., d.Nombre AS Deporte, d.dia, c.Nombre AS Profesor FROM SOCIOS AS b
JOIN inscritos as i ON numero=i.numerosocio JOIN deporte as d ON d.codigo =
i.codigodeporte LEFT JOIN Profesores AS c ON d.Profesor = c.Documento;
EJEMPLO 333
Ejecutar la misma operacin anterior, pero ahora incluyamos los socios que no
estn inscritos en ningn deporte.
Select b., d.Nombre AS Deporte, d.dia, c.Nombre AS Profesor FROM SOCIOS AS b
FULL JOIN inscritos as i ON numero=i.numerosocio LEFT JOIN deporte as d ON
d.codigo = i.codigodeporte LEFT JOIN Profesores AS c ON d.Profesor = c.Documento;
EJEMPLO 334
Considerando el mismo ejemplo anterior, diga usted como mostrar todos los
datos de los profesores incluyendo el deporte que dicta y el da incluido;
asimismo reportar a los profesores que no tienen asignado ningn tipo de
deporte.
Select c., d.Nombre AS Deporte, d.dia FROM Profesores AS c LEFT JOIN Deportes
AS d ON d.Profesor =c.documento;
EJEMPLO 335
Ahora mostrar todos los deportes y la cantidad de inscritos, inclusive los que no
hay inscritos
Select d.Nombre, COUNT(i.codigodeporte) AS Cantidad FROM Deportes AS d LEFT
JOIN Inscritos AS I ON d.codigo = i.codigodeporte GROUP BY d.Nombre;
REPASO
Agregar y Eliminar Campos en una
EJEMPLO 337-338-339-340
Crear una tabla llamada REGISTR
agregaremos el campo ID_COD d
Monto con tipo Decimal(10,2), al
Char(10) para finalmente concluir v
IF Object_Id (Registro) IS NOT NUL
DROP Table Registro;
CREATE TABLE Registro(
Nombres
Varchar(40),
Telefono
Varchar(20),
Domicilio
Varchar(60),
Fechacontrol Datetime2
);
ALTER TABLE Registro
Add Monto
decimal(10,2)
ALTER TABLE Registro
Add Id_cod
INT IDENTIT
ALTER TABLE Registro
Add tip_docum Char(10) NOT
SP_COLUMNS Resgistro;
EJEMPLO 341
De acuerdo al ejemplo anterior diga usted como modificar el campo Nombres
extendiendo la longitud
ALTER COLUMN Nombres Varchar(60);
EJEMPLO 342
De acuerdo al ejemplo anterior cuya tabla registro, modificar el campo Monto, para
que no admita valores nulos
ALTER COLUMN Monto Decimal(10,2) NOT NULL;
EJEMPLO 343-344-345
Elaborar una tabla llamada CONTROL, para luego agregar el Campo ORDEN de
Tipo INT IDENTITY y una restriccin PRIMARY KEY; luego agregar el campo
EST_CIVIL de tipo TINYINT y en la misma restriccin CHECK que solo permita
ingresar valores de 0 a 4.
IF Object_id(CONTROL) IS NOT NULL
DROP TABLE Control;
CREATE TABLE CONTROL (
Nombres
Varchar(40),
Direccion
Varchar(60),
Documento
char(10) NOT NULL,
Tipodocum
Varchar(16) DEFAULT DNI
);
ALTER TABLE CONTROL
ADD Orden INT identity CONSTRAINT _ORDEN PRIMARY KEY;
ALTER TABLE CONTROL
ADD Est_civil TINYINT
(EST_CIVIL LIKE 0-4);
CONSTRAINT
CHK_CONTROL_ESTCIVIL
EJEMPLO 342
Verificar la estructura si es que hubo cambios
SP_COLUMNS CONTROL;
EXEC SP_HELPCONSTRAINT CONTROL;
CHECK
MEMORIA AYUDA
SENTENCIAS ANIDADAS
SELECT anidados a sentencias INS
En ocasiones es muy til realizar
realizar consultas o filtros y he a
cascada
SELECT * FROM Categoria where
TipoCategoria where tipocategoriaNo
INSERT anidados:
Para realizar migraciones es til el
insert into Categoria(nombre,tipoId) s
tipoId<12
UPDATE anidados:
Para el mantenimiento de datos pu
update siteCategoria
set categoriaTitulo =(select categoriaT
where categoriaId=6
DATOS DEFINIDOS POR EL USUARIO Y GESTION DE INDICES TSQL
PROCEDIMIENTOS ALM ACENADOS
Indices en SQL Server
Un ndice es una estructura de datos definida sobre una columna de tabla (o varias) y
que permite localizar de forma rpida las filas de la tabla en base a su contenido en la
columna indexada adems de permitir recuperar las filas de la tabla ordenadas por esa
misma columna.
Los ndices funcionan igual que un Libro, veamos, si queremos buscar un tema
especfico tenemos 3 Opciones:
La primera consiste un ir pagina por pagina buscando la informacin hasta encontrar el
tema que requerimos; esto nos tomara mucho tiempo y esfuerzo.
La Segunda nos vamos al Indice del Libro y buscamos lo que necesitamos, eso nos
dar el numero fsico exacto del pagina del tema que buscamos nos dirigimos a l y la
bsqueda seria rpida, a esto lo llamamos ndices Clustered, serian por defecto las
llaves primarias (Primary key).
La tercera opcin siempre en el ejemplo del libro, seria nos vamos al Glosario y ah
encontraremos un conjunto de paginas donde buscar informacin sobre el tema a
investigar, a esto lo llamamos ndices NON-Clustered.
Entonces una definicin ms ortodoxa seria:
Los Clustered Indexes son ndices que controlan el orden fsico de las filas en la
tabla, por lo cual solo puede existir uno para cada tabla.
Los Non-Clustered indexes son ndices que mantienen un sub conjunto de las
columnas de la tabla en orden. Estos ndices no modifican el orden de las filas de
la tabla, en lugar de esto mantienen una lista ordenada de referencias a filas de la
tabla original.
Ventajas
La utilizacin de ndices puede mejorar el rendimiento de las consultas, ya que los datos
necesarios para satisfacer las necesidades de la consulta existen en el propio ndice. Es
decir, slo se necesitan las pginas d
ndice agrupado para recuperar los d
en el disco. Por ejemplo, una consult
de un ndice compuesto creado en
especificados del propio ndice.
Los ndices en vistas pueden mejora
contiene agregaciones, combinacion
combinaciones.
Inconvenientes
Las
tablas
utilizadas
para
Los ndices consumen recursos ya
actualizacin, insercin o borrado en
las tablas de ndice definidas sobr
actualizacin de los ndices definidos
Recomendaciones para crear indic
Las columnas que se aconseja indexa
- Las que son clave primaria o ajena
- Aquellas que se usan frecuentem
BETWEEN
- Aquellas que se usan frecuentemen
- Aquellas que se usan frecuentemen
- Aquellas que se usan frecuentemen
Procedimientos Importantes
EXEC sp_helpindex Clientes
Mostrara los ndices que contiene
Northwind
SET STATISTICS IO ON
Habilitara
La importancia de los ndices clustered
Una de las recomendaciones sobre rendimiento de SQL Server ms simple y til es que
'toda tabla debe tener un ndice clustered'. Esto no es 100% cierto y como casi toda
norma tiene sus excepciones, pero son pocas.
Las ventajas de tener un ndice clustered son varias pero cabe destacar algunos de los
motivos por los que influyen en el rendimiento (simplificando algo el tema dicho sea de
paso):
Los registros estn fisicamente ordenados segn el ndice clustered de la tabla
(solo puede haber uno por tabla). Esto hace que el acceso a rangos de registros
utilizando los campos del ndice como filtro sea extremadamente rpido.
Tambien es extremadamente rpida la ordenacin y el filtrado sobre un ndice
clustered. Por lo tanto, debemos elegir indics clustered adecuados para
soportar este tipo de consultas, sobre todo cuando se realicen con mucha
frecuencia.
El resto de ndices de una tabla que tenga un ndice clustered se apoyan en
este ndice para guardar su informacin. Por ello debemos tratar elegir ndices
clustered sobre campos o combinaciones de campos del menor tamao posible.
Al final de un ndice clustered se encuentra fisicamente los datos de los campos
que forman parte del ndice, de manera que si nuestra consulta solo necesita
campos que se encuentran dentro del ndice clustered no necesitar hacer
ninguna lectura adicional una vez buscados los registros usando el ndice.
A la hora de elegir un ndice clustered debemos tener en cuenta las siguientes
recomendaciones:
Se sea usado por el mayor nmero posible de consultas, sobre todo por
aquellas que devuelven un rango de registros seleccionados por el ndice o se
ordenan o agrupan por los campos del ndice. Tambin se benefician aquellas
consultas que realizan JOINs sobre los campos cubiertos por el ndice.
No debemos elegir campos que cambian con mucha frecuencia o que
almacenan mucha informacin. Cuanto ms pequeo en cuanto a tamao de los
campos sea nuestro ndice clustered mejor. Las columnas autonumricas
suelen ser unas exelentes candidatas a ndice clustered. Por defecto las claves
primarias son ndices clustere
primaria cambie con mucha fr
Cuanto ms exclusivos sean
ideal es que los valore
el ndice sean nicos.
Por ltimo os dejo un pequeo script
datos no tienen un ndice clustered, y
select t.Nombres from sys.tables t
where t.Nombres not in
(
select t.Nombres from sys.tables t
join sys.indexes i
on t.object_id = i.object_id
where
t.type = 'U' --Solo nos interesa
and i.type = '1' --1 == ndice cl
)
TIPOS DE INDICE
Ahora platiquemos sobre los tipos de
Agrupado
Un tipo de ndice agrupado y tiendas
basado en la clave del ndice agrupa
estructura de rbol b que admite la r
valores de ndice agrupado clave.
No agrupado
Un ndice no agrupado se puede def
en un montn. Cada fila de ndice en
agrupada y un localizador de fila. Est
agrupado o el montn que el valor d
orden de los valores de clave de nd
para estar en cualquier orden particular, a menos de un ndice agrupado se crea sobre
la mesa.
nico
Un ndice nico garantiza que la clave del ndice no contiene valores duplicados y por lo
tanto, cada fila de la tabla o la vista es de alguna manera nico.
Tanto los ndices agrupados y no agrupados pueden ser nicos.
Un ndice no agrupado que se ampla para incluir columnas sin clave adems de
las columnas de clave.
Un tipo especial de token de ndice funcional basado en que est construido y
mantenido por Microsoft motor de texto completo para SQL Server. Proporciona un
apoyo eficiente a la bsqueda de palabras complejas en datos de cadenas de
caracteres.
Un ndice espacial proporciona la capacidad de realizar determinadas operaciones de
manera ms eficiente en objetos espaciales (datos espaciales) en una columna del tipo
de geometra de datos. El ndice espacial reduce el nmero de objetos en los que las
operaciones
espaciales
relativamente
costosos
deben
aplicarse.
Un ndice no clster optimizado,
Especialmente indicado para cubrir consultas que seleccionan a partir de un
subconjunto bien definido de los datos. Se utiliza un predicado de filtro para indizar una
parte de las filas de la tabla. Un ndice filtrado bien diseado puede mejorar el
rendimiento de las consultas, reducir los costos de mantenimiento y de reducir los
costos de almacenamiento del ndice en comparacin con los ndices de tabla completa.
XML
Un rallado, y se mantuvo, la representacin de los objetos binarios grandes (BLOB XML)
en la columna tipo de datos xm
EJEMPLO 343
Reportar todos los datos de la tabla VENTAS y de la tabla ARTICULOS
SELECT A.CodArt,A.Unid_med,V.Cant,V.Descripcion_bien,v.PVenta FROM
Master.dbo.articulos A, Master.dbo.ventas V WHERE A.Cod_art =V.Codigo_art;
EJEMPLO 344
Empleando la misma consulta en s
SELECT A.cod_art,A.Unid_m
Master.dbo.Articulos A INNE
V.codigo_art;
EJEMPLO 345
Tenemos cuatro tablas de movim
siendo:
Movimcta (Mov)
Tabla de los
las cabecera
Itemvta (Ite)
Tabla donde
Movimvta
Clientes (Cli)
Tabla de los
Bienes (Bie)
Tabla de los
SELECT Mov.Num_fact,
SUBSTRING(Nombres,1,20)
Documento de Referencia
Bie.stock FROM CLIENTE
Mov.clientescod = Cli.codc
Mov.factura INNER JOIN Bie.
COMBINACIONES EXTERNAS
Recordemos que cuando empleamo
extraer datos de las tablas relacionad
Sintaxis:
Nombre_tabla1 LEFT OUTER JO
Nombre_tabla2.col2
O tambin puede ser:
Nombre_tabla1 RIGHT OUTER JO
Nombre_tabla2.col2
O tambin puede ser:
Nombre_tabla1 FULL OUTER JOIN Nombre_tabla2 ON Nombre_tabla1.col1 =
Nombre_tabla2.col2
INTERSECT
Este operador corresponde a la tradu
EJEMPLO 346
Vamos a considerar como ejemplo que tenemos dos tablas en una empresa que
son clientes y Ventas; el cual nos piden ver los resultados de las ventas,
solamente de todos los clientes a quienes se haya movimiento.
SELECT A.clicod AS Codigo, A.Fecha, A.Producto, A.Pventa, A.Cantidad,A.Factura,
B.Nom_cli AS Nombre del Cliente FROM Ventas A LEFT OUTER JOIN Clientes B ON
A.clicod = B.codigocli;
EJEMPLO 348
Seleccionar los diez primeros re
tenemos tres tablas y son:
Movimientos, Itemmovimiento y Ar
La tabla Movimientos es donde se a
Items de cada venta; en la tabla Itemm
tabla Articulos se graba todo el Stock
Observemos que nos mostrara solamente los clientes que han tenido movimiento, pero
si queremos ver todos los clientes que no tienen movimiento, hubisemos empleado
RIGHT.
SELECT
TOP(10)
M.Factura,M
A.Descripcion FROM Movimientos M
I.Numfact INNER JOIN AARTICULO
M.Factura ORDER BY 1 DESC;
AUTOCOMBINACION
EJEMPLO 349
Listar todas las columnas de l
encuentran relacionadas mediante
Es posible asociar filas de una tabla a otras filas de la misma tabla realizando un
SELF_JOIN recordando que es obligatorio el uso de las ALIAS.
ORDER BY
Permite ordenar todos los registros de la consulta efectuada .
UNION
Este operador permite obtener un conjunto de filas proveniente de varias consultas,
todas las columnas deben proporcionar el mismo numero de columnas.
EXCEPT
Este operador permite ejecutar la diferencia entre dos resultados con la misma
estructura.
EJEMPLO 347
Listar todos los alumnos de la facultad de Medicina, pero que no estn
desaprobados.
SELECT FROM ALUMNOS WHERE Facultad LIKE Medicina% EXCEPT
SELECT FROM ALUMNOS WHERE Nota>10;
SOLUCION COMUN
SELECT
Mov.Codigobien,Mov
Master.dbo.Movimientos
Mov, Ma
Mov.Codigobien
SOLUCION ANSI
SELECT
Mov.Codigobien,Mov
Master.dbo.Movimientos Mov INNER
Mov.Codigobien
NOTA
WITH TIES Esta opcin se puede emplear s
EJEMPLO 350
Tenemos 04 tablas los cuales se detallan sus ALIAS en la siguiente manera:
LIN
Tabla de tem de pedidos
PDO Tabla de Pedidos
CLI
Tabla de Clientes
ART
Tabla de Articulos
El Alias de la tabla LIN se relaciona con el Alias de la tabla PDO mediante la
columna Numero_pdo; el Alias de la tabla LIN se relaciona con el alias de la tabla
ART mediante la columna Referencia_art; el Alias de la tabla PDO se relaciona con
El Alias de la tabla CLI mediante la columna Numero_cli.
Ahora observamos que tenemos 04 tablas relacionadas entre si, el cual
efectuaremos una combinacin de tablas para obtener como resultado la
siguiente consulta.
SELECT PDO.Numero_pdo, CONVERT(Char(10),fecha,103) AS Fecha_inicio,
SUBSTRING(Apellido,1,15) APELLIDO, LIN.Referencia_art,Precio,Cantidad FROM
Clientes CLI INNER JOIN Pedidos PDO ON PDO.Numero_cli = CLI.Numero_cli INNER
JOIN Lineas_pdo LIN ON LIN.Numero_pdo = PDO.Numero_pdo INNER JOIN Articulos
ART ON Art.Referencia_art = LIN.Referencia_art;
EJEMPLO 351
Como ejemplo vamos ahora considerar que queremos listar todos los clientes de
la tabla VENTAS que estn en relacin con la tabla CLIENTES mediante la
columna CODIGOCLI.
Observaremos que de acuerdo al resultado va mostrar todas las columnas de los
clientes inclusive de aquellos que no se han generado movimientos.
EJEMPLO 352
Una empresa almacena sus produ
crear una tabla de productos llam
adicionales
IF OBJECT_ID (Articulos) NOT NUL
DROP TABLE ARTICULOS;
CREATE TABLE ARTICULOS(
Codigo INT
IDENTITY;
Descripcion
Varchar(40),
Pventa
Decimal(13,2) NOT N
Cantidad SMALLINT NOT NULL DEF
Monto AS PventaCantidad
);
Ahora insertemos un registro con valo
SET IDENTITY_INSERT ARTICULOS
INSERT INTO ARTICULOS VALUES
Observemos que no lo permite
automatico.
EJEMPLO 353
Actualicemos la tabla del ejemplo a
UPDATE Articulos SET Pventa=120
EJEMPLO 354
Actualice una cantidad y veamos e
UPDATE Articulos SET Pventa=100
SELECT Clientes = C.Codigocli, apellidos, V.numfactura, V.Fechaventa FROM
CLIENTES C LEFT OUTER JOIN VENGTAS V ON C.Codigocli = V.Codigocli
NOTA
Recordemos que las combinaciones externas completa (FULL OUTER JOIN) permite mostrar los datos
definidos de estas dos tablas aunque no sea posible establecer correspondencia.
NOTA
Si deseamos ingresar manualmente los reg
sabemos que debemos emplear SET IDENT
Recordemos que la importancia de los INDICES. T-SQL Server.
La creacin de ndices tiles es uno de los mtodos ms importantes para lograr un
mejor rendimiento de las consultas. Los ndices tiles ayudan a encontrar los datos con
menos operaciones de E/S de disco y un menor uso de los recursos del sistema.
Para crear ndices tiles, debe comprender cmo se utilizan los datos, los tipos y las
frecuencias de ejecucin de las consultas y cmo el procesador de consultas puede
utilizar los ndices para encontrar los datos con rapidez.
Una vez elegidos los ndices que crear, examine las consultas ms importantes, cuyo
rendimiento es el factor que ms afecta a la experiencia del usuario. Cree los ndices
especficamente para ayudar a estas consultas. Despus de agregar un ndice, vuelva a
ejecutar la consulta para comprobar si el rendimiento ha mejorado. En caso negativo,
quite el ndice.
Al igual que en la mayora de las tcnicas de optimizacin del rendimiento, existen
ventajas e inconvenientes. Por ejemplo, con ms ndices, es probable que las consultas
SELECT se ejecuten con mayor rapidez. Sin embargo, las operaciones DML (INSERT,
UPDATE y DELETE) reducirn su velocidad porque se deben mantener ms ndices
con cada operacin. Por consiguiente, si las consultas son principalmente instrucciones
SELECT, el uso de ms ndices puede ser positivo. Si su aplicacin lleva a cabo
muchas operaciones DML, el nmero de ndices que cree debera ser ms moderado.
En definitiva, puede mejorar el rendimiento de la aplicacin SQL Server, optimizando las
consultas que utiliza. En los prximos das publicar en mi blog (este mismo) algunas
tcnicas que pueden aplicarse para optimizar el rendimiento de las consultas.
Los ndices en las columnas utilizadas en la clusula WHERE de las consultas
importantes normalmente mejoran el rendimiento. Sin embargo, esto depende del grado
de selectividad del ndice. La selectividad es la proporcin de filas resultantes respecto
al total de filas. Si la proporcin es baja, significa que el ndice es muy selectivo, ya que
puede deshacerse de la mayora de las filas y reducir en gran medida el tamao del
conjunto de resultados. Por consiguiente, se trata de un ndice muy til. En cambio, un
ndice que no es selectivo no es tan til.
Los ndices nicos son los ms se
realmente til para las consultas qu
ejemplo, un ndice en una sola colu
rapidez una fila concreta.
Los ndices de varias columnas so
sola columna. Los ndices de varia
de filtro que coinciden con un co
ejemplo, el ndice compuesto CRE
("Last Nombres" ASC, "First Nom
consultas:
... WHERE "Last Nombres"
... WHERE "Last Nombres"
... WHERE "First Nombres"
Sin embargo, no ser til para esta co
... WHERE "First Nombres"
Al crear un ndice de varias columnas
en la parte izquierda de la clave. De e
coincide con varias expresiones.
Una tabla pequea es aquella cuyo c
Evite indizar tablas muy pequeas
exploracin de tablas. De este modo
de ndices. Si no crea un ndice e
posibilidad de que el optimizador sele
Es recomendable que siempre cree n
muy til crear ndices en claves exter
las externas se utilizan con frecuencia
permiten al optimizador calcular los a
Si la consulta combina tablas utilizan
en esas columnas por la misma razn
Cuando se crean las restricciones de claves principales y externas, SQL Server crea
automticamente ndices para ellas y las utiliza para optimizar las consultas. Recuerde
que es aconsejable crear claves principales y externas lo ms pequeas posible, ya que
las combinaciones son ms rpidas.
Los ndices pueden utilizarse para acelerar la evaluacin de ciertos tipos de clusulas
de filtro. Si bien todas las clusulas de filtro reducen el conjunto de resultados final de
una consulta, algunas de ellas tambin ayudan a reducir la cantidad de datos que se
deben explorar.
Un argumento de bsqueda (SARG) limita una bsqueda porque especifica la
coincidencia exacta, un intervalo de valores o una conjuncin de dos o ms elementos
combinados con AND. Presenta uno de los siguientes formatos:
Columna operador <constante o variable>
<constante o variable> operador Columna
Entre los operadores SARG se incluyen =, >, <, >=, <=, IN, BETWEEN y, en ocasiones,
LIKE (en casos de coincidencia de prefijos, tales como LIKE 'John%'). Un argumento
SARG puede incluir varias condiciones combinadas con un AND. Los argumentos
SARG pueden ser consultas que coinciden con un valor especfico, por ejemplo:
"Cliente ID" = 'ANTON'
'Doe' = "Last Nombres"
Un argumento SARG tambin pueden ser una consulta que coincide con un intervalo de
valores, por ejemplo:
"Order Date" > '1/1/2002'
"Cliente ID" > 'ABCDE' AND "Cliente ID" < 'EDCBA'
"Cliente ID" IN ('ANTON', 'AROUT')
Una expresin que no utilice operadores SARG no mejorar el rendimiento porque el
procesador de consultas de SQL Server debe evaluar cada fila para determinar si
cumple la clusula de filtro. Por consiguiente, un ndice no es de utilidad en expresiones
que no utilizan operadores SARG. Entre los operadores que no son SARG se incluyen
NOT, <>, NOT EXISTS, NOT IN, NOT LIKE y funciones intrnsecas.
Las operaciones ORDER-BY, GROUP-BY y DISTINCT son todas tipos de ordenacin.
El procesador de consultas de SQL Server implementa la ordenacin de dos modos
distintos. Si los registros ya estn ordenados por un ndice, el procesador slo tiene que
usar el ndice.
De lo contrario, el procesador debe u
primero los registros. Esta ordenac
considerables en dispositivos con una
si el tiempo de respuesta es importan
En el contexto de ndice con varias
tengan en cuenta un ndice concreto
coincidir con el conjunto de prefijos
ejemplo, el ndice CREATE INDEX
ASC, "First Nombres" ASC) puede ay
... ORDER BY / GROUP BY
... ORDER BY / GROUP BY
No ayudar a optimizar:
... ORDER BY / GROUP BY
... ORDER BY / GROUP BY
Para que una operacin DISTINCT
lista de proyeccin debe coincidir c
necesario que estn en el orden exac
siguientes consultas:
... DISTINCT "Last Nombre
... DISTINCT "First Nombre
No ayudar a optimizar:
... DISTINCT "First Nombre
... DISTINCT "Last Nombre
Si la consulta siempre devuelve filas
ya que slo aumenta la sobrecarga.
Hay que tener en cuenta que cada vez que ponemos agrupaciones del tipo ORDER-BY,
GROUP-BY y DISTINCT, podemos estar penalizando el rendimiento si no tenemos los
ndices adecuados y muchas veces estas agrupaciones que usamos no tienen sentido
ya que se pueden hacer desde el reporte o la aplicacin. En ocasiones es mejor no dar
una sobrecarga el motor, ya que he visto como quedan resuelto algunos temas de
performance en querys simplemente por eliminar estas agrupaciones, recordemos que
las agrupaciones las podemos hacer muchas veces en la grilla de nuestra aplicacin sin
castigar al motor de base.
DBCC DBREINDEX
Para reconstruir los ndices de modo que los datos ya no estarn fragmentados. Los
datos fragmentados pueden causar que SQL Server realice lecturas de datos
innecesarias, decrementando el rendimiento de SQL Server, por lo que es necesario
hacer una reorganizacin en una tabla con ndices agrupados, algunos ndices noagrupados en la misma tabla sern automticamente reconstruidos.
La reorganizacin de la base de datos puede ser realizada usando el Maintenance
Wizard, o corriendo tu propio script a travs del SQL Server Agent
El comando DBCC DBREINDEX no reconstruir automticamente todos los ndices de
las tablas en la base de datos; solo puede funcionar de a una tabla por vez. Pero si
corres el siguiente script, puedes indexar todas las tablas en una base de datos con
facilidad.
CREAR Y ASOCIAR REGLAS
En SMO, el objeto Rule representa las reglas. La propiedad TextBody, que es una
cadena de texto que contiene una expresin de condicin que utiliza operadores o
predicados, como IN, LIKE o BETWEEN, define la regla. Una regla no puede hacer
referencia a columnas u otros objetos de base de datos. Se pueden incluir funciones
integradas que no hagan referencia a objetos de base de datos.
La definicin en la propiedad TextBody debe contener una variable que haga referencia
al valor de datos escrito. Se puede utilizar cualquier nombre o smbolo para representar
REGLAS: Regla se utiliza para enlaz
Sintaxis:
CREATE RULE Regla como condic
EJEMPLO 355
Definamos un tipo de dato llamado
valores nulos.
EXEC SP_ADDTYPE PVENTA, INT
Pero que hubiese sido si existier
eliminado
IF EXISTS(Select * FROM SYSTYPE
EXEC SP_DROPTYPE PVEN
EJEMPLO 356
Supongamos que existiese una Re
eliminemos dicha regla
IF OBJECT_ID(RG_FECHA) IS NOT
DROP RULE RG_FECHA
EJEMPLO 357
Conseiderando que tenemos una
dentro de la tabla VENTAS, dond
aos, pero con la condicin que se
CREATE RULE RG_INICIO
AS @inicio BETWEEN 2000 A
EJEMPLO 358
En el caso que hemos creado dich
registros ingresados, pero deseam
los futuros
Exec SP_BRINDRULE RG_INICIO,IN
EJEMPLO 359
Ahora quite la asociacin de la regla creada ante rior mente
EXCEPT
Exec SP_UNBINDRULE RG_INICIO;
EJEMPLO 360
Ahora veamos si ya se quito la asociacion
SP_HELP CONSTRAINT VENTAS;
EJEMPLO 361
Crear una regla en la tabla VENTAS, considerando que tenga una columna llamada
CONTROL, el cual admita solo valores entre -40 y -1
CREATE RULE RG_NEGATIVO
AS @CONTROL BETWEEN -40 AND -1
-- Ahora lo asociamos
EXEC SP_BRINDRULE RG_ NEGATIVO, VENTAS.Control;
EJEMPLO 362
Efectuando un repaso a los captulos anteriores, diga usted como agregar una
restriccin DEFAULT a la tabla VENDEDORES
ALTER TABLE VENDEDORES
ADD CONSTRAINT DF_VENDEDORES_AO DEFAULT 2000 FOR AO;
La operacion EXCEPT es una extens
Server a partir de la version 2005, y re
Consideremos la situacin en que ten
de datos diferentes. Por ejemplo, la
otra en la base de datos en producci
Ahora, para comprobar que los datos
hay CUALQUIER diferencia en los va
tablas.
Dado que EXCEPT retorna "cualquie
encuentre en la consulta derecha", pa
SELECT * FROM pruebas.dbo.Cliente
EXCEPT
SELECT * FROM produccion.dbo.Clie
Recordemos que cuando hablamos de actualizacin de datos es diferente de
hablar de actualizacin de inidices pero en ambos casos emplearemos UPDATE
Recordamos la especificacion del E
registros que estan en la tabla de pru
a la tabla en produccin, pero NO ve
la tabla de pruebas.
EJEMPLO 363
Modificar las columnas SEMESTRE y FACULTAD del alumno cuyo cdigo es
112127766 de la tabla universidad cuya base de datos sea PADRON
Para ello, podemos realizar una UNIO
UPDATE Padron.dbo.Universidad SET SEMESTRE = X, FACULTAD =Ingenieria
WHERE Codigo=112127766;
SELECT * FROM pruebas.dbo.Clien
EXCEPT
SELECT * FROM produccion.dbo.C
UNION
SELECT * FROM produccion.dbo.C
EXCEPT
SELECT * FROM pruebas.dbo.Clientes
Pera debido a que el operador UNION tiene precedencia sobre el EXCEPT, la operacion
de UNION se realizar ANTES del EXCEPT y de nuevo obtendremos solo una parte de
las diferencias.
Corrijamos entonces esa construccin de esta forma:
SELECT * FROM
(SELECT * FROM pruebas.dbo.Clientes
EXCEPT
SELECT * FROM produccion.dbo.Clientes) AS IZQUIERDA
UNION
SELECT 'produccion' AS origen,* F
(SELECT * FROM produccion.dbo.C
EXCEPT
SELECT * FROM pruebas.dbo.Clien
Finalmente, tenemos una lista
debidamente identificadas.
PRECAUCIONES:
El uso de tablas que tengan una lla
EXCEPT.
UNION
SELECT * FROM
(SELECT * FROM produccion.dbo.Clientes
EXCEPT
SELECT * FROM pruebas.dbo.Clientes) AS DERECHA
Ahora si tendremos la lista completa de diferencias entre una y otra tabla. Tendremos
tanto las filas que tienen valores con diferencias, como las filas que estn en una tabla
pero no en la otra.
Asi que esta consulta funciona correctamente, pero al ejecutarla notaremos que
tenemos las diferencias, pero la consulta no nos indica de donde proviene.
De modo que hacemos un ltimo ajuste:
SELECT 'pruebas' AS origen,* FROM
(SELECT * FROM pruebas.dbo.Clientes
EXCEPT
SELECT * FROM produccion.dbo.Clientes) AS IZQUIERDA
Adems, las tablas deben tener la m
los mismos nombres, ser del mismo
Aunque hay pequeas excepciones (
mismo nombre y diferente longitud
garantizar esta igualdad.
Para una absoluta garanta, tal vez va
campos de ambas tablas.
Note que esto nos lleva a un punt
campos incluidos en la consulta, pe
podemos utilizar una consulta similar
ejemplo: que todos los cdigos de clie
otros campos que existan en las tabla
Esperamos que este artculo los
posibilidades de sentencias como EX
INTERSECT
Este operador consiste en identificar en una sola consulta las filas que estn presentes
en dos resultados, pero con la misma estructura.
Ejemplo:
SELECT * FROM ALUMNOS WHERE Apellidos LIKE %Pereda%
INTERSECT
SELECT * FROM ALUMNOS WHERE Profesion NOT PSICOLOGOS;
SELECT A, B, C FROM TABLA1
UNION
SELECT A, B, C FROM TABLA2
Una variante es UNION ALL que agre
duplicadas. Si no se especifica, las fila
SELECT A, B, C FROM TABLA1
UNION ALL
SELECT A, B, C FROM TABLA2
INTERSECT
Recordemos que los operadores INTERSECT, EXCEPT y UNION son un set de
operadores que ejecutan operaciones entre 2 o ms set de datos. UNION ha estado
disponible en T-SQL desde las primeras versiones, mientras INTERSECT y EXCEPT
fueron introducidos en SQL 2005.
Los tres operadores tienen requerimientos
similares:
Devuelve los valores distintos de la co
consulta. Es decir los valores en com
Requieren un mnimo de 2 set de datos.
Cada set de datos debe tener el mismo nmero de columnas.
Cada columna con su relativa columna deben ser tipos de datos compatibles.
La clusula ORDER BY puede usarse nicamente al final de la consulta.
UNION
SELECT A, B, C FROM TABLA1
INTERSECT
SELECT A, B, C FROM TABLA2
EXCEPT
Devuelve los valores distintos de la co
consulta siguiente. Es decir en depe
regresara los valores que no se encue
Combina los resultados de dos o ms consultas en un solo conjunto de resultados que
incluye todas las filas que pertenecen a las consultas de la unin.
O bien lo hariamos con la combinacio
SELECT A FROM TABLA1
UNION
SELECT A FROM TABLA2
EXCEPT
SELECT A FROM TABLA1
INTERSECT
SELECT A FROM TABLA2
SELECT * FROM t1
EXCEPT
SELECT * FROM t2
Sera distinto los resultados para la siguiente consulta:
SELECT * FROM t2
EXCEPT
SELECT * FROM t1
DIFERENCIA SIMETRICA
EJEMPLO 364
Supongamos que tenemos una ta
donde su registro de almacenami
tenemos una estructura determin
unico para la columna FACULTA
por que existen valores duplicado
facultad.
CREATE UNIQUE CLUSTERED
INDEX I_Alumos_nombres ON Alumn
Como lograriamos esta consulta?
LOS INDICES NO AGRUPADOS UNICO
EJEMPLO 365
Crear una tabla clientes, donde us
ella, para luego crear dos ndices n
otro no es nico.
Pudisemos usar NOT IN para ello
SELECT A
FROM Tabla1
WHERE A NOT IN(SELECT A FROM Tabla2)
UNION
SELECT A
FROM Tabla2
WHERE A NOT IN(SELECT A FROM Tabla1)
CREATE TABLE Clientes
(
ClienteID INT NOT NULL,
ClienteNombres CHAR (100) NOT NU
ClienteDireccions CHAR (100) NOT N
Comentarios CHAR (189) NOT NULL
)
GO
- Crear un ndice nico no agrupado en la tabla anterior
CREATE CLUSTERED idx_Clientes ndice en los clientes (ClienteID)
GO
- Colocar 80.000 registros
DECLARE @ i INT = 1
WHILE (@ i <= 20000)
COMENZAR
DECLARE @ j = 1 INT
INSERT INTO valora a los clientes
(
@ I,
"ClienteNombres '+ CAST (@ i AS CHAR) + CAST (@ j AS CHAR),
'ClienteDireccions' + CAST (@ i AS CHAR),
'Comentarios' + CAST (@ i AS CHAR)
)
SET @ j + = 1;
INSERT INTO valora a los clientes
(
@ I,
"ClienteNombres '+ CAST (@ i AS CHAR) + CAST (@ j AS CHAR),
'ClienteDireccions' + CAST (@ i AS CHAR),
'Comentarios' + CAST (@ i AS CHAR)
)
SET @ j + = 1;
INSERT INTO valora a los clientes
(
@ I,
"ClienteNombres '+ CAST (@ i AS CHAR) + CAST (@ j AS CHAR),
'ClienteDireccions' + CAST (@ i AS CHAR),
'Comentarios' + CAST (@ i AS CHAR)
)
SET @ j + = 1;
INSERT INTO valora a los clientes
(
@ I,
"ClienteNombres '+ CAST (@ i AS CH
'ClienteDireccions' + CAST (@ i AS C
'Comentarios' + CAST (@ i AS CHAR
)
SET @ i + = 1
FIN
GO
- Crear un ndice nico no agrupad
CREATE UNIQUE idx_UniqueNCI_Cl
En los Clientes (ClienteNombres)
GO
- Crear un no nico ndic
CREAR ndice no agrupado idx_No
(ClienteNombres)
GO
Aplicando ahora sys.dm_db_index
no agrupado tiene 107 bytes por fila
nica no ndice no agrupado toma 1
mximo 117 bytes). Vamos a analizar
nico ndice no agrupado a travs del
DBCC PAGE (NonUniqueClusteredIn
GO
Ahora vamos a volcar la raz de ndice del no nico ndice no agrupado definido en
nuestro no nico ndice agrupado:
Esto es ahora una salida muy interesante! La clave del registro de ndice debe ser por
un diseo nico. Cmo se puede hacer un SQL Server no nica clave de ndice no
agrupado nico? Fcil - SQL Server slo se suma la clave del ndice agrupado (4 bytes).
Pero la clave del ndice agrupado no es nico tambin por defecto, por lo tanto, SQL
Servidor tambin aade la uniquifier (4 bytes), por lo que tiene una sobrecarga
resultante de 8 bytes por fila de ndice, cuando el uniquifier no es igual a 0. Cuando el
uniquifier es igual a 0, se obtiene una sobrecarga de 4 bytes, ya que en este caso, el
uniquifier no se almacena fsicamente en el registro de ndice, y un 0 es asumido por
SQL Server de forma automtica. Al analizar el nuevo byte por byte de la representacin
se puede ver los siguientes bytes:
1 Byte: los bits de estado
n Bytes: clave nica de ndice no agrupado - en este caso de 100 bytes
n Bytes: no nico clave de ndice agrupado - en este caso de 4 bytes
4 bytes: pageID
2 Bytes: FileID
4 bytes: Algunos bytes utilizados por el uniquifier
4 bytes: El valor uniquifier s mismo, cuando no es igual a 0
La longitud mnima del registro de ndice es 111 bytes, y por lo tanto, la longitud mxima
es de 117 bytes que ya se encuentran a cabo anteriormente por el DMV
sys.dm_db_index_physical_stats. Cuando finalmente volcar la hoja a nivel de la no
nico ndice no agrupado, se obtiene el siguiente resultado:
EJEMPLO 366
CREAR UN INDICE AGRUPADO SOBRE DATOS YA ORDENADOS
CREATE UNIQUE CLUSTERED INDEX PK-LINPDO
ON LINEAS-FACT(NUMFACT,ITEM) WITH FILLFACTOR =100;
-- Ahora eliminemos un indice:
Recordemos que los indices definidos con la instruccin CREATE INDEX pueden
ser eliminados con DROP INDEX
DROP INDEX Nombre_index ON No
EJEMPLO 367
Ahora si usted desea reconstruir un
ello emplearemos ALTER INDEX
ALTER INDEX ALL
ON CLIENTES
REBUILD WITH (FILLFACTOR=50);
INDEXAR LAS TABLAS DE DESAR
Cuando tus tablas y la base de dato
que puede bloquear los recursos y h
indizacin debe programarse en los
o en el peor de los casos, mientras el
Si utilizas el comando CREATE IND
FILLFACTOR tiene su propia sub-op
opcin PAD_INDEX, entonces el FILL
ndice, no en el ndice de pginas inte
a lo largo de la opcin FILLFACTO
aplicar a las pginas de ndice interm
Si deseas reconstruir un ndice cl
suponiendo que la tabla tambin tie
obtienen cuando se utiliza tambin la
CREATE INDEX. La opcin DROP_
reconstruccin de alguno de los ndice
SQL Server 2000 tiene un comando l
desfragmentar ndices cluster y non c
logra mediante la compactacin y la d
que el orden fsico de las pginas del
que aumenta el rendimiento. Utiliz
DBREINDEX suele ser beneficioso ya
por largos perodos de tiempo como
ejecutar durante el periodo que la BD est en produccin sin afectar significativamente
el rendimiento, a pesar de que cualquier tarea de mantenimiento de este tipo debera,
idealmente, ser programada durante los tiempos de parada o de bajo uso de la misma.
En el lado negativo, DBCC INDEXDEFRAG tarda ms tiempo en ejecutarse que DBCC
REINDEX, y las estadsticas no se actualizan automticamente. Esto significa que si
utiliza DBCC INDEXDEFRAG, tambin tendr que ejecutar UPDATE STATISTICS.
Y para acelerar el indexado de tus bases de datos es necesario estar seguro de que
tu base de datos SQL Server y los archivos de log se encuentran fsicamente
desfragmentador, antes de reindexar tu base de datos. Al asegurarte que tu base de
datos y archivos de registro son contiguos (desfragmentados), el re-indexado no slo
ser ms rpido, sino que requerir menos recursos de E/S, ayudando al rendimiento
global de SQL Server. Si utiliza Windows 2000 o 2003, una utilidad de
desfragmentacin est disponible para este fin, aunque solo desfragmentar la base de
datos SQL Server y los archivos de log cuando estn cerrados. Idealmente, debes usar
una utilidad diseada para desfragmentar bases de datos SQL Server y archivos de log
abiertos.
Segn Microsoft, el nmero total de pginas en una tabla afecta el rendimiento de
SQL Server como la fragmentacin. Por ejemplo, si una tabla tiene menos de 100
pginas de datos, reindexar la misma para eliminar la fragmentacin no va a beneficiar
el rendimiento. Esto se debe a que existen otras cosas, tales como las caches por
hardware, el cacheo de SQL Server y la funcionalidad de lectura adelantada de SQL
Server , las cuales ocultaran el efecto negativo de la fragmentacin. Por otra parte,
grandes tablas pueden verse beneficiadas con el reindexado, pues debido a su tamao
la fragmentacin puede afectar negativamente a la E/S de disco, perjudicando el
rendimiento.
CREATE INDEX
Crea un ndice relacional en una tabla especificada o una vista de una tabla
especificada. Se puede crear un ndice antes de que la tabla posea datos. Los ndices
relacionales se pueden crear en tablas o vistas de otra base de datos especificando un
nombre completo de base de datos.
Sintaxis
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column_name [ ASC | DESC ] [ ,...n ] )
[ WITH <backward_compatible_ind
[ ON { filegroup_name | "default" } ]
<object> ::=
{
[ database_name. [ owner_name ]
table_or_view_name
}
<backward_compatible_index_option>
{
PAD_INDEX
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB
| IGNORE_DUP_KEY
| STATISTICS_NORECOMPUTE
| DROP_EXISTING
}
Argumentos
UNIQUE
Crea un ndice nico en una
que no se permite que dos f
ndice clster de una vista de
Motor de base de datos n
columnas que ya contengan v
establecido o no IGNORE_D
datos muestra un mensaje de
poder crear un ndice nico
utilizan en un ndice nico se
valores NULL se consideran d
CLUSTERED
Crea un ndice en el que el or
orden fsico de las filas corres
un ndice clster contiene las filas de datos reales de la tabla. Una tabla o vista
permite un ndice clster al mismo tiempo.
Una vista con un ndice clster nico se denomina vista indizada. La creacin de
un ndice clster nico en una vista materializa fsicamente la vista. Es
necesario crear un ndice clster nico en una vista para poder definir otros
ndices en la misma vista.
NONCLUSTERED
Crea un ndice que especifica la ordenacin lgica de una tabla. Con un ndice
no clster, el orden fsico de las filas de datos es independiente del orden
indizado.
Cada tabla puede tener hasta 999 ndices no clster, independientemente de
cmo se crean: de forma implcita con las restricciones PRIMARY KEY y
UNIQUE, o explcita con CREATE INDEX.
Para las vistas indizadas, solo se pueden crear ndices no clster en una vista
que ya tenga definido un ndice clster nico.
El valor predeterminado es NONCLUSTERED.
index_name
Es el nombre del ndice. Los nombres de ndice deben ser nicos en una tabla o
vista, pero no es necesario que sean nicos en una base de datos. Los nombres
de ndice deben seguir las reglas de los identificadores.
column
Es la columna o columnas en las que se basa el ndice. Especifique dos o ms
nombres de columna para crear un ndice compuesto sobre los valores
combinados de las columnas especificadas. Enumere las columnas que desee
incluir en el ndice compuesto (en orden de prioridad) entre parntesis despus
de table_or_view_name.
Se pueden combinar hasta 16
compuesto. Todas las column
encontrarse en la misma tabla
valores de ndice combinado
[ ASC | DESC ]
Determina la direccin ascen
ndice determinada. El valor p
INCLUDE (column [ ,... n ] )
Especifica las columnas que
del ndice no clster. El ndice
Los nombres de columna no
pueden utilizar simultneam
clave. Los ndices no clster s
se define un ndice clster en
WHERE <filter_predicate>
Crea un ndice filtrado espec
ndice filtrado debe ser un n
filtradas para las filas de dato
El predicado de filtro utiliza l
referencia a una columna calc
de datos espacial o a un
comparaciones que utilizan lit
comparacin. En su lugar, us
A continuacin, se muestran a
tabla Trabajo.BillOfMaterials:
WHERE StartDate > '2000010
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Los ndices filtrados no se aplican a los ndices XML ni a los ndices de texto
completo. Para los ndices UNIQUE, solo las filas seleccionadas deben tener
valores de ndice nicos. Los ndices filtrados no admiten la opcin
IGNORE_DUP_KEY.
ON partition_scheme_name(column_name)
Especifica el esquema de particin que define los grupos de archivos a los que
se asignarn las particiones de un ndice con particiones. El esquema de
particin debe existir dentro de la base de datos mediante la ejecucin de
CREATE PARTITION SCHEME o de ALTER PARTITION SCHEME.
column_name especifica la columna en la que se van a crear las particiones de
un ndice con particiones. Esta columna debe coincidir con el tipo de datos, la
longitud y la precisin del argumento de la funcin de particin que
partition_scheme_name emplea. column_name no est limitado a las columnas
de la definicin del ndice. Se pueden especificar todas las columnas de la tabla
base, excepto en el caso de particin de un ndice UNIQUE en el que se debe
elegir un valor para column_name entre las columnas utilizadas como clave
nica. Esta restriccin permite que Motor de base de datos compruebe la
unicidad de los valores de clave en una nica particin solamente.
ON filegroup_name
Crea el ndice especificado en el grupo de archivos indicado. Si no se ha
especificado una ubicacin y la tabla o vista no tiene particiones, el ndice utiliza
el mismo grupo de archivos que la tabla o vista subyacente. El grupo de
archivos debe existir previamente.
ON "default"
Crea el ndice especificado en el grupo de archivos predeterminado.
El trmino predeterminado (d
Es un identificador para el gru
como en ON "default" o en
QUOTED_IDENTIFIER debe
configuracin predeterminada
[ FILESTREAM_ON { filestream_fi
"NULL" } ]
Especifica la posicin de d
crea un ndice clster. La c
datos FILESTREAM a otro
archivos FILESTREAM.
filestream_filegroup_name
FILESTREAM. El grupo de
el grupo de archivos, utiliza
DATABASE o ALTER DAT
Si se crean particiones de
incluirse y especificar un
FILESTREAM que utilice
particin que el esquema d
produce un error.
Si la tabla no tiene partic
columna FILESTREAM. L
estar almacenados en un
la clusula FILESTREAM_
NULL de FILESTREAM_O
CREATE INDEX si se va a
una columna FILESTREAM
PAD_INDEX = { ON | OFF }
Especifica el relleno de ndice. El valor predeterminado es OFF.
ON
El porcentaje de espacio disponible especificado por fillfactor se aplica a las
pginas de nivel intermedio del ndice.
No se especifica OFF ni fillfactor.
La opcin PAD_INDEX solamente resulta til si tambin se especifica
FILLFACTOR, porque PAD_INDEX utiliza el mismo porcentaje especificado por
FILLFACTOR. Si el porcentaje especificado para FILLFACTOR no es lo
suficientemente grande como para admitir una fila, Motor de base de datos
invalida internamente el porcentaje para permitir el valor mnimo. El nmero de
filas de una pgina de nivel intermedio del ndice no es nunca inferior a dos,
independientemente de lo bajo que sea el valor de fillfactor.
En la sintaxis compatible con versiones anteriores, WITH PAD_INDEX es
equivalente a WITH PAD_INDEX = ON.
FILLFACTOR =fillfactor
Especifica un porcentaje que indica cunto debe llenar el Motor de base
de datos el nivel hoja de cada pgina de ndice durante la creacin o
nueva generacin de los ndices. fillfactor debe ser un valor entero
comprendido entre 1 y 100. Si fillfactor es 100, el Motor de base de datos
crea ndices con pginas hoja rellenas en toda su capacidad.
El valor FILLFACTOR solo se aplica cuando se crea o se regenera el ndice.
Motor de base de datos no mantiene dinmicamente el porcentaje especificado
de espacio disponible de las pginas.
La creacin de un ndice clster con un valor de FILLFACTOR menor que 100
afecta a la cantidad de espacio de almacenamiento que ocupan los datos,
porque Motor de base de datos vuelve a distribuir los datos cuando crea el
ndice clster.
SORT_IN_TEMPDB = { ON | OFF }
Indica si deben almacenarse
valor predeterminado es OFF
ON
Los resultados de ordena inte
almacenan en tempdb. Esto
ndice si tempdb y la base de
distintos. Sin embargo, esto a
durante la creacin del ndice
OFF
Los resultados de orden interm
que el ndice.
Adems del espacio necesa
ndice, tempdb debe tener
almacenar los resultados de o
En la sintaxis compatible con
es equivalente a WITH SORT
IGNORE_DUP_KEY = { ON | OFF }
Especifica la respuesta de
insertar valores de clave
IGNORE_DUP_KEY se aplic
tras crear o volver a genera
ejecutan CREATE INDEX, A
es OFF.
ON
Se producir un mensaje de advertencia cuando se inserten valores de clave
duplicados en un ndice nico. Solo las filas que infrinjan la restriccin de
unicidad darn error.
OFF
Se producir un mensaje de error cuando se inserten valores de clave
duplicados en un ndice nico. Toda la operacin INSERT se revertir.
En la sintaxis compatible con
STATISTICS_NORECOMPU
STATISTICS_NORECOMPU
DROP_EXISTING = { ON | OFF }
Especifica que el ndice cl
quitarse y volver a generars
IGNORE_DUP_KEY no se puede establecer en ON para los ndices creados en
una vista, los ndices que no sean nicos, los ndices XML, los ndices
espaciales y los ndices filtrados.
ON
En la sintaxis compatible con versiones anteriores, WITH IGNORE_DUP_KEY
es equivalente a WITH IGNORE_DUP_KEY = ON.
El ndice existente se quita
especificado debe ser el mis
embargo, la definicin se p
columnas, criterio de ordena
ndice diferentes.
STATISTICS_NORECOMPUTE = { ON | OFF}
Especifica si se vuelven a calcular las estadsticas de distribucin. El valor
predeterminado es OFF.
ON
OFF
Se muestra un error si ya exis
Las estadsticas obsoletas no se vuelven a calcular automticamente.
OFF
Se habilita la actualizacin automtica de las estadsticas.
Para restaurar la actualizacin automtica de estadsticas, establezca
STATISTICS_NORECOMPUTE en OFF o ejecute UPDATE STATISTICS sin la
clusula NORECOMPUTE.
Deshabilitar el clculo automtico de estadsticas de distribucin puede impedir
que el optimizador de consultas elija los planes de ejecucin ptimos de las
consultas relativas a la tabla.
El tipo de ndice no puede cam
En la sintaxis compatible con
equivalente a WITH DROP_E
ONLINE = { ON | OFF }
Especifica si las tablas subya
para realizar consultas y mod
valor predeterminado es OFF
La instruccin CREATE INDEX se op
en operaciones de E/S, el procesador
lugar de realizar un recorrido de tab
algunos casos. En equipos con var
ms procesadores para realizar las operaciones de examen y orden asociadas a la
creacin del ndice, al igual que hacen otras consultas.
La operacin de creacin de ndices se registra al mnimo si el modelo de recuperacin
de base de datos se establece en Registro masivo o Sencillo.
Los ndices se pueden crear en una tabla temporal. Cuando se quita la tabla o finaliza la
sesin, se quitan los ndices.
Si crea un ndice en una tabla con pa
que desea ubicar el ndice, se crean p
la tabla subyacente. Esto se debe a
ubican en los mismos grupos de arc
con particiones del mismo esquema
particin. Cuando el ndice usa el mi
el ndice est alineado con la tabla.
Advertencia
Los ndices admiten propiedades extendidas.
ndices clster
La creacin de un ndice clster en una tabla (montn) o la eliminacin y nueva creacin
de un ndice clster existente requiere rea de espacio adicional disponible en la base
de datos para acomodar la ordenacin de datos y una copia temporal de la tabla original
o datos del ndice clster existente.
La creacin y regeneracin de ndic
particiones es posible, pero no se adm
o consumir excesiva memoria duran
ndices alineados cuando el nmero d
Cuando se crean particiones en un
agrega de forma predeterminada las c
clster, en caso de que no se hubiera
ndices nicos
Especificar opciones de ndice
Cuando existe un ndice nico, Motor de base de datos comprueba si hay valores
duplicados cada vez que se agregan datos con una operacin de insercin. Las
operaciones de insercin que generaran valores de clave duplicados se revierten y el
Motor de base de datos muestra un mensaje de error. Esto se cumple incluso si la
operacin de insercin cambia muchas filas pero crea un nico duplicado. Si se intenta
indicar datos donde existe un ndice nico y se ha especificado la clusula
IGNORE_DUP_KEY en ON, solo causarn un error las filas que infrinjan el ndice
UNIQUE.
ndices con particiones
La creacin y el mantenimiento de los ndices con particiones son similares a los de las
tablas con particiones pero, al igual que en ndices ordinarios, stos son tratados como
objetos de base de datos independientes. Puede tener un ndice con particiones en una
tabla que carezca de particiones, y puede tener un ndice sin particiones en una tabla
que tenga particiones.
SQL Server 2005 incluye opciones de
se especifican las opciones. En la s
option_name es equivalente a WITH (
ndice, se aplican las siguientes regla
Solo se pueden especifica
(option_name= ON | OFF).
Las opciones no se pueden
versiones anteriores y la nuev
especificar WITH (DROP_EX
instruccin.
Cuando se crea un ndice X
WITH (option_name= ON | OF
Clusula DROP_EXISTING
Puede utilizar la clusula DROP_EXISTING para volver a generar el ndice, agregar o
quitar columnas, modificar opciones, modificar el criterio de ordenacin de las columnas
o cambiar el grupo de archivos o el esquema de particin.
Si el ndice exige una restriccin PRIMARY KEY o UNIQUE, y la definicin de ndice no
se ha modificado en absoluto, se quita el ndice y se vuelve a crear conservando la
restriccin existente. Sin embargo, si se ha modificado la definicin de ndice, se genera
un error en la instruccin. Para cambiar la definicin de una restriccin PRIMARY KEY o
UNIQUE, quite la restriccin y agregue una restriccin con la nueva definicin.
DROP_EXISTING mejora el rendimiento cuando se vuelve a crear un ndice clster (con
el mismo conjunto de claves o con uno distinto) en una tabla que tambin tiene ndices
no clster. DROP_EXISTING reemplaza la ejecucin de una instruccin DROP INDEX
en el antiguo ndice clster seguida de la ejecucin de una instruccin CREATE INDEX
para el nuevo ndice clster. Los ndices no clster se vuelven a generar una vez,
siempre que la definicin de ndice haya cambiado. La clusula DROP_EXISTING no
vuelve a generar los ndices no clster cuando la definicin de ndice posee los mismos
nombres de ndice, clave y columnas de particin, atributo de unicidad y criterio de
ordenacin que el ndice original.
Independientemente de si se vuelven a generar o no los ndices no clster, stos
siempre permanecen en sus esquemas de particin o grupos de archivos originales, y
utilizan las funciones de particin originales. Si un ndice clster se vuelve a generar en
un esquema de particin o grupo de archivos diferente, los ndices no clster no se
mueven para coincidir con la nueva ubicacin del ndice clster. Por lo tanto, es posible
que incluso los ndices no clster alineados previamente con el ndice clster no se
puedan alinear con ste. Para obtener ms informacin sobre la alineacin de ndices
con particiones, vea.
La clusula DROP_EXISTING no volver a ordenar los datos si se utilizan las mismas
columnas de clave de ndice en el mismo orden y con la misma disposicin ascendente
o descendente, a menos que la instruccin del ndice especifique un ndice no clster y
la opcin ONLINE se establezca en OFF. Si se deshabilita el ndice clster, se debe
establecer ONLINE en OFF para la operacin CREATE INDEX WITH
DROP_EXISTING. Si se deshabilita un ndice no clster y no se asocia con un ndice
clster deshabilitado, se puede esta
CREATE INDEX WITH DROP_EXIST
Cuando se quitan o se vuelven a gen
de base de datos aplaza las canc
bloqueos asociados, hasta despus d
Opcin ONLINE
Las directrices siguientes se aplican
lnea:
La tabla subyacente no se p
operacin de ndice en lnea e
La operacin de ndice requie
Las operaciones en lnea se p
que contienen columnas calcu
Opciones de bloqueo de fila y pgin
Si ALLOW_ROW_LOCKS = ON y
bloqueos de nivel de fila, pgina y tab
de datos elige el bloqueo apropiado
bloqueo de fila o pgina a un bloqueo
Si ALLOW_ROW_LOCKS = OFF y AL
bloqueos de nivel de tabla cuando se
Ver informacin de ndice
Para devolver informacin sobre ndic
sistema y procedimientos almacenado
Compresin de datos
La compresin puede permitir que se almacenen ms filas en una pgina, pero
no cambia el tamao mximo de la fila.
Las pginas no hoja de un ndice no tienen compresin de pgina pero pueden
tener compresin de fila.
Cada ndice no clster tiene una configuracin de compresin individual y no
hereda la configuracin de compresin de la tabla subyacente.
Cuando se crea un ndice clster en un montn, el ndice clster hereda el
estado de compresin del montn, a menos que se especifique otro estado de
compresin.
Las restricciones siguientes se aplican a los ndices con particiones:
No se puede cambiar la configuracin de compresin de una particin nica si la
tabla tiene ndices no alineados.
La sintaxis ALTER INDEX <index> ... La sintaxis REBUILD PARTITION ...
vuelve a generar la particin especificada del ndice.
La sintaxis ALTER INDEX <index> ... La sintaxis REBUILD WITH ... vuelve a
generar todas las particiones del ndice.
EJEMPLO 368
Tomaremos como caso ejemplo crer un ndice agrupado no nico, para la colmna
acultad en la tabla Alumnos
CREATE CLUSTERED INDEX_I_Alumnos ON ALUMOS (Nomres);
EJEMPLO 369
Considerando qe tenemos una tabla llamda Alumnos , nos piden como restablecer
una restriccin PRIMARY KEY al campo Codigo, resaltando qe debemos
considerar un ndice agrupado.
Recordemos que cuando generamos un ndice agrupado nico y no nico , la diferencia
esta en UNIQUE
INDICE AGRUPADO UNICO
CREATE UNIQUE CLUSTERED Variale ON tabla COLUMNA
INDICE AGRUPADO NO UNICO
CREATE CLUSTERED Variable ON T
Y en una tabla solo pueden existir s
no agrupado seria NONCLUSTERE
ALTER TABLE ALUMNOS
ADD CONSTRAINT PK_Alumnos PR
Obseramos que no se va poder
solamente puede haber no por tabl
EJEMPLO 370
Establecer la restriccin PRIMAR
ALUMNOS, especificando que cree
ALTER TABLE ALUMNOS
ADD CONSTRAINT PK_Alumnos_co
Luego revisamos los ndices
SP_HELPINDEX Alumnos;
EJEMPLO 371
Crear un una restriccin o digamos
de la tabla ALUMNOS
CREATE UNIQUE NONCLUSTERED
EJEMPLO 372
Crear un ndice compuesto para la
CREATE INDEX I_Alumnos_nomresf
Observemos que se creo uno agru
ya existe uno arupado y o puede ex
Ahora si deseamos visualizar tod
debemos ejecutar:
SELECT NAME FROM SYS INDEXES WHERE NAME LIKE %ALUMNOS%
EJEMPLO 373
Crear una restriccin UNIQUE para la colmna FACULTAD de la tabla ALMNOS
ALTER TABLE alumnos
Add constraint U_Alumnos_acultad UNIQUE (FACULTAD);
EJEMPLO 374
Ahora visualize todos los ndice de la tala Alumos, lugo empleando SYS INDEXES
EJEMPLO 376
Como erificar si se eleimino el ndic
SP_HELPINDEX MATRICULA;
Recordemos que todos los elemen
respectivo nombre.
Identificadores Regulares
Es e
may
Identificadores delimitados
Es a
espe
may
los id
SP_HELPINDEX ALUMNOS;
SELECT NAME ROM SYSINDEXES WHERE NAME LIKE %ALUMNOS%;
EJEMPLO 375
Considerando que tenemos una tabla llamada MATRICULA, y nos piden ejecutar
las siguientes respuestas:
Genere un ndice no agrupado para la columna APELLIDOS
Establezca una restriccin PRIMARY KEY para la columna cdigo y
especifique que sea un ndice agrupado
Luego intente eliminar el ndice Index_matricula_apellidos, son especiicar
el nombre de la tabla.
Asimismo intente eliminar el ndice PK con DROP INDEX
Por ultimo ejecutemos eliminar el ndice empleando DROP INDEX
ALTR TABLE MATRICULA
CREATE NONCLUSTERED
(Apellidos);
INDEX_MATRICULA_APELLIDOS
ON
MATRICULA
ADD CONSTRAINT PK_MATRICULA_CODIGO PRIMARY KEY CLUSTERED (Codigo);
DROP INDEX INDEX_MATRICULA_APELLIDOS;
DROP INDEX PK_MATRICULA_CODIGO;
DROP INDEX MATRICULA_INDEX_AMATRICULA_APELLIDOS;
EJEMPLO 377 REPASO DEL CAPIT
Como renombrar una base de dato
ALTER DATAASE Nombre_base_dat
EJEMPLO 378
Mediante el uso de variables, crear
DECLARE @Tabla table(
Codigo
INT
PRIM
Nombres
VARCHAR(6
INSERT INTO @Tabla VALU
INSERT INTO @Tabla VALU
----- ----1100
DECLARE @intA INT = 100
SELECT @intA -= 1000 --(o
SELECT @intA [@intA]
@intA
----- -----900 -900
DECLARE @intA INT = 100
SELECT @intA *= 1000 --(o
SELECT @intA [@intA]
@intA
------ -----100000 100000
DECLARE @intA INT = 100
SELECT @intA /= 1000 --(o
SELECT @intA [@intA]
@intA
----- ----00
DECLARE @intA INT = 100
SELECT @intA %= 1000 --S
SELECT @intA [@intA]
@intA
----- ----100 100
ANEXO VARIABLES E INIDICES SQL SERVER 2008
SQL Server 2008 introduce algunas mejoras de T-SQL que se utiliza para mejorar el
rendimiento de base de datos y mantenimiento.
Declarar e inicializar las variables:
En SQL Server 2008, podemos declarar e inicializar las variables
Use master
DECLARE @intA
INT = 100
SELECT SELECT @intA
Resultado:
100
Se puede declarar e inicializar las variables en lneas separadas, de lo contrario, a
travs de un error
Use master
DECLARE @intA INT = 100
SELECT @intA
Error:
Msg 139, Level 15, State 1, Line 0
No se puede asignar un valor predeterminado a una variable local.
Msg 137, Level 15, State 2, Line 3
Debe declarar la variable escalar "@ INTA".
DECLARE @intA INT
SELECT @ IntA = 100 - (o) SET @intA = 100
SELECT @intA
Resultado
100
Operadores de asignacin compuestos:
Los operadores de asignacin compuestos son: + =, - =, * =, / =,% =
DECLARE @intA INT = 100
SELECT @intA += 1000 --(or) SELECT @intA = @intA + 1000
SELECT @intA [@intA]
@intA
TABLA constructor de valor:
Al insertar el valor de la tabla pod
IF OBJECT_ID ( 'TBL_TABLE1' ,
DROP TABLE TBL_TABLE1
GO
CREATE TABLE TBL_TABLE1
(
INT T ID
ID Identificacin
COL1 COL1 VARCHAR ( 10 )
COL2 COL2 VARCHAR ( 15 )
)
GO
INSERT TBL_TABLE1 ( COL1 , COL2 )
VALUES
( 'A' , 'AA' )
( 'B' , 'BB' )
( 'C' , 'CC' )
GO
INSERT TBL_TABLE1 ( COL1 , COL2 ) VALUES ( 'A' , 'AA' )
INSERT TBL_TABLE1 ( COL1 , COL2 ) VALUES ( 'B' , 'BB' )
INSERT TBL_TABLE1 ( COL1 , COL2 ) VALUES ( 'C', 'CC' )
GO
SELECT ID , COL1 , COL2 FROM TBL_TABLE1
Resultado:
ID Identificacin
COL1 COL1
COL2 COL2
----------- ---------- --------------- -----------------------------------11
A
AA
22
B
BB
33
C
CC
(3 row(s) affected)
Fecha y tipo de datos TIME:
SQL Server 2008 introduce cuatro FECHA y HORA Los tipos de datos: fecha, hora,
datetime2 DATATIMEOFFSET. Proporciona el valor de la splited FECHA y HORA.
DATETIME2, es una versin mejorada del tipo de datos DATETIME.. Proporciona los
datos de gran tamao y precisin. DATATIMEOFFSET es el DATETIME2 como un tipo
de datos, adems de con el componente de zona horaria.
SQL Server 2008
DATE FECHA
3 Bytes January-01-0001 to December-01-9999 (YYYY-MM-DD)
1947-08-15 08/15/1947
EL TIEMPO
3 to 5 Bytes (hh:mm:ss.nnnnnnn)
12:02:13.1234567
DATETIME2 DATETIME2 6 to 8 Bytes January-01-0001 to December-01-9999 (
DATE + TIME ) (YYYY-MM-DD (Fecha + Hora)
DATETIMEOFF 8 to 10 Bytes January-01-0001 to December-01-9999
SQL Server 2005
DATETIME 4 Bytes January-01-1753 to December-01-9999
SMALLDATETIME 2 Bytes January-01-1900 to June-06-2079
El formato por defecto y / o mxima es de 7 nanosegundos.
DECLARE @ A DATETIME2 ( 7 )
SELECT @A = '1947-08-15 12:02:13.
SELECT @ A
Resultado:
1947-08-15 12:02:13. 9370000
DECLARE @ A DATETIME2 ( 4
SELECT @A = '1947-08-15 12:02:13
SELECT @ A
Resultado:
1947-08-15 12:02:13. 9370
Si el nanosegundo no es necesario
DECLARE @ A DATETIME2 ( 0 )
SELECT @A = '1947-08-15 12:02:1
SELECT @A
Resultado:
1947-08-15 12:02:14
Functiones : Fecha y hora:
SYSDATETIME ()
SELECT SYSDATETIME () [SYSDA
SYSDATETIME()
2010-04-13 23:49:29.2343750
Al igual que en SQL Server 2005: GE
CURRENT_TIMESTAMP formato.
GETDATE () 2010-04-13 23:49:29.23
CURRENT_TIMESTAMP 2010-04-13
SYSUTCDATETIME ()
SELECT SYSUTCDATETIME () SYSU
SYSUTCDATETIME()
2010-04-13 18:23:02.6718750
Al igual que en SQL Server 2005: GE
Formato.
GETUTCDATE ()2010-04-14 05:19:29
SYSDATETIMEOFFSET ()
SELECT SYSDATETIMEOFFSET ()
[SYSDATETIMEOFFSET()]
SYSDATETIMEOFFSET()
2010-04-13 23:54:46.9843750 + 05:3
SWITCHOFFSET (DATETIMEOFFSE
SELECT SWITCHOFFSET ( SYSDATETIMEOFFSET (), '-02:12')
[SWITCHOFFSET()] [SWITCHOFFSET ()]
Se ajustar y devolver el datetimeoffset con zona horaria (-02:12) dado.
SWITCHOFFSET() SWITCHOFFSET ()
2010-04-14 13:48:41.8906250 -02:12
TODATETIMEOFFSET (expression , time_zone)
SELECT TODATETIMEOFFSET ( SYSDATETIMEOFFSET (), '-02:12' )
[TODATETIMEOFFSET()]
Se devolver el DatatimeOffset con la zona horaria (-02:12) dado.
TODATETIMEOFFSET()
2010-04-14 21:43:08.5937500 -02:12
XML
Este tipo de datos permite almacenar un documento XML en la columna de una tabla
relacional.
Tipo de datos definidos por el usuario
Se pued definir tipos de datos propios atraves de MANAGEMNT STUDIO o empleando
CREATE TYPE
Los procedimiento almacenados SP_ADDTYPE y
SD_DROPTYPE, no son
recomendables en emplearlos ya que no estn presentes en el SQL2008 para
adelante.
EJEMPLO 379
Como eliminar un tipo de datos
DROP TYPE [esquema] TYPE Nombre;
EJMEPLO 380
En este ejemplodetallaremos la elabo
Anteriormente escribamos de esta m
declare
@fecha datetime = getdate(),
@edad int = 36,
@nombre varchar(100) = Juan;
-- Muestro los valores...
select @fecha, @edad, @nombre
Ahora, en SQL Server 2008 es compl
Veamos esta sintaxis:
-- Incremento i, agrego algo al nombre
select @edad += 1, @nombre += ' P
-- Muestro los valores...
select @edad, @nombre;
Estos operadores funcionan incluso c
de incrementar en 100 la columna de
update tabla set columna1 += 100;
o realizar la operacin entre dos colum
update tabla set columna1 += column
Para la insercion de datos :
INSERT INTO Clientes
VALUES('Bernardo', 2, 0),
('Jose', 3, 1)
('Maria', 8, 1)
('Isabella', 5, 0)
TABLAS PERSISTENTES
FECHA Y HORA
EJMEPLO 381
EJMEPLO 382
Extraer los nuevos tipos de datos de F
-- Ejemplo con Hora
SELECT CAST(GETDATE() AS TIME
IF EXISTS (SELECT * FROM sys.table_types WHERE name = 'Perros')
DROP TYPE dbo.Perros
CREATE TYPE Perros AS TABLE
(
Nombre NVARCHAR(20) NOT NULL,
Peso INT NULL,
Vacunado BIT NOT NULL
)
-- Ejemplo con Fecha
SELECT CAST(GETDATE() AS Date
-- Ejemplo con DateTime2
SELECT CAST(GETDATE() AS Date
GO
DECLARE @Perros AS Perros
INSERT INTO @Perros (Nombre, Peso, Vacunado)
VALUES
('Hachi', 62, 0),
('Lucy', 47, 1),
('Popy', 59, 1),
('Rambo', 42, 1),
('Ranger', 34, 0)
-- Ejemplo con DateTimeoffset
SELECT CAST(GETDATE() AS Date
SELECT * FROM @Perros
HEARCHYID
SELECT * FROM (VALUES
EJMEPLO 383
Almacenar la siguiente estructura en u
HierarchyID
('Hachiko', 62, 0),
('Laica', 47, 1),
('Sunday', 59, 1),
('Peluza', 42, 1),
('Peluche', 34, 0))
AS Perros(Nombre, Peso, Vacuna)
-- Comparativa de los tipos de datos
SELECT CAST(GETDATE() AS TIME
CAST(GETDATE() AS Date) AS 'Fech
CAST(GETDATE() AS DateTime2) AS
CAST(GETDATE() AS DateT
-- CREAMOS LA TABLA
CREATE TABLE Organigrama
(Nodo hierarchyID PRIMARY KEY,
Nivel AS Nodo.GetLevel(),
Empleado INT,
Nombre VARCHAR(100),
Titulo VARCHAR(100) )
-- INSERTAR LA RAIZ
INSERT INTO Organigrama
VALUES(hierarchyid::GetRoot(), 16, 'Juanita Torres', 'Gerente General')
-- VISUALIZAR EL NODO EN TIPO TEXTO
SELECT Nodo.ToString() AS Nodo_Texto, Nivel, Empleado, Nombre, Titulo FROM
Organigrama o
--- INSERTAR EL SIGUIENTE NIVEL
INSERT INTO Organigrama
VALUES( (hierarchyID::GetRoot()).GetDescendant(NULL, NULL),
25, 'Pedro Martinez', 'Gerente de Operaciones' )
------------------- INSERTAR PRIMER R
Agregar_Organigrama 25, 12, 'Aman
Agregar_Organigrama 16, 63, 'Mario
Agregar_Organigrama 63, 5, 'Maria J
Agregar_Organigrama 16, 71, 'Carlos
SELECT Nodo.ToString() AS Nodo_T
FROM Organigrama o
HEARCHYID
-- VISUALIZAMOS LOS NODOS INSERTADOS
SELECT Nodo.ToString() AS Nodo_Texto, Nivel, Empleado, Nombre, Titulo FROM
Organigrama o
EJMEPLO 384
Realizar consultas sobre Hierarchy
Aqu una lista de los mtodos disponi
soporte a HiearchyID:
-- CREAMOS UN PROCEDIMIENTO ALMACENADO
CREATE PROC Agregar_Organigrama(@Jefe INT, @Empleado INT, @Nombre
VARCHAR(100), @Titulo VARCHAR(100))
AS
DECLARE @JefeNodo hierarchyID, @EmpleadoNodo hierarchyID
SELECT @JefeNodo = Nodo FROM Organigrama o WHERE o.Empleado = @Jefe
SELECT @EmpleadoNodo = MAX(Nodo) FROM Organigrama WHERE
Nodo.GetAncestor(1) = @JefeNodo
INSERT INTO Organigrama
VALUES(@JefeNodo.GetDescendant(@EmpleadoNodo, NULL), @Empleado,
@Nombre, @Titulo)
1.
2.
3.
4.
5.
GetAncestor, recibe un entero
GetDescendant, devuelve un n
GetLevel , indica el nivel del no
GetRoot , devuelve el nodo ra
IsDescendantOf, devuelve ver
descendiente de su padre
6.
Parse, convierte una represent
7.
Read, interpreta una representa
8.
Reparent, permite asignar un n
9.
ToString, devuelve una cadena
10. Write, escribe un HiearchyId en
Basado en estos mtodos r
creada.
--- BUSQUEDA DE RELACION JERA
DECLARE @Empleado hierarchyID
SELECT @Empleado = Nodo
FROM Organigrama o WHERE o.Em
SELECT * FROM Organigrama o WHERE @Empleado.IsDescendantOf(Nodo) = 1
--- BUSQUEDA DE HIJOS
DECLARE @Empleado hierarchyID
IDENT_INCR
Se emplea para conocer el increment
IDENT_SEED
Se emplea para conocer el valor inicia
SELECT @Empleado = Nodo
FROM Organigrama o WHERE o.Empleado = 16
SELECT Nodo.ToString(), * FROM Organigrama o
WHERE Nodo.GetAncestor(1) = @Empleado
EJMEPLO 385
Crear un tipo de datos que est compuesto por las siguientes columnas : Sexo,
apellido, nombre y edad
CREATE TYPE tdatos AS TABLE(
Sexo
char(1) CHECK(SEXO IN (Masculino,Femenino)),
Apellido
Varchar(40),
Nombre
Varchar(40),
Edad
Integer);
Otra de la manera para crear un tipo de datos desde el SQL MANAGEMENT
STUDIO, desde el explorador de l Base de datos encontraremos las opciones:
Diagramas, tablas, vistas, sinnimos, Programacin, luego Tipo y dentro de ella
Tipos definidos por el usuario y luego Nuevo Tipo de datos definido por el usuario
EJMEPLO 386
Consideremos que tenemos una tabla CLIENTE cuya columna tiene la propiedad
IDENTITY, queremos insertar registros
USE MASTER
GO
SET IDENTITY_INSERT Cliente ON
INSERT INTO Master.dbo.cliente (Codigo,ubicacion)
VALUES(100,Almacen01);
EJMEPLO 387
Haciendo uso de variables, diga
siguiente resultado
DECLARE @Monto
float
DECLARE@Tasa
float
DECLARE@x
char(1)
DECLARE@Totalx
int
SELECT @Totalx = COUNT(*) FROM
SELECT @Tasa =0.20;
SELECT @Monto = (Pagomes+0.20*
SELECT @x =Sexo
SELECT TOTAL DE CLIENTES =
IF (@x) =F PRINT Sexo Femenino
ELSE PRINT Sexo Masculino
NOTA
Si bien sabemos que desde SQL SERVER 2
sus nuevos desarrollos; ya que es preferible
la tabla o al efectuar una modificacin medi
De acuerdo a la tabla de conversiones de Fe
CONVERT , puesto que la manera mas senc
siguiente:
126 ISO8601 aaaa mm jj Thh;m:ss:mm
DECLARE @Fecha datetime2;
SET @Fecha =2010 08 27 T 09
SELECT @Fecha
SELECT CONVERT(char,@Fecha,103)
EJMEPLO 388
Diga usted como listar todos los nombres de las tablas de un usario identificado
para su numero
SELECT * FROM TABLA1 T1 RIGHT
T2.CampoA
EXEC Nombre_tabla 1
CROSS JOIN
Nos permite hacer un producto carte
Es una multiplicacin de ambas tabla
manera implcita.
---CROSS JOIN NORMAL
SELECT * FROM Tabla1 CROSS JOI
EJMEPLO 389
Haciendo uso de variables, diga usted como obtener la tabla Clientes, en el
siguiente resultado
DECLARE @Monto
float
Tipos de JOIN en T-SQL ANEXO REPASO
INNER JOIN
Permite combinar 2 o ms tablas a travs de al menos un campo en comn. Es la
unin natural entre las tablas. Los resultados son los datos que tienen un comn
ambas tablas.
SINTAXIS
SELECT * FROM TABLA1 T1 INNER JOIN TABLA2 T2 ON T1.CampoA = T2.CampoA
LEFT OUTER JOIN
Permite hacer una mezcla y conservar todos los valores de la tabla izquierda (la primera
tabla que se menciona en la consulta) sin importar que no tengan equivalente con la de
la derecha. Los resultados sern siempre todos los registros de la tabla izquierda
TABLA1 sin que exista coincidencia en la otra tabla TABLA2.
SINTAXIS
SELECT * FROM TABLA1 T1 LEFT OUTER JOIN TABLA2 T2 ON T1.CampoA =
T2.CampoA
RIGHT OUTER JOIN
Permite hacer una mezcla y conservar todos los valores de la tabla derecha (la segunda
tabla que se menciona en la consulta) sin importar que no tengan equivalente con la
primera. Los resultados sern siempre todos los registros de la tabla derecha TABLA2
sin que exista coincidencia en la otra tabla TABLA1.
SINTAXIS
---CROSS JOIN IMPLICITO
SELECT * FROM Tabla1 ,Tabla2
FULL OUTER JOIN
Es la combinacin completa. Nos per
valores de ambas tablas, lo
aparecern acompaados de un NUL
SELECT * FROM Tabla1 FULL OUTE
Tabla2.CampoA
Movimiento de Filas en una tabla
La instruccin DELETE permite elim
SINTAXIS:
DELETE FROM Nombre_objeto_o_t
EJEMPLO 390
Eliminar todas las ventas del opera
MOVIMIENTO y la de clientes CONT
DELETE FROM B FROM C
B.Codoperador=C.Codigo AND B.Cod
EJEMPLO 391
Consideremos que tenemos una tabla llamada CLIENTES y es necesario listar
todas las columnas que estn concatenadas y pueda mostrar los dos primeros
cdigos.
SELECT RTRIM(Nombre)+ +RTRIM(Apellidos) AS NOMBRES COMPLETOS ,
SUBSTRING(CONVERT(CHAR(8),Codigocli),1,2) CODIGO FROM CLIENTES
WHERE marca = 'SEAT';
Utilizando sentencias UPDATE combi
UPDATE tCoches
SET marca = (SELECT CODIGO FR
WHERE tMarcas.Marca = tC
WHERE marca IN ('FORD','RENAULT
EJEMPLO 392
Consideremos que tenemos la tabla de CLIENTES, similares al ejemplo anterior
pero es necesario listar todos los clientes que tengan mas de 06 registros
Por cada registro de la tabla tCo
campo marca a el valor del cdigo de
SELECT SUBSTRING(CONVERT(8),Codigocli),1,2), Cantidad = COUNT(*) FROM
CLIENTES GROUP BY SUBSTRING(CONVERT(CHAR(8),Codigocli),1,2) HAVING
COUNT(*)>6
EJEMPLO 393
Consideremos que tenemos tres tablas relacionadas entre si, las cuales son
MOVIM(Movimiento de ventas), ITEMMOVIM (Item de los movimientos de ventas )
y la tabla ARTICULOS (Stock de bienes del almacen)
SELECT
ARTICULOS.Codigobien,ARTICULOS.Detalle_bien,MOVIM.Numdocum,
day(MOVIM.Fecha),ARTICULOS.Stock,ARTICULOS.Undmed FROM MOVIM INNER
JOIN ITEMMOVIM ON MOVIM.Numdocum =ITEMMOVIM.Numdocum INNER JOIN
ARTICULOS ON ITEMMOVIM.Codigobien = ARTICULOS.Codigobien ORDER BY
ARTICULOS.Codigobien;
El uso de subconsultas para actual
La subconsulta slo puede de
La subconsulta slo puede de
El tipo de datos devuelto po
campo al que estamos asigna
No todos los sistemas de b
actualizar datos (Access) au
Server, Sybase ...)
Pero en nuestro ejemplo el campo
marca de la tabla tCoches es texto.
datos es capaz de convertir el valor
bien esta es una excepcin.
EJEMPLO 394
Empleando UPDATE ejecute insertar valores en una tabla
UPDATE tCoches
SET marca = '1'
WHERE marca = 'FORD';
UPDATE tCoches
SET marca = '2'
WHERE marca = 'RENAULT';
UPDATE tCoches
SET marca = '3'
Ahora que ya tenemos modific
conveniente modificar su tipo de dato
Para ello ejecutaremos las siguientes
PROCEDIMIENTOS ALMACENADO
Cuando nos referimos a los procedim
referimos al uso de los ASPX con el o
mediante el uso de Store Procedures
Que son procedimientos Almacenados: Es un conjunto de codigos del lenguaje que
utilizamos dentro de las bases de datos como por ejemplo: create table, insert into,
Select from. Que se almacena fisicamente en la base de datos y de la misma forma se
exportan cuando creamos una copia de seguridad de nuestra base de datos.
Ahora definimos el procedimie
registro(Recordemos que todo lo q
sentencia de cdigo puro de SQL SE
Ejecutamos el cogido y ahora probam
Como funcionan: Los procedimientos almacenados se basan en una estructura
definida por SQL SERVER
Iniciamos con:
CREATE PROCEDURE nombre_del_procedimiento @variables tipo(longitud) }
AS
BEGIN
Todo el codigo puro de base de datos
END
Como probamos: Esto es lo ms fcil de realizar solo necesitamos lo siguiente:
Escribimos EXEC nombre_del_procedimiento ' variables',12,' variables'
Nota: Es necesario resaltar que no necesariamente se deben definir variables en
el caso de un Select * From solo pondremos EXEC y nombre del procedimiento
Vamos a realizar un ejemplo donde aplicaremos lo antes aprendido
Elaboremos una base de datos
Luego la siguiente tabla
Codigo: 100
Nombre: Cesar
Apellido: Pereda Torres
Edad: 42
Universidad: Inca Garcilaso de la Veg
Ejecutamos el procedimiento alma
consideracin que: los campos tipo in
Para ejecutar el procedimiento al
procedimiento + las variables si fuera
GO
DECLARE @Afinidad varchar(100),
@sueldo smallmoney,
@descripcion varchar(750);
Ahora cuenaod revisemos la tabla observaremos el registro ingresado, pues funciona
sin ningun problema, para esto es necesario tomar en cuenta que todas las sentencias
de SQL SERVER se pueden enviar dentro de un procedimiento almacenado, inclusive
inner joins, busquedas &like entre otras.
Ejecutar un Procedimiento Almacenado
Consideremos que desde una sentencia SQL (Select, Insert, Update, Delete, Etc)
se puede lograr parametrizar la consulta y posteriormente elaborar su
procedimiento almacenado.
Vamos a considerar que tenemos una tabla llamada PERSONAL
USE personal;
GO
INSERT INTO dbo.CONTROL_PERSONAL (nombre, sueldo, Afinidad, fecha)
VALUES('Lucky Pereda', 275.50,'Hermano menor',GETDATE());
GO
SELECT TOP 1 * FROM dbo.CONTROL_PERSONAL ORDER BY id DESC;
GO
Asegurar que la sentencia SQL que ejecuten se realice correctamente.
SET @nombre = 'Ana Torres';
SET @sueldo = 14550;
SET @Afinidad = 'Tia';
INSERT INTO dbo.CONTROL_PERS
VALUES(@nombre, @sueldo,@Afinid
GO
SELECT TOP 2 * FROM dbo.CONTR
GO
Ya que tenemos la sentencia p
procedimiento almacenado, para esto
PROCEDURE SP de SQL Server
CREATE PROCEDURE <Procedure_
<@param1, sysname, @p1> <data
<default_value_for_param1, , 0>,
<@param2, sysname, @p2> <data
<default_value_for_param2, , 0>
AS
<Instrucciones T-SQL (Insert, Selec
GO
Primero es asignarle un nombre al S
Y asimismo crear el Batch de T-SQL q
El cdigo:
Luego : asignarles valores mediante INSERT y sustituirlos
USE PERSONAL;
CREATE PROCEDURE InsertaAfinid
@nombre varchar(100),
@sueldo smallmoney,
@Afinidad varchar(750)
AS
INSERT INTO dbo.CONTROL_PERSONAL (nombre, sueldo, Afinidad, fecha)
VALUES(@nombre, @sueldo,@Afinidad,GETDATE());
GO
Al usar tablas temporales dentro de u
de tener compilado el plan de ejec
producirn recompilaciones ms a m
intenta reutilizar el plan de ejecucin
tenemos una tabla temporal difcilmen
La ejecucin:
USE PERSONAL;
GO
En vez de tablas temporales pode
necesarias, podemos usar subco
mejora drsticamente el rendimie
tablas permanentes, usar tablas de
EXEC InsertaAfinidadSP 'Gunacho', 16667.80, 'Titular';
GO
Hay que recordar siempre que cualq
temporales (cursores excluidos por s
SELECT TOP 3 * FROM dbo.CONTROL_PERSONAL ORDER BY id DESC;
GO
De todos modos si alguna vez tenem
vamos a ello.
RECOMENDACIONES SOBRE EL USO DE TABLAS TEMPORALES
Tipos de tablas temporales
Las tablas temporales se crean en tempdb, y al crearlas se producen varios bloqueos
sobre esta base de datos como por ejemplo en las tablas sysobjects y sysindex. Los
bloqueos sobre tempdb afectan a todo el servidor.
Al crearlas es necesario que se realicen accesos de escritura al disco ( no siempre si las
tablas son pequeas)
Al introducir datos en las tablas temporales de nuevo se produce actividad en el disco, y
ya sabemos que el acceso a disco suele ser el "cuello de botella" de nuestro sistema
Al leer datos de la tabla temporal hay que recurrir de nuevo al disco. Adems estos
datos ledos de la tabla suelen combinarse con otros.
Al borrar la tabla de nuevo hay que adquirir bloqueos sobre la base de datos tempdb y
realizar operaciones en disco.
Las tablas temporales son de dos tip
temporales locales y tablas temporale
#locales: Las tablas temporales locale
y slo se pueden utilizar en la con
conexin termina la tabla temporal de
##globales Las tablas temporales
cualquier usuario conectado al SQL S
cuando ningn usuario est haciend
usuario que la creo.
Temp Realmente hay un tipo ms de
la base de datos temp es una tabl
cualquier otra tabla en cualquier b
desaparece en cuanto apagamos el s
SQL Dinamico en TSQL
EXEC (@sql)
Transact SQL permite dos formas de ejecutar SQL dinamico(construir sentencias SQL
dinamicamente para ejecutarlas en la base de datos):
Tambin con SQL dinamico pode
Definition Languaje), como CREAT
La instruccin EXECUTE - o simplemente EXEC
El procedimiento almacenado sp_executesql
Desde aqu recomendamos la utilizacin de sp_executesql si bien vamos a mostrar
la forma de trabajar con ambos mtodos.
DECLARE @sql nvarchar(1000)
SET @sql='CREATE TABLE TEMPO
La instruccin EXECUTE
( ID int IDENTITY, DATO va
La instruccin EXECUTE - o simplemente EXEC - permite ejecutar una cadena de
caracteres que representa una sentencia SQL. La cadena de caracteres debe ser de
tipo nvarchar .
El siguiente ejemplo muestra como ejecutar una cadena de caracteres con la
instruccin EXEC.
EXEC (@sql)
SET @sql = 'SELECT * FROM TEMP
DECLARE @sql nvarchar(1000)
EXEC (@sql)
SET @sql = 'SELECT
El uso de la instruccin EXEC es
que sp_executesql.
COD_PAIS,
NOMBRE_PAIS,
Para solventar el problema debe
permite el uso de parametros y co
nuestras consultas.
ACTIVO,
El procedimiento almacenado sp_e
FX_ALTA
Para ejecutar sql dinamico, se reco
sp_executesql, en lugar de una instr
FROM
PAISES'
sp_executesql admite la sus
sp_executesql es ms segur
sp_executesql genera planes de ejecucin con ms probabilidades de que
SQL Server los vuelva a utilizar, es ms eficaz que EXECUTE.
El siguiente ejemplo muestra el uso (muy simple) de sp_executesql.
El siguiente ejemplo muestra el us
DECLARE @sql nvarchar(1000)
DECLARE @sql nvarchar(1000),
@paramDefinition nvarchar
SET @sql = 'SELECT
@paramValue char(3)
COD_PAIS,
NOMBRE_PAIS,
SET @paramDefinition = '@codPais c
ACTIVO,
SET @paramValue = 'ESP'
FX_ALTA
SET @sql = 'SELECT
FROM
COD_PAIS,
PAISES'
NOMBRE_PAIS,
ACTIVO,
EXEC sp_executesql @sql
FX_ALTA
sp_executesql admite la sustitucin de valores de parmetros para cualquier parmetro
especificado en la cadena Transact-SQL a ejecutar.
FROM
PAISES
WHERE COD_PAIS = @
EXEC sp_executesql @sql, @paramDefinition, @paramValue
DECLARE @db_id SMALLINT
, @db_name SYSNAME
Insertar valores en una table temporal con todas las tablas y los indices existentes
OPEN c1
FETCH NEXT FROM c1 INTO @db_i
INSERT INTO ##objetos (dbid, database_name, objectid, object_name, indexid,
index_name, xtype)
WHILE (@@fetch_status <> -1)
SELECT dbid, db_name, so.id, so.name, si.indid, si.name, so.xtype FROM
BEGIN
<base_datos>..sysobjects so join
IF (@@fetch_status <> -2)
<base_datos>..sysindexes si on so.id = si.id WHERE so.id > 0
BEGIN
-- obtener todos los dbid, objectid
DECLARE @sql NVARCHAR(4000)
SET NOCOUNT ON
SET @sql = 'INSERT INTO ##objetos
indexid, index_name, xtype) '
GO
IF NOT OBJECT_ID ('tempdb.dbo.##objetos') IS NULL
DROP TABLE ##objetos
CREATE TABLE ##objetos (dbid INT, database_name SYSNAME, objectid INT,
object_name SYSNAME, indexid INT, index_name SYSNAME NULL, xtype char(2))
DECLARE c1 CURSOR READ_ONLY
FOR SELECT dbid, name FROM master..sysdatabases where dbid >= 5
SET @sql = @sql + 'SELECT ' + CAS
CAST(@db_name AS SYSNAME)
+ ''', so.id, so.name, si.indid, si.name,
@db_name + '..sysobjects so join ' +
@db_name + '..sysindexes si on so.id
EXEC (@sql)
END
FETCH NEXT FROM c1 INTO @db_id, @db_name
END
CLOSE c1
DEALLOCATE c1
SELECT * FROM ##objetos
EJEMPLO 395
Modificar los datos nombres,Apellidos y sexo de la tabla CLIENTES cuyo cdigo
es CPT001
UPDATE Gune.dbo.CLIENTES SET Nombres =Mariluisa,
Apellido=Pascal,Sexo=F,Direccion=NULL WHERE Codigocli=CPT001;
GO
Deliver BI Data Secure
MEMORIA AYUDA
Ahora el R2 de SQL SERVER 2008 trae Potentes herramientas de BI en expansin para
todos los usuarios con SQL Server PowerPivot para Excel y la potenciacin de una
nueva clase de los usuarios de negocios para generar y compartir potentes soluciones
de BI con poco o ningn soporte de TI, mientras todava permite TI supervisar y
gestionar soluciones de BI generados por el usuario.
Herramientas de anlisis autoservicio permiten a los usuarios finales crear rpidamente
soluciones dentro de una familiar interfaz de usuario de Microsoft Office Excel de
orgenes de datos distintas. Mediante la publicacin de estas soluciones en SharePoint
Server, los usuarios pueden fcilmente compartirlos con otros. TI obtiene una
administracin y supervisin por lo que pueden ayudar a garantizar la fiabilidad,
rendimiento y seguridad de los activos controladas por datos en toda la empresa, al
tiempo que obtiene tambin una mayor visibilidad de la manera en que las personas
utilizan sus datos.
Improve Data Quality
Garantiza la coherencia de presentacin de informes a travs de datos y sistemas por lo
que es ms rpido, puede ofrecer resultados ms precisos en toda la empresa con
herramientas que permiten adoptar un enfoque centralizado para definir, implementar y
administrar datos maestros. El concentrador de datos maestros en SQL Server 2008 R2
proporciona a las organizaciones una forma coherente para realizar el seguimiento de
las versiones de datos maestros y responder a las preguntas sobre datos maestros en
puntos especficos en el tiempo. Datos maestros consistentes mejoran la calidad de los
sistemas de datos para toda la empresa y ayuda a mantener los requisitos
operacionales y de negocios de inteligencia.
Crear, editar y actualizar los datos maestros eficientemente a travs de un portal central.
Los portales de la administracin de datos maestros proporciona control centralizado de
datos maestros, incluidos los miembros y las jerarquas y permite a los administradores
de modelo de datos garantizar la calidad de los datos por desarrollar, revisin y gestin
de modelos de datos y su aplicacin coherente en todos los dominios.
Extender el control efectivo de TI a cr
de una consola de administracin cen
y el PowerPivot add-in para Share
usuarios finales pueden publicar s
SharePoint, lo que permite el Depar
control de versiones, el acceso de us
el Departamento de TI para controlar
ayudar a asegurar la disponibilidad co
mayor conocimiento sobre lo que da
ayudar a prevenir la proliferacin de a
Enable Self-Service Analysis and E
Ampliar el alcance de herramientas de
fomentar el anlisis ad-hoc para capa
analticas a travs de la PowerPivot
SQL Server 2008 R2. Con Power
soluciones mediante datos de fuentes
avanzados anlisis ad-hoc y model
publicar y compartir informes para sus
Permiten anlisis autoservicio mante
plataformas apoyados por TI como Sh
garantizando accesibilidad y TI gober
Producir nuevos conocimientos y ex
datos geoespaciales junto con otras
2008 R2 admite la asignacin, enr
espaciales y facilita la tarea de co
empresas, crear una nueva clase de s
Simplificar la recopilacin de datos
consolidacin con herramientas que
datos de diferentes fuentes. Datos
combinar los datos existentes, desde las bases de datos corporativas o fuentes externas
y analizan mediante herramientas familiares en Office Excel.
VISTAS MANTENIMIENTO DE DA
Build Rich Applications with all Data
Producir nuevos conocimientos y experiencias ms ricos mediante la integracin de
datos geoespaciales junto con otras fuentes de datos corporativos y tipos. SQL Server
2008 R2 admite la asignacin, enrutamiento, formas personalizadas y otros datos
espaciales y facilita la tarea de combinar con otros datos y mapas de Bing para
empresas, crear una nueva clase de soluciones basadas en datos ricas.
Simplificar la recopilacin de datos que requieren mucho tiempo y las tareas de
consolidacin con herramientas que facilitan el crear "datos mash ups", que combinan
datos de diferentes fuentes. Datos mash ups proporcionan nuevas maneras de
combinar los datos existentes, desde las bases de datos corporativas o fuentes externas
y analizan mediante herramientas familiares en Office Excel.
En el modelo de datos relacional la
para ver los datos
VISTAS EN SQL
Una vista es una consulta, que refle
que se puede acceder a los datos c
Dos son las principales razones por la
Seguridad, nos pueden intere
la informacin que hay en una
Comodidad, como hemos dic
visualizar los datos, lo que
sentencias SQL, tener una vis
Las vistas no tienen una copia fsica
las tablas, por lo que si actualizam
realmente la tabla, y si actualizamos l
Nota: No siempre podremos actua
complejidad de la misma (depende
la clave principal de la tabla o no
gestores de bases de datos permi
lo permite, mientrar que SQL Serve
CREACION DE VISTAS
Para crear una vista debemos utilizar
debiendo proporcionar un nombre a la
CREATE VIEW <nombre_vista>
AS
(<sentencia_select>);
Por ltimo podemos eliminar la vista a
la vista que hemos creado anteriorme
DROP VIEW vAlquileres;
Ejemplo: Crear una vista sobre nuestra tabla alquileres, en la que se nos muestre
el nombre y apellidos del cliente en lugar de su cdigo.
CREATE VIEW vAlquileres
AS
(
SELECT nombre,
apellidos,
matricula
FROM tAlquileres,
tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)
Si queremos, modificar la definicin de nuestra vista podemos utilizar la sentencia
ALTER VIEW, de forma muy parecida a como lo haciamos con las tablas. En este
caso queremos aadir los campos fx_alquiler y fx_devolucion a la vista.
ALTER VIEW vAlquileres
AS
(
SELECT nombre,
apellidos,
matricula,
fx_alquiler,
fx_devolucion
FROM tAlquileres,
tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)
Recordemos que una vista se cons
Una vista es una tabla virtual cuyo
igual que una tabla real, una vista
datos con un nombre. Sin embar
existe como conjunto de valores de
filas y las columnas de datos proce
consulta que define la vista y se
referencia a la vista.
Una vista acta como filtro de las ta
en ella.
La consulta que define la vista puede
vistas de la base de datos actual u o
las consultas distribuidas para d
heterogneos. Esto puede resultar de
estructura similar que proceden de
almacena los datos para una regin d
No existe ninguna restriccin a la hora
hora de modificar los datos de stas.
En esta ilustracin se muestra una vis
Las principales razones por las que
Seguridad, nos pueden interesar que
informacin que hay en una tabla, per
Comodidad, como hemos dicho el
visualizar los datos, lo que nos pued
SQL, tener una vista nos simplifica es
Las vistas no tienen una copia fsica de los datos, son consultas a los datos que hay en
las tablas,
por lo que si actualizamos los datos de una vista, estamos actualizando realmente la
tabla, y si actualizamos la tabla estos cambios sern visibles desde la vista.
Nota: No siempre podremos actualizar los datos de una vista, depender de la
complejidad de la misma (depender de si el conjunto de resultados tiene acceso
a la clave principal de la tabla o no).
Antes de crear una vista, considere las siguientes indicaciones:
Slo puede crear vistas en la base de datos actual. Sin embargo, las tablas y las vistas
a las que se haga referencia desde la nueva vista pueden encontrarse en otras bases
de datos e, incluso, en otros servidores, si la vista se define mediante consultas
distribuidas.
Los nombres de las vistas deben seguir las reglas que se aplican a los identificadores y
ser nicos para cada esquema. Adems, el nombre debe ser distinto del de las tablas
incluidas en ese esquema.
Es posible generar vistas dentro de otras vistas. Microsoft SQL Server permite anidar
vistas.El anidamiento no debe superar los 32 niveles. Es posible que el lmite real del
anidamiento de vistas sea inferior en funcin de la complejidad de la vista y de la
memoria disponible.
No puede asociar con las vistas reglas ni definiciones DEFAULT.
Los desencadenadores AFTER no se pueden asociar con las vistas; slo se
pueden asociar los desencadenadores INSTEAD OF.
La consulta que define la vista no puede incluir las clusulas COMPUTE ni COMPUTE
BY, y tampoco puede incluir la palabra clave INTO.
La consulta que define la vista no puede incluir la clusula ORDER BY, a menos que
tambin haya una clusula TOP en la lista de seleccin de la instruccin SELECT.
La consulta que define la vista no puede incluir la clusula OPTION que especifica una
sugerencia de consulta.
La consulta que define la vista no puede incluir la clusula TABLESAMPLE.
No se pueden definir definiciones de ndice de texto completo en las vistas.
No se pueden crear vistas temporales
Las vistas, las tablas o las funciones q
SCHEMABINDING no se pueden qu
forma que deje de tener un enlace
TABLE sobre tablas que participa
provocarn un error si estas instruccio
Si una vista no se crea con la
sp_refreshview
cuando se realicen cambios en los ob
definicin de sta. De lo contrario,
cuando se realiza una consulta.
No puede emitir consultas de texto
vista puede incluir una consulta de tex
configurada para la indizacin de text
Debe especificar el nombre de toda
I. Alguna de las colum
una funcin integrada
II. Dos o ms columnas
nombre (normalmente
combinacin y las co
mismo nombre).
III. Desee darle a una c
columna de la que d
columnas en la vista
datos de la columna d
EJEMPLO 396
Crear una vista sobre la tabla alqui
apellidos del cliente en lugar de su
CREATE VIEW vAlquileres
AS
(
SELECT nombre,
apellidos,
matricula
FROM tAlquileres,
tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)
Si queremos, modificar la definicin de nuestra vista podemos utilizar la sentencia
ALTER VIEW, de forma muy parecida de cmo se realiza con las tablas. En este
caso queremos aadir los campos fx_alquiler y fx_devolucion a la vista.
ALTER VIEW vAlquileres
AS
(
SELECT nombre,
apellidos,
matricula,
fx_alquiler,
fx_devolucion
FROM tAlquileres,
tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)
Por ltimo podemos eliminar la vista a travs de la sentencia DROP VIEW. Para
eliminar la vista
que hemos creado anteriormente se utilizara:
DROP VIEW vAlquileres;
VISTAS INDEXADAS
Una vista indexada (o indizada) es una vista que ha materializado un conjunto de
valores nicos en forma de ndice agrupado. Otro nombre que toman estas vistas viene
de ah precisamente: vistas materializadas, el cual es el nombre que toman en SGBDs
como Oracle. Su ventaja es que proporcionan una bsqueda rpida para colocar
informacin junto a una vista. Tras el primer ndice, el cual ha de ser agrupado de un
conjunto nico de valores, podemos crear ndices adicionales sobre la vista usando la
clave agrupada del primer ndice como punto de referencia. De todas formas, este tipo
de vistas tiene una serie de restricci
ndices sobre las vistas.
EJEMPLO 397
Crear una tabla llamada Alumna
ndices, cuya base de datos se llam
USE Pruebas
GO
CREATE TABLE [dbo].[Alumnado](
[Id_Alumnos] [int] IDENTITY(1,1) NO
[Nombre] [varchar](100) NOT NULL,
[Descripcion] [varchar](8000) NOT NU
[Id_Pais] [int] NULL)
CREATE TABLE [dbo].[Paises](
[Id_Pais] [int] IDENTITY(1,1) NOT NU
[Pais] [varchar](50) NOT NULL)
SET STATISTICS IO ON Hace que S
con la cantidad de actividad de dis
SQL.
SET STATISTICS IO ON
Insertemos registros en la tabla Al
INSERT INTO DBO.Alumnado (Nomb
(Almendra,'Alumna peruana Alquimi
INSERT INTO DBO.Alumnado (Nomb
(Arabela,'Alumna peruana Arabela,1
INSERT INTO DBO.Alumnado (Nomb
(MaHar,'Alumnosa espaola ,2)
Insertamos registros en Paises
INSERT INTO DBO.Paises (Pais) VA
INSERT INTO DBO.Paises (Pais) VA
SELECT dbo.Paises.Id_Pais, dbo.Paises.Pais, COUNT_BIG(*) AS NumeroAlumnado
FROM dbo.Alumnado INNER JOIN
dbo.Paises ON dbo.Alumnado.Id_Pais = dbo.Paises.Id_Pais
GROUP BY dbo.Paises.Id_Pais, dbo.Paises.Pais
Ahora crearemos una vista indexada apartir de la tabla Alumnado
CREATE VIEW DBO.NumerodeAlumnado
WITH SCHEMABINDING
AS
SELECT dbo.Paises.Id_Pais, dbo.Paises.Pais, COUNT_BIG(*) AS NumeroAlumnado
FROM dbo.Alumnado INNER JOIN
dbo.Paises ON dbo.Alumnado.Id_Pais = dbo.Paises.Id_Pais
GROUP BY dbo.Paises.Id_Pais, dbo.Paises.Pais
GO
Creamos el indice sobre la vista
CREATE UNIQUE CLUSTERED INDEX Id_Pais ON
DBO.NumerodeAlumnado(Id_Pais)
Mostramos la vista
SELECT * FROM DBO.NumerodeAlumnado
Eliminamos las tablas y la vista creada
DROP TABLE DBO.Alumnado
DROP TABLE DBO.Paises
DROP VIEW DBO.NumerodeAlumnado
Consultas de tablas y de Vistas en SQL
En Sql Server tenemos una sencilla consulta que nos devolver las tablas y vistas de
una base de datos:
SELECT * from Information_Schema.Tables
De aqu nos interesa el campo table_
es una tabla o una vista). Por tanto, fi
campo table_type).
Para saber si existe una tabla en
vistas) podemos utilizar la sigu
Clientes):
SELECT * from Information_Schem
Si esta consulta nos devuelve registro
vaco, es que no existe.
EJEMPLO 398
CREAR LA VISTA PROVEEDORES
CREATE VIEW VIEW_CODPROVEE
AS
SELECT S.CODPROVEEDOR,S.NOM
,P.CODPRODUCTO,P.NOMBREPRO
FROM PROVEEDORES AS S INNER
ON S.CODPROVEEDOR=P.COPROV
GO
CREACION DE LA VISTA CON INST
CREATE VIEW VIEW_SUBTOTALES
AS
SELECT OD.ORDERID,SUM(CONVE
DISCOUNT)/100))*100)
FROM [Detalles de Pedido] OD
GROUP BY OD.ORDERID
GO
LLAMAR A LA CONSULTA ANTERI
SELECT * FROM VIEW_SUBTOTALE
Ahora procedamos a visualizar las vistas
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='VIEW'
/*
SOLO LOS DEL ROL DEL SISTEMA SYSADMIN, O DE EL ROL DE BASE DE DATOS
DB_OWNER,
DB_DLADMIN HACEN CONSULTAS
O BIEN AL TENER PERMINOS CREATE VIEW Y PERMISOS DE SELECT EN LAS
TABLAS A UTILIZAR
-NO SE PUEDE USAR COMPUTE COMPUTE BY
-NO SE PUEDE USAR ORDER BY SO SI SE USA TOP
-NO SE PUEDE HACER REFERENCIA A TABLAS TEMPORALES
-NO SE PUEDE HACER REFERENCIA A MAS DE 1024 COLUMNAS
-NO SE PUEDE COMBINAR CREATE VIEW EN OTRO LOTE
*/
BORRAR UNA VISTA
FROM PROVEEDORES AS S INNER
ON
S.CODPROVEEDOR=P.COPROVEE
GO
Ahora deseamos consultar toda la
INFORMATION_SCHEMA
SI ESTA PUESTO WITH ENRCRYPT
SELECT * FROM INFORMATION_S
vistas y tablas
SELECT * FROM INFORMATION_S
sysdepends
--Nombres de las tablas o vistas ba
SELECT * FROM INFORMATION_SC
-Definicin de como se hicieron las
SELECT * FROM INFORMAT
syscolumns
--tablas y vistas base y Columnas d
DROP VIEW VIEW_SUBTOTALES
ALTERAR UNA VISTA
ALTER VIEW VIEW_SUPPLIER_PRODUCS
AS
SELECT S.CODPROVEEDOR,S.NOMBRE,S.DIRECCION
,P.CODPRODUCTO,P.NOMBREPROD P.PUNITARIO
FROM PROVEEDORES AS S INNER JOIN PRODUCTOS AS P
ON
S.CODPROVEEDOR=P.COPROVEEDOR
GO
ESCONDER EL CODIGO DE LA VISTA NO ELIMINE LAS ENTRADAS DE
syscomments
ALTER VIEW VIEW_SUPPLIER_PRODUCS
WITH ENCRYPTION
AS
SELECT S.CODPROVEEDOR,S.NOMBRE,S.DIRECCION
,P.CODPRODUCTO,P.NOMBREPROD P.PUNITARIO
PARA VER EL SCRIPT DE UNA CO
SP_HELPTEXT
SP_HELPTEXT [ORDERS QRY]
SP_DEPENDS [ORDERS QRY] --NO
PUEDE HACER INSERCIONES EN U
CHECK OPTION OBLIGA A QUE
COMPRUEBEN CONTRA EL WHERE
CREAR UNA VISTA CON WITH CHE
CREATE VIEW CLIENTESARGENTI
AS
SELECT * FROM CUSTOMERS WHE
WITH CHECK OPTION
ESTA INSERCION DEBE PRODUCIR
PRODUCIR UN ERROR.
INSERT CLIENTESARGENTINA
(CUSTOMERID,COMPANYNAME,CONTACTNAME,CONTACTTITLE,CITY,COUNTRY)
VALUES
('VHCVV','UNIVERSIDAD GALILEO','VICTOR HUGO CARDENAS','VENTAS
AGENT','GUATEMALA','GUATEMALA')
WITH CHECK OPTION
CREACION DE UNA TABLA PARA COMPROBAR LA INSERCCION A MULTIPLES
TABLAS
CREATE VIEW PROVEEDORES_PRODUCTOS
AS
WITH ENCRYPTION
SELECT S.CODPROVEEDOR,S.NOMBRE,S.DIRECCION
,P.CODPRODUCTO,P.NOMBREPROD P.PUNITARIO
FROM PROVEEDORES AS S INNER JOIN PRODUCTOS AS P
ON S.CODPROVEEDOR=P.COPROVEEDOR
CREACION DEL INDICE, EL PRIMER INDICE DEBE SER UN INDICE UNICO
AGRUPADO
CREATE UNIQUE CLUSTERED INDEX CL_SUPPLIERID
ON DBO.PROVEEDORES_PRODUCTOS (SUPPLIERID,PRODUCTID)
CREACION DE OTROS INDICES NO AGRUPADOS
CREATE NONCLUSTERED INDEX VIEW_PRODUCTNAME
ON PROVEEDORES_PRODUCTOS(PRODUCTNAME)
Exige que todas las instrucciones de
adhieran a los criterios establecidos
mediante una vista, WITH CHECK
visibles en toda la vista despus de co
Indica que SQL Server cifra
que
contienen
el
texto
de
WITH ENCRYPTION evita que
duplicacin de SQL Server.
SCHEMABINDING
Enlaza la vista al esquema.
select_statement
debe
incluir
(propietario.objeto)
de
las
por el usuario a las que se hace refere
Las vistas o las tablas que
la clusula de enlace de es
de forma que deja de tener
SQL Server genera un error.
sobre tablas que
participan
esquemas provocarn un er
la definicin de la vista.
PARA REVISAR SI ES INDEXABLE UNA CONSULTA
VIEW_METADATA
SELECT OBJECTPROPERTY
(object_id('DBO.PROVEEDORES_PRODUCTOS'),'IsIndexable')
Especifica que SQL Server devolve
informacin de metadatos sobre la v
soliciten los metadatos del modo de e
a la vista. Los metadatos del modo d
por SQL Server a las API DB-LIB, OD
del cliente implementar cursores
del
modo
de
exploracin
base a la que pertenecen las columna
Para las vistas creadas con la opcin VIEW_METADATA, los metadatos del modo de
exploracin devuelven el nombre de vista en vez de los nombres de la tabla base
cuando se describen las columnas de la vista en el conjunto de resultados.
Cuando se crea una vista WITH VIEW_METADATA, todas sus columnas (excepto
timestamp) son actualizables si la vista tiene los desencadenadores INSERT o UPDATE
INSTEAD OF. Consulte Vistas actualizables, ms adelante en este captulo.
EJEMPLO 399
Crear una Vista en relacin a la tabla ALUMNOS
CREATE VIEW VALUM AS
SELECT
Tipo=
CONVERT(Char(5),cd_alumno)+-+
Apellido_paterno,Apellido_materno,Edad FROM ALUMNOS
GO
SELECT * FROM VALUM;
Tipo
1001 - PEREDA PASCAL
1002 - PASCAL AMPUDIA
1003 - PEREDA TORRES
1004 - PEREDA LUCKY
Edad
16
38
42
6
Recordemos que para crear vistas tambin se pueden emplear mediante SQL
SERVER MANAGEMENT STUDIO dentro del explorador de objetos , para luego
seleccionar las opciones de vistas, (Nueva Vista)
NOTA
Debemos de dsaber que cuando aplicamos los operadores tales como cadenas, como por ejemplo
SUBSTRING , lo podemos efectuar y ejecutar en la misma consulta, de esta manera:
TITULO = SUBSTRING(COLUMNA,1,10)
Uso de SUBSTRING
Esta funcin devuelve una parte de un
de texto, y toma los parmetros siguie
Una cadena de caracteres o b
que da como resultado una ca
La posicin en la que debe em
La longitud, en nmero de ca
cadena que se va a devolver.
En el ejemplo siguiente se muestra la
USE Padrones;
GO
SELECT SUBSTRING(FirstName, 1,
FROM Person.Person;
GO
En el ejemplo siguiente se muestra el
de cadena abcdef:
SELECT x = SUBSTRING('abcdef', 2,
La funcin SUBSTRING () se utiliza
posicin dada de partida para una lon
SELECT TOP 100
SUBSTRING (course_designater, 6,
Desde cursos
DONDE course_designater LIKE '% E
Formatear una columna mediante substring () y LOWER () y UPPER () funciones
Es posible utilizar el INFERIOR SQL Server () y alta () en conjuncin con la funcin
SUBSTRING () para llevar a cabo diferentes tipos de formato.
SELECT TOP 10
SUPERIOR (SUBSTRING (apellido, 1,1)) + Baja (SUBSTRING (apellido, 2,29))
AS 'Apellido'
DESDE estudiantes
EJEMPLOS 400 REPASO
En una tabla llamada VENTAS, que se encuentra en un base de datos llamada
ALMACEN, efectuar un incremento del Precio de venta en 20%, con la condicin
que dicho precio sea mayor o igual que 20
UPDATE Almacen.dbo.Ventas SET P_Venta=P_venta*1.02 WHERE P_costo>=20;
Actualizar el campo UBICACION de la tabla Personal por Region Norte , si y solo si
el campo llamado Desempeo, sea Jefatura
USE Alamacen
UPDATE Almacen.dbo.Personal SET ubicacin =Region Norte WHERE
Desempeo=Jefatura;
EJEMPLO 401 - REPASO
Tenemos una tabla llamada Resultado de Ventas, nos piden actualizar las
cantidades de los pedidos de los productos vendidios cuyo cdigo del articulo
sea 2020A de la Factura Numero 1000
UPDATE [Resultado de Ventas] SET Cantidad = Cantidad*100 WHERE Factura=1000
and Codigo_articulo =2020A ;
EJEMPLO 402 - REPASO
Actualizar el campo CIUDAD con LIMA a todos los registros de loc clientes cuya
Provincia sea PV_LIMA
UPDATE Almacen.dbo.personal SET Ciudad =Lima WHERE Provincia=PV_LIMA;
EJEMPLO 403 - REPASO
Dentro de una tabla STOCKS, actualizar la cantidad de stocks del producto
110011, que se encuentre ubicado en el almacn 07, respecto a todas las lneas de
pedido que conciernen a ese articulo.
UPDATE Stocks SET Cant_stock =C
Lineas _pedido1 WHERE 1.A
Stocks.referencia_art =110011 and S
NOTAS: DELETE y TRUNCATE
Cuando manejamos una base de dat
(CREATE TABLE), inserciones (IN
(UPDATE); dentro de las operacio
borrado. Borrado de diferentes tipos:
todos los datos de una tabla o de la t
con su sintaxis y un ejemplo.
Manejamos para el ejemplo una tabla
que almacena bsicamente la siguien
de salida.
DELETE
Borra una serie de filas de la tabla. P
filas a borrar, a las que cumplan una c
DELETE FROM nombre_tabla WHER
Para nuestro caso:
DELETE FROM entradas WHERE id
TRUNCATE
A diferencia de DELETE, TRUNCAT
tabla. Tambin resetea los contadore
tal, la llamada estructura, por lo que
sintaxis es:
TRUNCATE TABLE nombre_tabla;
puede dejar pginas vacas,
medio de un proceso de limpi
Y para nuestro caso:
TRUNCATE TABLE entradas;
La instruccin TRUNCATE TABLE es un mtodo rpido y eficiente para eliminar todas
las filas de una tabla. TRUNCATE TABLE es equivalente a la instruccin DELETE sin
una clusula WHERE. Sin embargo, TRUNCATE TABLE es ms rpida y utiliza menos
recursos de registro de sistema y de transacciones.
En comparacin con la instruccin DELETE, TRUNCATE TABLE ofrece las siguientes
ventajas:
Utiliza menos espacio de registro de transacciones.
La instruccin DELETE quita una a una las filas y graba una entrada en el
registro de transacciones por cada fila eliminada. TRUNCATE TABLE quita los
datos al cancelar la asignacin de las pginas de datos utilizadas para
almacenar los datos de la tabla y slo registra la pgina de asignaciones
anuladas en el registro de transacciones.
Como en el caso de DELETE, la d
TABLE permanece en la base de dat
Si la tabla contiene una columna d
restablece al valor de inicializacin d
inicializacin, se utiliza el valor pre
identidad, utilice DELETE.
DROP
Finalmente llegamos a DROP. A dif
datos, sino que tambin eliminar la es
DROP TABLE nombre_tabla;
Y para nuestro caso:
DROP TABLE entradas;
DROP DATABASE
Suele utilizar menos bloqueos.
Cuando la instruccin DELETE se ejecuta mediante un bloqueo de fila, cada fila
de la tabla se bloquea para su eliminacin. TRUNCATE TABLE siempre bloquea
la tabla y la pgina pero no cada fila.
A modo de bonus os traigo una instru
de borrar una tabla, borra una bas
sentencia IF EXISTS de forma que e
de datos (muy til a la hora de hacer c
Sin excepcin, las pginas vacas permanecen en la tabla.
DROP DATABASE [IF EXISTS] nomb
Despus de ejecutar una instruccin DELETE, la tabla todava puede contener
pginas vacas. Por ejemplo, las pginas vacas de un montn no se pueden
desasignar sin por lo menos un bloqueo de tabla exclusivo (LCK_M_X). Si la
operacin de eliminacin no utiliza un bloqueo de tabla, la tabla (montn)
contendr muchas pginas vacas. Para los ndices, la operacin de eliminacin
Y para nuestro caso:
DROP DATABASE blog;
Sealar que en MySQL no eliminar la estructura de permisos asociada a la base de
datos. Para ello usaremos GRANT, pero de eso ya hablaremos en otra entrada en la
que comentaremos los permisos con MySQL.
EJEMPLO 404
Tomar como ejemplo una operacin TRUNCATE, para esto consideramos los
datos: CLIENTE es una base de datos y CONTROL es una tabla
USE CLIENTE
GO
TRUNCATE TABLE CONTROL;
EJEMPLO 405
Ahora vamos a desarrollar un ejemplo donde vamos a deshacer una operacin
USE PADRON
GO
BEGIN TRAN
-- Obtener el numero de filas
SELECT COUNT(*) FROM PERSONAL
TRUNCATE TABLE PERSONAL
-- Ahora vamos a deshacer la operacin TRUNCATE
ROLLBACK TRAN
-- Ahora podemos observar que al deshacer la operacin las filas continan
SELECT COUNT(*) FROM PERSONAL;
En el capitulo anterior hablamos sobre consultas recursivas, ademas tocamos el
temas de estos tipos de complejidades y que pueden ser empledas mediante el
uso de SELECT asi como INSERT, UPDATE y DELETE
LAS TABLAS CTE
Las tablas CTE en SQL2008 son
consultas CTE slo hay un CON y ca
otro utilizando ","
Despus de la seccin de definicin
declaracin principal de selecci
En esta parte del CTE las tablas se p
datos SQL. Usted puede unirse a las
tipos de combinacin externa, etc
Mltiple Sintaxis CTE
Aqu est la base de sintaxis SQL par
Server puede utilizar mltiples CTE 's
WITH CTE1 AS (
SELECT TOP 2 Name FROM Ven
),
CTE2 AS (
SELECT TOP 2 ProductNumber, N
),
CTE3 AS (
SELECT TOP 2 Name FROM Per
)
SELECT * FROM CTE1,CTE2,CT
-- Or use INNER JOIN, LEFT JOIN
A pesar de lo anterior CTE mltiple u
un resultado visible, en el MS SQL
probable que encontrar soluciones pa
varias consultas del CTE.
Aqu es un simple sql mltiples CTE que se compone de dos consultas de CTE en
una instruccin Select TSQL.
) CTE
WHERE rn <= 3
Si usted descargar e instalar MS SQL Server 2008 bases de datos de ejemplo,
puede ejecutar la siguiente instruccin Select mltiples CTE directamente sobre la
base de datos de ejemplo AdventureWorks2008.
Y la salida de la anterior consulta S
WITH CTE1 AS (
select
ProductID, SUM(OrderQty) as TotalOrderQty
from Ventas.VentasOrderDetail
group by ProductID
),
CTE2 AS (
select
p.ProductID, pc.ProductCategoryID, pc.Name
from Trabajo.Product p
inner join Trabajo.ProductSubcategory psc
on psc.ProductSubcategoryID = p.ProductSubcategoryID
inner join Trabajo.ProductCategory pc
on pc.ProductCategoryID = psc.ProductCategoryID
)
SELECT * FROM (
SELECT
CTE2.ProductCategoryID,
CTE2.Name,
CTE1.ProductID,
CTE1.TotalOrderQty,
rn = ROW_NUMBER() OVER (PARTITION BY CTE2.ProductCategoryID
ORDER BY CTE1.TotalOrderQty DESC)
FROM CTE1
INNER JOIN CTE2 on CTE1.ProductID = CTE2.ProductID
NOTA
Recordemos que cuando creamos las tabla
intersecciones, actualizaciones y eliminacio
emplearemos tres instrucciones conocidas
Pues las modificaciones de los valores de
la instruccin update; esta instruccin pued
Las instruccin UPDATE puede cambiar los
las filas de una tabla o vista.
SET
DEFAULT
Especifica la lista de los
Especifica que el valor p
valor existente en la colu
NULL si no tiene valor pr
EJEMPLO 406
AHORA vamos a generar otro ejem
CTE llamada PEDIDO de la tabla MO
WITH PEDIDO AS (
SELECT Num_pedido,Nombres, Apellidos FROM MOVIMIENTOS WHERE
Num_factura BETWEEN 10 AND 30)
SELECT * FROM PEDIDO ;
Recordemos que una vez creada la tabla CTE, es necesario activar y utilizar la tabla,
caso contrario generaramos un error; asimismo que de acuerdo al uso de las tablas
CTE pueden ser consideradas como una tabla temporal local (#tabal_temporal).
EJEMPLO 407
Crear una tabla CTE donde est contemplada la tabla PRODUCTO y cuya
condicin del filtro sea que la descripcin del articulo contenga la cadena NEGR
antes del ultimo carcter.
WITH ART01 AS(
SELECT Nombre_art,marca,Precio FROM PRODUCTO WHERE Nombre_art
LIKE %NEGR_)
SELECT * FROM ART01;
Lo que debemos saber es que las tablas CTE son mas fciles de crear que las
tablas temporales y adems no se debe utilizar en ellas las instrucciones
COMPUTE, ORDER BY, INTO, FOR y XML ni mucho menos FOR BROWSE.
MEMORIA AYUDA
SEGURIDAD EN SQL 2008.
La seguridad sigue siendo un punto m
aun mas su importancia ahora que las
debe ser protegida, particularmente
importancia para las empresas.
SQL Server ahora puede usar claves
seguridad de hardware de terceros. A
pueden cifrar en un mtodo que es tr
a la base de datos.
Esto significa que los administradores
los datos almacenados en una base d
aplicacin existente. La primera m
Administracin extensible de claves
disponible en las ediciones Enterpris
EKM posibilita que los proveedores
claves empresariales y mdulos de
Module) registren sus dispositivos en
registrados, los usuarios pueden us
mdulos. Estos proveedores pued
avanzadas (como el vencimiento y
algunas configuraciones, esto pe
administradores de bases de datos q
del sistema. Las instrucciones de cif
los datos usando las claves alma
caracterstica nueva, el cifrado de da
de datos sin tener que alterar ningun
de E/S en tiempo real de los archivos
cifrado de base de datos (DEK, Da
registro de arranque de base de
recuperacin. La DEK est protegida
datos maestra del servidor.
Adems de la seguridad que podemos poner a travs de polticas de grupo y la del
propio sistema operativo, SQL Server 2008 cuenta con un esquema de seguridad muy
interesante tanto para la validacin del usuario como la seguridad de los datos.
Aunque la autenticacin todava implica el determinar y verificar quien es el usuario que
intenta acceder a la base de datos, es necesario mejorar los mtodos de autenticacin
existentes. SQL Server 2008 proporciona caractersticas de autenticacin ms robustas
que proveen un mejor soporte al servidor y los datos.
SQL Server Authentication proporciona la autentificacin para los clientes no-Windows o
para las aplicaciones usando una secuencia simple de conexin que contiene las
identificaciones del usuario y contraseas. Este tipo de logon es fcil de usar y popular
entre los desarrolladores de aplicacin, sin embargo no es tan seguro como la
autenticacin de Windows y no es recomendado como un mecanismo de autenticacin.
SQL Server 2008 tiene varias mejoras en la autenticacin con SQL. Primero, Soporta la
encripcin del canal por default a travs del uso de certificados generados por SQL. Los
administradores no tienen que adquirir e instalar un certificado SSL vlido para asegurar
que el canal por el que viajan las credenciales del usuario de SQL Sea seguro. Con SQL
Server 2008 automticamente generas estos certificados, el cual encripta el canal de
manera automtica y por default cuando se transmiten los paquetes de validacin. Esto
ocurre con los clientes de SQL Server 2005 o superior. El certificado nativo generado
por SQL Server protege contra el ataque pasivo del hacker cuando este esta
monitoreando la red para tratar de sacar provecho y obtener acceso a la informacin
Los permisos en SQL Server son ahora granulares, de tal forma que ahora puedes
asignar permisos especfico en lugar de otorgarlos en base a un role que probablemente
le de mas permisos de los que ocupa. ahora tienes por mucho ms entidades seguras, a
las cuales puedes asignar los permisos que son ms granulares. Adems de la
proteccin reforzada para los datos de usuario, la informacin estructural y los meta
datos sobre una entidad particular estn disponibles ahora solamente para los usuarios
principales que tienen permiso para tener acceso a dicha entidad.
autenticacin Kerberos se ha amplia
Canalizacin con nombre, Memoria c
forma predeterminada, el controlad
correcto para una instancia de SQ
especificar explcitamente un SPN en
la seguridad, el control y la solucin d
no proporciona acceso a ASP.NET,
servidor de informes. En SQL Serve
solicitudes de autenticacin a travs
compatible con la autenticacin ba
Reporting Services hospeda las tecno
incorporadas en el Common Langu
capacidades del sistema operativo. E
que acepta las solicitudes y las dirige
configuracin del servidor. Ahora la
administran directamente por el servid
Mejoras de la autenticacin Como probablemente sepa, Kerberos es un protocolo de
autenticacin de redes que proporciona un medio sumamente seguro para autenticar
mutuamente las entidades cliente y servidor (o las entidades principales de seguridad)
en una red. Kerberos ayuda a los usuarios a mitigar vulnerabilidades de seguridad como
los ataques por seduccin o de tipo "man-in-the-middle". En relacin con la
autenticacin NTLM de Windows, Kerberos es ms seguro, ms robusto y ofrece un
mejor rendimiento. Para autenticar una conexin mutuamente con Kerberos, los
nombres principales de servicio (SPN, Service Principal Nombress) de una instancia de
SQL Server deben registrarse en Active Directory, y un controlador de cliente debe
proporcionar un SPN registrado durante la conexin. En SQL Server 2008, la
Auditoras de la seguridad
Con SQL Server 2005 tu puedes e
personalizado en el Transact SQL qu
bases de datos. SQL Server 2008 tie
la encriptacin transparente de dato
todas las operaciones criptogrficas
necesidad de que un desarrollador te
descifrado de los datos. Los datos s
grabados en el disco y los desencrip
administrador de SQL para el encript
asegurar los datos del negocio en la
aplicaciones existentes
SQL Server Audit es una caracte
personalizadas de eventos de motor
aumentados para registrar inform
herramientas y procesos necesarios
en varios objetos de servidor y base d
que SQL Server Trace y SQL Se
supervisin de los registros de audito
capturando instrucciones SELECT,
EXECUTE para usuarios individuales. Adems, SQL Server Audit se puede incluir
totalmente en scripts con las instrucciones de T-SQL CREATE SERVER AUDIT y
CREATE SERVER AUDIT SPECIFICATION y sus instrucciones relacionadas ALTER y
DROP. Para establecer la auditora, debe crear una auditora y especificar la ubicacin
en la que se registrarn los eventos auditados . Las auditoras se pueden guardar en el
registro de seguridad de Windows, el registro de aplicaciones de Windows o en un
archivo situado en la ubicacin que especifique. A continuacin, le da un nombre a la
auditora y configura sus caractersticas, como la ruta de acceso al archivo de auditora y
su tamao mximo. Tambin puede seleccionar que se cierre SQL Server si la auditora
genera errores. Y si necesita registrar los eventos auditados en ms de una ubicacin,
slo tiene que crear ms de una auditora. El siguiente paso consiste en crear una o
ms especificaciones de auditora. Una especificacin de auditora de servidor recopila
informacin acerca de la instancia de SQL Server e incluye objetos de mbito de
servidor, como los inicios de sesin y la pertenencia a funciones de servidor. Incluye
tambin informacin de base de datos que se administra en la base de datos maestra,
como el derecho de acceso a una base de datos. Al definir una especificacin de
auditora, tambin indica qu auditora recibir los eventos supervisados. Puede definir
varias auditoras de servidor y mltiples especificaciones de auditora de servidor, pero
cada auditora de servidor puede incluir slo una especificacin de auditora de servidor
habilitada a la vez. Tambin puede crear especificaciones de auditora de base de datos
que supervisen los eventos de una sola base de datos. Puede agregar varias
especificaciones de auditora de base de datos a una auditora, pero una auditora de
servidor slo puede habilitar una especificacin de auditora de base de datos por cada
base de datos a la vez. Los eventos de accin de auditora de SQL Server que se usan
para las especificaciones de auditora de servidor se agrupan en colecciones de eventos
de accin de auditora relacionados. stos se exponen como grupos de accin de
auditora. Al agregar un grupo a la especificacin de auditora, podr supervisar todos
los eventos incluidos en ese grupo. Por ejemplo, hay un grupo de accin de auditora
llamado DBCC_GROUP que expone los comandos DBCC. Sin embargo, los comandos
DBCC no estn disponibles para auditoras individuales. Hay 35 grupos de accin de
auditora disponibles para el servidor, algunos de los cuales estn estrechamente
relacionados entre s. Por ejemplo, hay un SUCCESSFUL_LOGIN_GROUP, un
FAILED_LOGIN_GROUP y un LOGOUT_GROUP. Hay tambin un tipo de accin de
auditora AUDIT_ CHANGE_GROUP que puede usar para auditar el proceso de
auditora. Las especificaciones de auditora de base de datos tambin pueden
especificar grupos de eventos de accin de auditora reunidos en grupos de accin de
auditora a nivel de base de datos. Adems de los grupos de accin de auditora, la
especificacin de auditora de base de datos puede incluir eventos de accin de
auditora individuales para auditar instrucciones de lenguaje de manipulacin de datos.
Estos eventos se pueden configurar
objetos especficos de base de datos
puede usar para auditar consultas S
Estos eventos tambin se pueden co
o usuarios especficos, como todo d
auditora SELECT para auditar las co
de usuario Mara y la funcin de b
pblica. Claramente, esto ofrece mu
que necesita.
AUDITORIA DE SEGURIDAD
En versiones anteriores de SQL Server, dispone una variedad de herramientas para
auditar acciones realizadas contra el servidor de SQL Server.
En la siguiente tabla se le muestra las distintas tcnicas utilizadas hasta ahora con sus
ventajas e inconvenientes:
Tcnica
Ventajas
Desventajas
Disminuye el rendimiento del
servidor
Habra que crearlo en cada tabla
DML Triggers
Penaliza el rendimiento
Se
generan
por
cdigo.
Controlan cambios en la definicin
DDL Triggers
No todos los eventos estn
de objetos
disponibles
Limitaciones
con
los
filtros
Trazas
del
Captura muchos tipos de eventos Si se detiene el servicio, se
Profiler
detiene la traza
Auditora C2
Captura casi todos los eventos a
disco
Controla
INSERT
DELETE
UPDATE
Algunos ejemplos de que tcnica se usara para cada caso, son los siguientes:
Como controlo quien cambia la definicin de una tabla: DDL Trigger
Como se quien realiza cada INSERT en una tabla: DML Trigger
Como puedo saber las consultas que realiza un usuario en una base de datos:
SQL Profiler con filtros
Como puede deducir, al final debera usar una combinacin de distintas tcnicas para
tener bien auditado su servidor, lo cual eleva la carga administrativa sustancialmente.
En SQL Server 2008, la auditora va ms all. Grficamente, podr recoger cualquier
evento que ocurra en el servidor o en una base de datos en concreto agregando los
filtros que necesite con una nica herramienta: La auditora
Implica el seguimiento y registro de eventos que ocurren en el sistema. Basndose en la
informacin acumulada que sera capaz de rastrear los cambios en la base de datos, el
acceso a la base de datos, etc Una auditora es la combinacin de varios elementos en
un solo paquete para un grupo espe
acciones. Los componentes de SQL
que se llama una auditora, as como
elementos de datos produce un inf
eventos para ayudar a crear una audi
Principios Basicos Porque auditam
Tener polticas de seguridad es un f
auditora tambin nos ayuda a identif
un ataque sea exitoso.
En SQL 2005 el enfoque estaba orie
privilegio mayores a los que necesi
personal autorizado. La herramienta q
de datos era el SQL Profiler ya que p
insertar, actualizar o eliminar registros
o la creacin de nuevos Logins.
Una de las mejoras que trajo SQL
capacidad de auditora a travs de
funcionalidad se puede rastrear y reg
a nivel del servidor o a nivel de la ba
objeto Audit. Veamos entonces com
especificacin de auditora a nivel d
visualizar los registros de auditora.
Si bien estamos trabajando con SQL
presentes cuatro cosas en mente:
1.SQL Server Audit
2.Especificacin de auditora de servi
de servidor)
3.Base de datos de auditora pliego d
de datos especfica)
4.Target (sera el caso de los eventos
Crear una Auditora
Un objeto de auditora es una colecci
de acciones que podrn ser rastread
auditora para identificar todos los
localizacin que se especifique. Se
eventos de aplicaciones o la bitcora
El objeto de auditora se puede crear a travs del Management Studio (SSMS) o
utilizando T-SQL. Desde SSMS se debe presionar el botn de la derecha del mouse
sobre la opcin New Audit localizada en la carpeta de auditora bajo el rbol de
Seguridad, como se muestra a continuacin:
En la pantalla Create Audit se debe ingresar el nombre del objeto de auditora, y se
debe especificar el destino. Si se indica que el destino ser un archivo, hay que
especificar la ruta donde ser almacenado. Finalmente se debe presionar el botn OK
para crear el objeto de auditora.
Para propsitos de este ejemplo cr
nombre AuditarConsultasTablaEmp
indique la ruta donde desee almace
carpeta Audits, como se muestra a
para
rastrear
las
transaccione
HumanResources.Employee de la ba
SQL Server Audit
El objeto de SQL Server Audit recoge
las acciones a escala y los grupos d
nivel de la instancia de SQL Server.
instancia de SQL Server. Cuando se
la salida de los resultados. Este es e
estado de movilidad reducida, y no de
Despus de la auditora est habilitad
auditora.
son exitosos. Para lograrlo debemo
sobre la carpeta Server Audit Specifi
Asigne a la especificacin de audit
LoginsFallidos. Bajo audit seleccione
especificacin de auditora Especific
auditora AuditarLoginsFallidos. S
FAILED_LOGIN_GROUP y presione
Presione el botn de la derecha d
LoginsFallidos para habilitar la esp
Audit Specification
Si desea crear un objeto de auditora a travs de T-SQL lo puede hacer utilizando el
comando CREATE SERVER AUDIT. La siguiente consulta crea el objeto
AuditarConsultasTablaEmpleado. Esta operacin fue realizada anteriormente a travs
de SSMS.
USE master
CREATE SERVER AUDIT [AuditarConsultasTablaEmpleado]
TO FILE (FILEPATH = N'C:\TEMP');
Crear y habilitar una especificacin de auditora a nivel de Servidor
Una vez se ha creado los objetos de auditora, el siguiente paso es crear las
especificaciones apropiadas de auditora. Las especificaciones de auditora le indican al
objeto de auditora lo que debe rastrear. En el caso del objeto de auditora llamado
AuditarLoginsFallidos, debemos crear una especificacin que busque los logins que no
Finalmente debe habilitar el objeto de
mouse sobre AuditarLoginsFallidos
Enable Audit como se muestra en la s
Ejecutar y Crear una auditora a niv
Para crear y habilitar una especifica
expandir la base de datos, en este e
de la derecha del mouse la opcin
la base de datos. Seleccione la opci
nombre
(para
propsito
de
EspecificacionAuditoriaDB-Consultas
Si desea crear una especificacin de auditora a nivel de servidor, a travs de T-SQL, lo
puede hacer utilizando el comando CREATE SERVER AUDIT SPECITICATION. La
siguiente consulta crea la especificacin de auditora EspecificacionAuditoriaServidorLoginsFallidos. Esta operacin fue realizada anteriormente a travs de SSMS.
USE master
CREATE SERVER AUDIT SPECIFICATION [EspecificacionAuditoriaServidorLoginsFallidos]
FOR SERVER AUDIT [AuditarLoginsFallidos]
ADD (FAILED_LOGIN_GROUP) WITH (STATE = ON)
GO
Especificacin de auditora de servidor
El objeto de auditora de servidor Especificacin pertenece a una auditora. Puede crear
una especificacin de auditora de servidor por la auditora, ya que ambos se crean en el
alcance de la instancia de SQL Server. La especificacin de auditora de servidor recoge
servidor de muchos grupos de accin a nivel nacional planteadas por el extendido
Eventos caracterstica. Usted puede incluir a los grupos de accin de auditora en una
especificacin de auditora de servidor. Los grupos de accin de auditora son grupos
predefinidos de acciones, que son los eventos atmicos expuestos por el motor de base
de datos. Estas acciones son enviados a la auditora, que registra en el objetivo.
Servidor de auditora de los grupos de nivel de accin se describe en el tema de SQL
Server Grupos de auditora de acciones y acciones.
Como
se
muestra
en
la
AuditarConsultasTablaEmpleado B
auditora EspecificacionAuditoriaDBAuditarConsultasTablaEmpleado.
Nota: La clase de objeto se utiliz
opciones son: Objeto, Base de da
Tablas, Funciones, Procedimientos
son entidades que pueden solicitar
Para propsitos de este ejemplo, seleccione SELECT en el tipo de accin para auditar;
en la clase del objeto seleccione OBJECT; en el nombre del objeto ingrese
[HumanResources].[Employee]; en el nombre del Principal ingrese [public] y presione
OK para crear y asignar el objeto de auditora.
Esto permite rastrear las consultas con SELECT que realizan todos los usuarios a la
tabla [HumanResources].[Employee].
Presione el botn de la derecha del mouse sobre EspecificacionAuditoriaDBConsultasTablaEmpleado para habilitar la especificacin a travs de la opcin: Enable
Database Audit Specification
Si desea crear una especificacin de
SQL, lo puede hacer utilizando
SPECITICATION. La siguiente c
EspecificacionAuditoriaDB-Consultas
anteriormente a travs de SSMS.
USE master
CREATE DATABASE AUDIT SPECIF
FOR SERVER AUDIT [Audit-Employe
ADD (SELECT ON OBJECT::[Human
WITH (STATE = ON)
GO
Visualizar los registros de auditora
Los registros de auditora pueden ser
travs de la bitcora de eventos de a
se especific que se almacenara la a
Finalmente debe habilitar el objeto de auditora presionando el botn de la derecha del
mouse sobre AuditarConsultasTablaEmpleado para habilitar la auditoria a travs de la
opcin Enable Audit como se muestra en la siguiente figura.
sencilla ya que solo se requiere es
un archivo, la bitcora de eventos
seguridad), que objeto se desea
Funciones, Procedimientos Alma
(entidades que pueden solicitar rec
Especificacin de base de datos de
El objeto de auditora de base de
Auditora de SQL Server. Puede crea
por base de datos de SQL Server p
base de datos de base de datos reco
por el extendido Eventos caracters
auditora de la accin o los eventos
base de datos. Los sucesos de aud
auditados por el motor de SQL Serv
predefinidos de acciones. Ambos se
SQL Server. Estas acciones son en
Base de datos de auditora de los gru
se describe en el tema de SQL Serve
Los resultados pueden ser filtrados o inclusive hasta exportados en los siguientes
formatos: log, csv y txt
La auditora en SQL 2008 Enterprise es muy poderosa y flexible ya que permite
crear auditoras a nivel de servidor o a nivel de base de datos. La configuracin es
Los resultados de una auditora son e
registro de sucesos de seguridad de
para Windows. (Escribir en el registro
Registros deben ser revisados y arch
destino tiene espacio suficiente para
registro de seguridad de Windows re
aade a la Generar auditoras de seg
y Servicio de red forman parte de es
utilizando el complemento de la po
acceso a objetos de auditora de po
xito y el fracaso. Esta configuracin
la poltica de seguridad-en (secpol.m
puede configurar la aplicacin ms g
comandos mediante el programa de l
ms informacin acerca de los pa
seguridad de Windows, vea Cmo:
registro de seguridad. Para obtener m
vase el artculo de Knowledge Bas
configurar la auditora de seguridad
son globales para el sistema operativo Windows. Para obtener ms informacin acerca
de los registros de sucesos de Windows, consulte el Visor de sucesos general. Si usted
necesita permisos ms precisa sobre la auditora, el uso del archivo de destino binario.
Para obtener ms informacin acerca de la auditora de los registros por escrito a la
meta, vea SQL Server Audit Records.
NOTA: Cualquier usuario autenticado puede leer y escribir en el registro de sucesos de
la aplicacin de Windows. El registro de sucesos de la aplicacin necesita un nivel de
permisos que el registro de sucesos de seguridad de Windows y es menos seguro que
el registro de sucesos de seguridad de Windows.
Tipos de Datos FileStream SQL 200
Tipo de Dato FileStream
Para almacenar datos no estructurad
texto, archivos de audio, etc. Algunas
de datos la ruta donde el archivo se
Claro que esto trae problemas de se
en la ruta, o la necesidad de coordina
El tipo de dato FILESTREAM nos tra
las aplicaciones utilizar las API de st
de archivos, y a su vez mantener una
seguridad entre la informacin estruct
La seguridad para los objetos almace
los mismos privilegios que cualquie
establecer los permisos a la tabla o l
tiene permisos de acceso a la column
a ella.
El tipo de dato FILESTREAM es im
totalmente integrado en el motor. Lo
de respaldo y restauracin para resgu
Antes que nada es necesario habilitar
EXEC sp_filestream_configure
@enable_level = 3,
@share_name = "RecursoCompa
Donde @enable_level = 3, habilita el
local y remoto; y @share_name = "Re
compartido en el sistema de archivos.
EJEMPLO
Crear una tabla con un campo FILESTEAM y su sintaxis para insertar datos:
Crea un tabla que contiene infromacin adicional como FILESTREAM
CREATE TABLE dbo.Persona
(
ID int,
Nombre varchar(100),
InfoAdicional varbinary(max) FILESTREAM
);
GO
--Agrego el registro en la tabla
Insert into dbo.Persona
Values(1,'Juanita Torres',Cast ('Aqui informacin adicional' As varbinary(max)))
Go
Veamos esta sintaxis:
-- Incremento i, agrego algo al nom
select @edad += 1, @nombre += ' w
-- Muestro los valores...
select @edad, @nombre;
Estos operadores funcionan inclus
forma de incrementar en 100 la colu
update tabla set comlumna += 100;
o realizar la operacin entre dos colum
update tabla set columna1 += column
MERGE
Es aconsejable utilizar el tipo de dato FILESTREAM cuando los objetos a almacenar son
en promedio mayor a 1 Mb, y su acceso rpido de lectura es un punto a considerar.
Para objetos de tamao menor, es recomendable seguir utilizando el tipo de dato
varbinary(max), el cual provee un rendimiento menor en estos casos.
Una pequea mejora introduce SQL Server 2008 al lenguaje T-SQL respecto de la
inicializacin y asignacin de variables. Cuntas veces hemos deseado escribir cdigo
de la siguiente manera:
declare
@fecha datetime = getdate(),
@edad int = 36,
@nombre varchar(100) = 'carlos';
-- Muestro los valores...
select @fecha, @edad, @nombre
En versiones anteriores hubisemos obtenido el siguiente error de sintaxis:
Msg 139, Level 15, State 1, Line 0Cannot assign a default value to a local variable.
Ahora, en SQL Server 2008 es completamente vlido.
Este comando se lo conoce inform
inserciones o actualizaciones (UPDAT
Este ejemplo insertar un registro en
Fuente, de existir se actualizar el cor
MERGE INTO Destino D
USING Fuente F ON F.Id = D.Id
WHEN MATCHED THEN UPDATE
SET D.Cantidad = F.cantidad
WHEN NOT MATCHED THEN INSER
VALUES (F.Id, F.Cantidad)
Esta instruccin es posible definir qu
de una tabla cuando stos se encuen
origen distinto.
En el siguiente ejemplo aadiremos
(person.CountryRegion de la base d
existan previamente. Si se prod
actualizaremos su fecha de modificac
MERGE dbo.Paises AS target
USING
(
SELECT CountryRegionCode,
Name
FROM Person.CountryRegion
) AS source (codigo,nombre)
ON target.IDPais=source.codigo
WHEN MATCHED THEN UPDATE SET FechaModif=SYSDATETIME()
WHEN NOT MATCHED THEN INSERT VALUES (codigo,nombre,SYSDATETIME());
Es importante observar la sintaxis de la instrucciones update e insert, ya que en
ninguna de ambas se especifica la tabla donde se realiza la operacin (se supone
que es la tabla de destino o target, que en nuestro caso es la tabla dbo.Paises).
Esta instruccin tambin se puede usar conjuntamente con la instruccin output,
de forma que podamos capturar la informacin de los registros afectados por la
operacin.
MERGE dbo.Paises AS target
USING
(
SELECT CountryRegionCode,
Name
FROM Person.CountryRegion
) AS source (codigo,nombre)
ON target.IDPais=source.codigo
WHEN MATCHED THEN UPDATE SET FechaModif=SYSDATETIME()
WHEN NOT MATCHED THEN INSERT VALUES (codigo,nombre,SYSDATETIME())
OUTPUT $action, Inserted.IDPais, Inserted.Descripcion, Inserted.FechaModif,
Deleted.FechaModif;
En este caso, tenemos acceso a una columna especial llamada $action, que nos
permite saber qu operacin se ha realizado (insert, update o delete). En la tabla
inserted accedermos a los registros aadidos o actualizados (valor nuevo) a la
tabla destino, mientras que en la tabla Deleted accederemos a los registros
eliminados o actualizados (valor antiguo).
Esta clusula nos va a permitir definir
de insercin, borradas y actualizacin
La idea es comparar 2 conjuntos de d
tablas y en funcin de eso, ejecutar a
La clausula MERGE nos sirve bsic
Sincronizar los datos de 2 tablas
(Produccin y Desarrollo por ejemplo
para que queden exactamente
algunas sentencias mezcladas con
resumirlo en una operacin atmica m
La otra razn por la cual podramos
que queremos almacenar en una tab
existe o no, por lo tanto, no sabemos
famoso IF EXISTS
MERGE dbo.Tabla1 AS Targe
USING (SELECT ID,Campo1
ON (Target.ID = Source.ID)
WHEN MATCHED THEN
UPDATE
SET Target.Campo1 = Source
WHEN NOT MATCHED BY T
INSERT (ID,Campo1,Campo2
VALUES (Source.ID,Source.C
WHEN NOT MATCHED BY S
DELETE;
Esto significa que si una operacin de
todo el conjunto de datos y ms impo
concurrencia, donde puede haber otro
mismo instante, no existan incoherenc
Capturar salida:
Algo fantstico que existe a partir de S
permite capturar todo lo que sucedi d
INSERT/DELETE/UPDATE. En SQL S
OUTPUT nos sirve saber que registro
ese registro (INSERT, UPDATE o DELETE).
La nueva funcin $action indica que operacin se realiz, mientras que los atributos
deleted e inserted guardan la informacin sobre el registro afectado (de la misma
manera que funcionan con los triggers).
Ejemplo:
MERGE dbo.Tabla1 AS Target
USING (SELECT ID,Campo1,Campo2,Campo3 FROM dbo.Tabla2) AS Source
ON (Target.ID = Source.ID)
WHEN MATCHED THEN
UPDATE SET Target.Campo1 = Source.Campo1, Target.Campo2 = Source.Campo2
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID,Campo1,Campo2,Campo3)
VALUES (Source.ID,Source.Campo1,Source.Campo2, Source.Campo3)
WHEN NOT MATCHED BY SOURCE THEN
DELETE
OUTPUT $action, deleted.*, inserted.*;
Resultado:
nuevo operador Table Merge. Esta
una simple encapsulacin que simpli
al ser una operacin interna del mot
otra alternativa existente en las versio
Otro punto interesante es que podem
tienen similares volmenes de datos,
eficiente en estas operaciones, ya am
necesidad de ordenar los datos. Es p
la mayora de los casos, el MERGE J
Algunas recomendaciones para obten
Crear un ndice clustered sob
tabla destino.
Crear un ndice nico sobre la
de origen (en caso que hubie
Esto garantiza al motor que no tiene q
efectuar ningn sort extra.
Servicios de Entidades de Datos
La Inclusin de los Servicios de Ent
ahora , con SQL Server 2008 y ADO.
por ejemplo Clientes o Facturas. Es
mtodo estndar de devolver filas y t
relacin entre entidades, los objetos
nuevas herramientas de ADO.NET q
ser el Lenguaje de Consultas Integrad
En primer lugar, aparece un nuevo operador lgico en el plan, que se llama Clustered
Index Merge y es nuevo de SQL Server 2008. Este operador en funcin de un conjunto
de datos, realiza un delete, insert o update a una tabla usando su respectivo ndice
clustered. Si la tabla no tuviese un ndice clustered, entonces se usara el tambin
Programar en un alto nivel de abstra
buen provecho del modelo de en
programar y percibir a la informacin
LINQ
El Lenguaje de Consultas Integrado LINQ, nos permite realizar consultas a una fuente
de datos utilizando lenguajes de programacin manejados tales como Visual Basic.NET
o C#, en lugar de usar sentencias SQL. Utilizaremos una sintaxis consistente para
obtener datos de diversas fuentes de datos, incluyendo datos relacionales, entidades,
XML, DataSets de ADO.NET, y colecciones de objetos en memoria. Esta nueva sintaxis
embebida en un lenguaje de propsito general adquiere todos sus beneficios: validacin
de tipos, revisin de errores al momento de la codificacin, etc.
Ejemplo de ordenamiento de un vector por el tamao de sus tems:
public void OrdernarPalabras()
{
string[] palabras = { "naranja", "manzana", "uva" };
var palabrasOrdenadas =
from p in palabras
orderby p.Length
select p;
Console.WriteLine("La lista ordenada por tamao:");
foreach (var p in palabrasOrdenadas) {
Console.WriteLine(p);
}
}
Ejemplo de agrupamiento de palabras por sus iniciales:
public void AgrupamientoPalabras()
{
string[] palabras = { "naranja", "manzana", "nspero", "meln", "mandarina", "sanda" };
var palabrasAgrupadas =
from p in palabras
group p by p[0] into g
select new { FirstLetter = g.Key, Palabras = g };
foreach (var g in palabrasAgrupadas) {
Console.WriteLine("Palabras que empiezan con la letra '{0}':", g.FirstLetter);
foreach (var p in g.Palabras) {
Console.WriteLine(p);
}
}
}
LINQ to SQL
LINQ to SQL es la implementacin
ORM (object relational mapping), qu
Studio 2008 provee un diseador gr
datos como un modelo de objetos LIN
Cuando grabemos un diseo realizad
clases que representas las entidade
hayamos modelado. Adems veremo
(DataContext). Esta clase es el nexo
de datos, defiendo propiedades para
procedimientos almacenados.
Veamos algunos ejemplos de cons
Dim db As New NorthwindDataContex
Dim productos = From p in db.Produc
Where p.Category.CategoryName =
Select p
Este cdigo muestra cmo recuper
y grabarlo.
Dim db As New NorthwindDataContex
Dim producto = (From p in db.Product
Where p.ProductName = "T
Select p).Single
producto.UnitsOnOrder = 23
producto.UnitsInStock = 20
db.SubmitChanges()
UTLIZAR DATABASE MIRROING SQ
Tamao de los Tipos de Datos Definidos por el Usuario basados en CLR
Se ha aumentado la restriccin de lmite de 8000 bytes a 2 Gb para los tipos de datos
definidos por el usuario y agregados basados en CLR (CLR UDT y CLR UDA).
Database Mirroring es una solucin
desde SQL Server 2005 y sensiblem
como una alternativa a los sistemas d
y/o Replicacin de Almacenamiento D
otras tecnologas como Log Sh
Database Mirroring, al igual que Log S
decir, slo las bases de datos de us
necesario implementar Server Cluste
sistema y dems elementos qu
Database Mirroring es una tecnolog
funcionamiento Activo / Pasivo. Es
Servidor Principal (Activo) para una b
el papel de Servidor Espejo o Sec
consecuencia, no ser posible el ac
Espejo.
Database Mirroring requiere que la
configurada con el Modo de Recu
bastante evidente, al tratarse de una
de transacciones de una base de
secundaria.
Es posible montar Database Mirrorin
hecho de poder montar el Servidor
Espejo sobre SQL Server 2008, per
interesantes para Migraciones de SQ
corte de servicio y luego romper el
Es importante tener en cuenta que N
con el Servidor Principal en SQL Serv
Los posibles papeles o roles que puede desempear una instancia de SQL Server en
una solucin de Database Mirroring son:
Servidor Principal. Mantiene la copia activa de la base de datos (base de datos
principal), a travs de la cual, se ofrece el servicio a los usuarios. Todas las
transacciones son enviadas al Servidor Espejo antes de aplicarlas en la base de datos
principal.
Servidor Espejo (Mirror). Mantiene una copia de la base de datos principal (base de
datos espejo o mirror database), y aplica todas las transacciones enviadas por el
Servidor Principal, manteniendo sincronizada la base de datos espejo.
Servidor Testigo (Witness). Se trata de un elemento opcional. No es obligatorio o
necesario implementar un Servidor Testigo (Witness) en una solucin de Database
Mirroring. Sin embargo, si deseamos que nuestra solucin de Database Mirroring
ofrezca recuperacin automtica ante fallos (automatic failover), entonces s ser
necesario implementar un Servidor Testigo (Witness Server), pues ste es quin
monitorizar los Servidores Principal y Espejo partcipes de una Sesin de Espejo
(Mirror Session) con el objetivo de asignar el papel de Principal al servidor Espejo en
caso de una cada de servicio o prdida del primero (es decir, en caso de cada del
Servidor Principal, se asignar el papel de Principal al Servidor Espejo, mantenindose
as el servicio). El trabajo realizado por el Servidor Testigo (Witness) no es muy intenso,
por lo cual, no requiere de grandes recursos, y adems, un mismo servidor puede actuar
como Servidor Testigo (Witness) para mltiples sesiones de espejo, sin prdida de
rendimiento.
Database Mirroring ofrece tres modos de funcionamiento, como antes adelantamos:
Modo de Alta Disponibilidad (sncrono y con testigo). Las transacciones son aplicadas
de forma sncrona a las base de datos principal y espejo. Requiere de un Servidor
Testigo (Witness) ubicado sobre una tercera mquina (que no sea ni el Servidor
Principal ni el Servidor Espejo), gracias al cual es posible la recuperacin automtica
ante fallos (automatic failover) o conmutacin automtica de roles. En caso de fallo del
Servidor Principal durante el envo de transacciones, el Servidor Espejo tiene que
terminar las transacciones encoladas antes de poder levantarse como Servidor
Principal. Por supuesto tambin es posible la recuperacin manual ante fallos (manual
failover) o conmutacin manual de roles. En caso de una cada o prdida del Servidor
Espejo, la base de datos principal se mantendr activa.
Modo de Alta Proteccin (sncrono
forma sncrona a las base de dato
Servidor Testigo (Witness). En este m
de prdida de datos, pero la recup
(manual failover). En caso de una ca
principal dejar de estar activa, al hab
Modo de Alto Rendimiento (asncro
de forma asncrona a la base de da
anteriores modos de funcionamient
posibles prdidas de transacciones (y
Evidentemente, la recuperacin ante
hablando de conmutacin forzada (es
escritos en el servidor espejo). En ca
Servidor Principal no se ver afectado
1. Primeramente preparamos nues
instancia que fungir como tal, aqu
restauremos sea el ultimo backup rea
tenemos que marcar la opcin de NO
2. En el Management Studio, Explora
hacemos click derecho sobre ella en l
5. Luego definiremos el servidor
3. El primer paso sera configurar la seguridad, para lo cual vamos a seguir un asistente.
4. El asistente nos preguntara si queremos tener una instancia de testigo, para este
primer ejempo le diremos que No.
5.
Ahora definiremos nuestra instancia o servidor espejo
6.
7.
En este paso se definen las cuentas de usuario que utilizaran tanto el servidor 8.
principal como el espejo que estn en un dominio.
Finalmente terminanos de configura
Una vez finalizado nos pedir si des
Ya tendremos configurado nuestro mirroring como se muestra en la pantalla siguiente,
desde aqu podemos iniciar el mirroring, y podemos configurar el tipo de operacin que
deseamos, tal y cual se planteo al inicio del articulo. Hacemos click en OK.
Database Mirroring tambin est di
para que la aplicacin cliente sepa
sitio en su configuracin debe cono
Puedes cambiar la cadena de conexi
Server=instancia_servidor_pr
Failover Partner=instancia_se
Cambiar la cadena de conexin, es p
gestionas a travs de ficheros INI, pe
esta tcnica con demasiada frecuenc
recompilacin de la aplicacin.
Como debes saber, las APIs de acc
ODBC, por lo que si tienes DSNs de
tendrs que cambiar el Driver al nuev
pantalla el elemento seleccionado):
Y luego, en la configuracin de la bas
posibilidad de establecer cual es serv
ERH\INSTANCE2):
La Redireccin Automtica del cliente en una infraestructura de Database Mirroring, es
una funcionalidad muy apreciada, y en este caso, es tan fcil como utilizar una sintaxis
determinada en la cadena de conexin a SQL Server, como se muestra en el siguiente:
"Data Source=PORTATIL;Failover Partner=PORTATIL\MIRROR;Initial
Catalog=Demo;Integrated Security=True;"
Otras consideraciones interesantes qu
SQL Summit:
Recuerda que cuando tu aplic
principal enva a la aplicacin
informacin que tienes en la c
la necesitan porque tiene de p
servidor mirror.
La informacin que tienes en
solamente ser utilizada cuan
satisfacer contra el servidor p
informacin que tiene de la ca
En SQL Server 2008, (segn comen
codificar quien el servidor mirror por
cacheada esa informacin. Digo "m
mecanismo que utilizarn para cache
fases betas de SQL Server 2005, implementaban un mecanismo similar, pero con el
paso del tiempo la implementacin se quit del producto por razones que desconozco.
informacin. El programa de instalac
Lea la documentacin para ms inform
A continuacion se detalla la sintaxis b
SERVICE BROKER
1. HABILITAR LA BASE DE DATOS
ALTER DATABASE Demo SET ENAB
SQL Server 2008 R2 introduce la opcin de activar y desactivar el control de mensajes
dudosos en una cola. Una cola donde se haya establecido desactivar los mensajes
dudosos no se deshabilitar tras las reversiones consecutivas de transacciones
consecutivas. Con esta caracterstica, si lo desea, una aplicacin puede definir una
estrategia personalizada de control de mensajes dudosos.
2. MESSAGE TYPE
Define el nombre del mensaje y el tipo
mensajes deben ser creados en amba
El SQL Service Service Broker incluye la infraestructura necesaria para la programacin
asincrnica y se puede utilizar para la creacin de aplicaciones distribuidas a travs de
mltiples bases de datos.
CREATE MESSAGE TYPE message_
[AUTHORIZATION owner_name]
[VALIDATION =
{NONE EMPTY WELL_FORMED_XM
VALID_XML WITH SCHEMA COLLEC
Las instrucciones Transact-SQLCREATE QUEUE y ALTER QUEUE se han actualizado
y la propiedad [IsPoisonMessageHandlingEnabled] se ha agregado a la API
[Microsoft.SqlServer.Management.Smo.Broker.ServiceQueue
Una aplicacin utiliza Service Broker ejecutando las instrucciones Transact-SQL que
funcionan en objetos de Service Broker definidos en una base de datos. Esta seccin
describe las consideraciones generales a la hora de crear los objetos de Service Broker
para una aplicacin.
El Microsoft SQL Server 2008 R2 Service Broker activador externo ha sido desarrollado
para ser una extensin de la funcin de activacin interna de SQL Server 2008 R2 que
permite mover la lgica de la recepcin y procesamiento de mensajes de Service Broker
en el servicio de motor de base de datos a un ejecutable de la aplicacin que se ejecuta
fuera de SQL Server. De esta manera, las tareas de uso intensivo de CPU o de larga
duracin, pueden ser descargados de SQL Server para un ejecutable de la aplicacin,
posiblemente en otro equipo. El ejecutable de la aplicacin tambin se puede ejecutar
bajo una cuenta de Windows diferente del proceso del motor de base de datos. Esto
proporciona a los administradores mayor control sobre los recursos que la aplicacin
puede acceder. Ejecute el paquete de descarga autoextrable para crear una carpeta de
instalacin. Lea la documentacin adjunta, o los libros en pantalla para obtener ms
Los posibles valores para VALIDATIO
NONE: no se realiza ninguna validaci
EMPTY: El cuerpo del mensaje debe
WELL_FORMED_XML: Debe contene
VALID_XML WITH SCHEMA COLLEC
XML SCHEMA sealado
Para modificarlo:
ALTER MESSAGE TYPE message_ty
VALIDATION =
{NONE EMPTY WELL_FORMED_XM
VALID_XML WITH SCHEMA COLLEC
Y para eliminar:
DROP MESSAGE TYPE message_ty
3. CONTRACT
Define los tipos de mensajes que un s
direccin en que los mensajes pueden
CREATE CONTRACT contract_name
[ AUTHORIZATION owner_name ]
( { message_type_name SENT BY { INITIATOR TARGET ANY }
[ DEFAULT ] } [ ,...n] )
MAX_QUEUE_READERS: Indica la c
simultneamente
EXECUTE AS: especifica la cuenta de
Los posibles valores para SENT BY son:
INITIATOR: indica que solo el iniciador puede enviar dicho tipo de mensaje
TARGET: Indica que solo el destino puede enviar dicho tipo de mensaje
ANY: Indica que tanto el iniciador y el destino pueden enviar dicho tipo de mensaje
Para eliminar un contrato la sintaxis es la siguiente:
DROP CONTRACT contract_name
4. QUEUE
Define la ubicacin donde se almacenaran los mensajes hasta que un servicio este
disponible para atender los mensajes
CREATE QUEUE [database_name.[schema_name].schema_name.] queue_name
[ WITH
[ STATUS = { ON OFF } [ , ] ]
[ RETENTION = { ON OFF } [ , ] ]
[ ACTIVATION (
[ STATUS = { ON OFF } , ]
PROCEDURE_NAME = stored_procedure_name,
MAX_QUEUE_READERS = max_readers ,
EXECUTE AS { SELF 'user_name' OWNER }
)]
]
[ ON { filegroup [ DEFAULT ] } ]
STATUS: Especifica si la cola esta habilitada. Cuando esta en OFF ningn servicio
podra retirar mensajes de la cola.
RETENTION:Indica si la cola debe mantener todos los mensajes hasta que la
conversacin finalice
Para modificar esta es la sintaxis
ALTER QUEUE [database_name.[sch
[ WITH
[ STATUS = { ON OFF } [ , ] ]
[ RETENTION = { ON OFF } [ , ] ]
[ ACTIVATION (
[ STATUS = { ON OFF } , ]
PROCEDURE_NAME = stored_proce
MAX_QUEUE_READERS = max_rea
EXECUTE AS { SELF 'user_name' OW
] DROP })
]
Para eliminar una cola la sintaxis e
DROP QUEUE [database_name.[sch
5. SERVICE
Relaciona las colas con los contractos
CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_
[ ( contract_name [DEFAULT] [ ,...n ] )
Para modificar el servicio utilice la sig
ALTER SERVICE service_name
[ON QUEUE [schema_name].queue_
[(ADD CONTRACT contract_nameDR
ACTIVATION STATUS: Indica si se debe activar el procedimiento almacenado cuando
llegue un mensaje a la cola
ON QUEUE: Especifica la nueva cola
cola vieja a la nueva
El destino recibe el mensaje
ADD CONTRACT: Aade un contrato a la coleccin de contratos asociados a este
servicio
DROP CONTRACT: Especifica los contratos que se eliminaran del servicio. En caso de
que alguno se este ejecutando mostrara un mensaje de error.
Para comenzar a usar los servicios se deben establecer una conversacin. Estos son
los pasos para establecer una conversacin.
[ WAITFOR ( ]
RECEIVE [ TOP ( n ) ]
[ ,...n ]
FROM
[ INTO table_variable ]
[ WHERE { conversation_handle = co
conversation_group_id = conversation
[ ) ] [ , TIMEOUT timeout ]
Crear la variable que identificara de manera nica la conversacin.
WAITFOR: especifica que la clausula
DECLARE @dialog_handle uniqueidentifier
Iniciar la conversacin
RECEIVE: lee los mensajes de la cola
RETENTION de la cola este desactiva
BEGIN DIALOG [ CONVERSATION ] @dialog_handle
FROM SERVICE initiator_service_name
TO SERVICE 'target_service_name'
[ , { 'service_broker_guid' 'CURRENT DATABASE' } ]
[ ON CONTRACT contract_name ]
[ WITH
[ { RELATED_CONVERSATION = related_conversation_handle
RELATED_CONVERSATION_GROUP = related_conversation_group_id } ]
[ [ , ] LIFETIME = dialog_lifetime ]
[ [ , ] ENCRYPTION = { ON OFF } ] ]
TOP: Indica cuantos mensajes se van
todos los mensajes
RELATED_CONVERSATION o RELATED_CONVERSATION_GROUP relaciona un
nuevo dialogo con una conversacion existente
Para terminar la conversacin
LIFETIME= tiempo en segundo en la que ser valido el dialogo
Enviar mensaje
SEND
ON CONVERSATION conversation_handle
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]
INTO: Ingresa todos los mensajes en
WHERE: especifica la conversacin o
ledos
TIMEOUT: Especifica el tiempo en mi
mensaje.
END CONVERSATION conversation_
[ [ WITH ERROR = failure_code DESC
[ WITH CLEANUP ]
EJEMPLO
Disear y crear una base de datos, empleando SERVICE BROKER, y luego
habilitar el servicio
CREATE DATABASE ServiceBrokerTest
GO
USE ServiceBrokerTest
GO
-- Habilitar Service Broker
ALTER DATABASE ServiceBrokerTest SET ENABLE_BROKER
GO
Son 4 Elementos Basicos
- Mensaje
- Contrato
- Cola
-Cola de Envio
-Cola de Recepcion
- Servicio
-Servicio de Envio
-Servicio de Recepcion
-- Crear Mensaje
CREATE MESSAGE TYPE SBMessage
VALIDATION = NONE
GO
-- Crear Contrato
CREATE CONTRACT SBContract
(SBMessage SENT BY INITIATOR)
GO
-- Crear Cola de Envio
CREATE QUEUE SBSendQueue
GO
-- Crear Cola de Recepcion
CREATE QUEUE SBReceiveQueue
GO
-- Crear Servicio de Envio para Cola de Envio
CREATE SERVICE SBSendService
ON QUEUE SBSendQueue (SBContr
GO
-- Creando Servicio de Recepcion par
CREATE SERVICE SBReceiveServic
ON QUEUE SBReceiveQueue (SBCo
GO
-- Iniciar Dialogo usando el servicio en
DECLARE @SBDialog uniqueidentifie
DECLARE @Message nvarchar(128)
BEGIN DIALOG CONVERSATION @
FROM SERVICE SBSendService
TO SERVICE 'SBReceiveService'
ON CONTRACT SBContract
WITH ENCRYPTION = OFF
-- Enviando Mensajes al Dialogo
SET @Message = N'Primer Mensaje';
SEND ON CONVERSATION @SBDia
MESSAGE TYPE SBMessage (@Mes
SET @Message = N'Segundo Mensa
SEND ON CONVERSATION @SBDia
MESSAGE TYPE SBMessage (@Mes
SET @Message = N'Tercer Mensaje';
SEND ON CONVERSATION @SBDia
MESSAGE TYPE SBMessage (@Mes
GO
-- Viendo Mensajes de la cola de Rec
SELECT CONVERT(NVARCHAR(ma
FROM SBReceiveQueue
GO
-- Recibiendo Mensajes de la Cola de
RECEIVE TOP(1) CONVERT(NVARC
FROM SBReceiveQueue
GO
-- Recibiendo Mensajes de la Cola de
RECEIVE CONVERT(NVARCHAR(max), message_body) AS Message
FROM SBReceiveQueue
GO
Campo1 varchar(200)
)
/*Paso 3: Habilitamos el insertado
identity
para
mantener
los
AVANZADO IDENTITY EN SQL SERVER 2008
1) Modificar una columna para que sea identity:
No se puede. SQL no permite modificar la propiedad Identity de una columna, ya sea
para habilitar o deshabilitar esa propiedad. No existe algo asi como un ALTER COLUMN
Nombre_Campo SET IDENTITY ON (Como dato curioso, Sybase si tiene esta
posibilidad). Pero muchos diran, Como no puede ser posible, si yo lo hago desde el
enterprise manager?. Bueno, lo que hace ese programa cuando se habilita (o
deshabilita) la propiedad identity a una columna existente, es reconstruir toda la tabla.
Esto significa borrar todas las dependencias de una tabla, crear una tabla auxiliar similar
a la tabla original pero con la propiedad identity cambiada, copiar todo el contenido de la
tabla original a la auxiliar, borrar la tabla original, renombrar la tabla auxiliar por el
nombre que tenia la tabla original y reconstruir todas las dependencias.
En una tabla vacia, el costo de hacer esto es casi nulo, en una tabla con 20 millones de
registros y 30 tablas asociadas a esta via llaves foraneas es casi suicida. Por tal motivo,
y con muy buen criterio, a partir de SQL Server 2008, el Enterprise Manager deshabilita
por defecto todas las operaciones sobre edicion de tablas y columnas, que signifiquen
una reconstruccion de la tabla. Esto sirve para evitar que algun despistado sin
conocimiento sobre lo que hace, reconstruya una tabla en un servidor de produccion.
De todas maneras, si necesitamos hacer esto independientemente del costo que nos
representa, este este es un script de ejemplo:
/*Paso 1: Borro todos los objetos dependedientes de la tabla a modificar*/
ALTER TABLE TablaAsociada DROP CONSTRAINT TablaAsociada_Original_FK
/*Paso 2: Creo una tabla nueva exactamente similar a la original, pero agregando
la propiedad Identity*/
CREATE TABLE TablaOriginalAuxiliar
(
ID int IDENTITY(1,1),
SET IDENTITY_INSERT TablaOrigina
/*Paso 4: Copio el contenido de una
INSERT INTO TablaOriginalAuxiliar (I
TablaOriginal
/*Paso5: Deshabilitamos el insertad
identity*/
SET IDENTITY_INSERT TablaOrigina
/*Paso 6: Borro la tabla original*/
DROP TABLE TablaOriginal
/*Paso 7: Renombro la tabla auxilia
sp_rename TablaOriginalAuxiliar,Ta
/*Paso 8: Creo todos los objetos de
habia borrado en el paso 1*/
ALTER TABLE TablaAsociada ADD C
Todo esto tambien aplica en el
identity y queremos deshabilitarla.
2) Determinar el estado del IDENTIT
En algunas ocasiones (no muchas) p
una columna identity, tiene en es
Nuevamente, no es posible de man
sistema que nos indique el estado de
Sin
embargo,
existen
m
El mtodo mas comn es insertar u
valor explicito que sabemos que no e
ser un valor habitual para un ID) en la
esta deshabilitada. Toda esta operacin debe estar encapsulada dentro de una
transaccin y al finalizar, deberemos hacer un rollback.
este reconstruye la tabla (hace exa
principio del post).
Ejemplo:
BEGIN TRANSACTION
DECLARE @err int
INSERT INTO tabla1 (id) values (0)
SET @err=@@error
ROLLBACK TRANSACTION
IF @err =0
print identity_insert = on
else
print identity_insert = off
Sin embargo, existe una manera de
store procedure de sistema sys.sp_id
3) Consultar si una columna es identity
Para esto, debemos ver las vistas de sistema de SQL Server.
La forma mas prctica, es consultar la vista sys.column y verificar el valor del campo
is_identity.
Ejemplo:
select name, is_identity from sys.columns where OBJECTNAME(object_id) =
NombreDeLaTabla and name = NombreColumna
Existe tambien una vista llamada sys.identity_columns que nos devuelve todas las
columnas identity de todas las tablas de la base de datos.
Recordemos que estos ejemplos solo aplican a SQL Server 2005/2008 en adelante. No
funciona en SQL Server 2000.
4) Modificar la propiedad NOT FOR REPLICATION de una columna identity sin
reconstruir la tabla:
Por alguna razn desconocida, si deseamos modificar la propiedad NOT FOR
REPLICATION de una columna identity desde el enterprise manager de SQL Server,
Internamente este store procedure
modifica la tabla, sin necesidad de rec
Ejemplo para habilitar la propiedad
EXEC sys.sp_identitycolumnforreplica
Ejemplo para deshabilitar la propie
EXEC sys.sp_identitycolumnforreplica
5) Buscar huecos dentro de una co
Esta es una pregunta habitual, pero
real donde un hueco entre los valores
nosotros. Generalmente quienes con
un mal uso conceptual de los identiti
como valor interno para una clave pri
ejemplo, que sea el codigo numeric
suicida. Los identities no son transa
tenga huecos si se efectuan operacio
De todos modos, quienes esten busc
excelente blog de Pinal Dave, don
realizar dicha consulta (para nada a
polmica al respecto del uso de los id
XML SQL SERVER 2008
El tipo de datos xml permite almacenar documentos y fragmentos XML en una base de
datos de SQL Server. Un fragmento XML es una instancia XML en la que falta un solo
elemento de nivel superior. Puede crear columnas y variables de tipo xml y almacenar
instancias XML en las mismas.
PASOS PARA CONFIGURAR SQL
REMOTAS
Las nuevas polticas de Seguridad d
comenzar a usar SQL Server 2008.
defecto, ahora no lo estn, y es fun
necesidades de uso del mismo.
Tambin puede asociar una coleccin de esquemas XML con una columna, un
parmetro o una variable del tipo de datos xml. Los esquemas de la coleccin se
utilizan para validar y asignar un tipo a las instancias XML. En este caso, se dice que el
XML tiene un tipo.
Una de las cuestiones ms importa
nuestro Servidor. A fin de habilitarla
otros ordenadores debemos seguir un
Limitaciones del tipo de datos xml
1. Abriremos SQL Server Manageme
nuestro Servidor y pulsamos botn d
nos mostrara la siguiente pantalla:
Tenga en cuenta que el tipo de datos xml tiene las limitaciones siguientes:
La representacin almacenada de las instancias del tipo de datos xml no puede
superar los 2 GB.
No puede utilizarse como un subtipo de una instancia de sql_variant.
No admite la conversin a text ni a ntext. Use varchar(max) o nvarchar(max)
en su lugar.
No puede compararse ni ordenarse. Esto significa que un tipo de datos xml no
puede utilizarse en una instruccin GROUP BY.
No puede utilizarse como parmetro de ninguna funcin integrada escalar que
no sea ISNULL, COALESCE o DATALENGTH.
No puede utilizarse como columna de clave de un ndice. Sin embargo, puede
incluirse en forma de datos en un ndice agrupado o puede agregarse
explcitamente a un ndice no agrupado mediante el uso de la palabra clave
INCLUDE al crear el ndice no agrupado.
Ahora marcamos el checkbox: Permitir conexiones remotas con este servidor u
pulsamos aceptar.
2. Vamos al Men de Inicio > Programas > Microsoft SQL Server 2008 > Herramientas
de Configuracin > Administrador de Configuracin de SQL Server, aparece la siguiente
ventana:
Seleccionamos la Configuracin de red de SQL Server y luego Protocolos de
MSSQLSERVER. Como podemos observar, por defecto solo tiene habilitado el
protocolo de Memoria compartida, el resto estan deshabilitados. Bsicamente es el tipo
de protocolo que se usa, cuando nos conectamos a SQL Server desde el mismo
Servidor.
Lo que debemos hacer es habilitar los protocolos: Canalizaciones con nombre y
TCP/IP. Para lo cual, pulsamos con el botn derecho del ratn encima de los mismos y
pulsamos Habilitar. En las dos ocasiones nos mostrara un mensaje informndonos, que
para que la nueva configuracin surta efecto abra que reiniciar el Servicio de SQL
Server.
Ahora nos quedar as:
3. Vamos al Men de Inicio > Ejecuta
esta forma nos abrir la Consola d
hasta el Servicio con nombre SQL S
pulsamos el botn derecho del ratn,
cambios efectuados en el paso anteri
4. SI estamos utilizando SQL Server con nombre de instancia y sin emplear un nmero
concreto de puerto TCP/IP, debemos habilitar el servicio SQL Server Browser, que se
encuentra en la misma ventana de Servicios con el nombre de SQL Server Browser.
Nos situamos encima y con el botn derecho del ratn pulsamos en Propiedades, o bien
podemos hacer doble click, es lo mismo.
En el Tipo de Inicio, seleccionamos A
arranque. Aceptar para cerrar la panta
Este Servicio comporta ciertos riesgos de seguridad que deben ser considerados, pues
existen otras alternativas a utilizar como configurar el Cliente de SQL Servidor con el
Alias del Servidor, o utilizar la conexin incorporando el puerto de TCP/IP a usar, por
defecto en SQL Server es el 1433.
5. Y por ltimo, en caso de tener habilitado el Firewall de Windows, cosa que
deberamos tener por Seguridad, deberemos configurarlo para que los Servicios de SQL
Server y SQL Browser puedan comunicarse con el exterior. Vamos a Men de Inicio ,
hacemos clic en Ejecutar , escribimos firewall.cpl y pulsamos Aceptar. Nos muestra esta
ventana:
Pulsamos en Permitir un programa a travs del Firewall de Windows nos muestra:
Pulsamos en Agregar programa nos muestra la ventana:
Pulsamos en Examinar e introducim
SQL Server:
C:\Program Files\Microsoft SQL Se
la misma seleccionamos el programa
operacin para aadir el SQL Se
C:\Program Files\Microsoft SQL S
sqlbrowser.exe y pulsamos Aceptar
en la pantalla de Configuracin del Fir
Y con esto ya tenemos configura
Conexiones desde cualquier ordenad
.
ANEXO 01
FUNCIONES SQL
Funciones de valores simples:
ABS(n)= Devuelve el valor absoluto d
CEIL(n)=Obtiene el valor entero inme
FLOOT(n) = Devuelve el valor entero
MOD (m, n)= Devuelve el resto resulta
NVL (valor, expresin)= Sustituye un
POWER (m, exponente)= Calcula la p
ROUND (numero [, m])= Redondea n
indicados.
SIGN (valor)= Indica el signo del "valo
SQRT(n)= Devuelve la raz cuadrada
TRUNC (numero, [m])= Trunca nme
de precisin.
VAIRANCE (valor)= Devuelve la varia
Funciones de grupos de valores:
AVG(n)= Calcula el valor medio de "n
COUNT (* | Expresin)= Cuenta el nu
con valor no nulo. La opcin "*" cuent
MAX (expresin)= Calcula el mximo.
MIN (expresin)= Calcula el mnimo.
SUM (expresin)= Obtiene la suma de
GREATEST (valor1, valor2)= Obtie
LEAST (valor1, valor2)= Obtiene el
Funciones que devuelven valores d
CHR(n) = Devuelve el carcter cuyo v
CONCAT (cad1, cad2)= Devuelve "ca
LOWER (cad)= Devuelve la cadena "c
UPPER (cad)= Devuelve la cadena "cad" en maysculas.
INITCAP (cad)= Convierte la cadena "cad" a tipo titulo.
LPAD (cad1, n[,cad2])= Aade caracteres a la izquierda de la cadena hasta que tiene
una cierta longitud.
RPAD (cad1, n[,cad2])= Aade caracteres a la derecha de la cadena hasta que tiene
una cierta longitud.
LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la cadena.
RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la cadena.
REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye un carcter o
caracteres de una cadena con 0 o mas caracteres.
SUBSTR (cad, m [,n])= Obtiene parte de una cadena.
TRANSLATE (cad1, cad2, cad3)= Convierte caracteres de una cadena en caracteres
diferentes, segn un plan de sustitucin marcado por el usuario.
Funciones que devuelven valores numricos:
ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad".
INSTR (cad1, cad2 [, comienzo [,m]])= Permite una bsqueda de un conjunto de
caracteres en una cadena pero no suprime ningn carcter despus.
LENGTH (cad)= Devuelve el numero de caracteres de cad.
Funciones para el manejo de fechas:
SYSDATE= Devuelve la fecha del sistema.
ADD_MONTHS (fecha, n)= Devuelve la fecha "fecha" incrementada en "n" meses.
LASTDAY (fecha)= Devuelve la fecha del ltimo da del mes que contiene "fecha".
MONTHS_BETWEEN (fecha1, fecha2)= Devuelve la diferencia en meses entre las
fechas "fecha1" y "fecha2".
NEXT_DAY (fecha, cad)= Devuelve la fecha del primer da de la semana indicado por
"cad" despus de la fecha indicada por "fecha".
ANEXO 02
CAST y CONVERT
Debido a que SQL Server proporcio
acerca de cul es la mejor manera d
especfica de SQL Server, y permite u
entre valores de fecha y hora, los nm
CAST es el ms estndar ANSI de
porttil (es decir, una funcin que util
de base de datos ms o menos co
tambin se requiere al realizar la con
para conservar el nmero de decima
mejor utilizar elenco de primera, a
proporcionar CONVERT en el trabajo
CAST y CONVERT tambin puede se
ciertos efectos. Por ejemplo, una form
fecha actual sera utilizar:
SELECT CONVERT (CHAR (10), CU
Convierte una expresin de un tipo
CAST y CONVERT tiene una funcio
Funciones de conversin:
TO_CHAR= Transforma un tipo DATE NUMBER en una cadena de caracteres.
TO_DATE= Transforma un tipo NUMBER CHAR en DATE.
TO_NUMBER= Transforma una cadena de caracteres en NUMBER.
CAST y CONVERT de SQL Sintaxis
Utilizar CAST:
CAST (expresin que data_type)
Uso de CONVERT:
CONVERT (data_type [(length)], expresin [, estilo])
SQL interpretar y convertir - Cadena
SELECT SUBSTRING ('CAST y CONVERT', 1, 3)
Valor devuelto = CAS (se obtiene de ndice de 1 a 3)
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/2007
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/07
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/2007
SELECT CAST (CAST y CONVERT 'como char (3))
Valor devuelto = CAS (conseguirla slo 3 caracteres)
SQL interpretar y convertir - Fecha Hora
SELECT CONVERT (varchar, GETDA
Valor devuelto = 6.6.07
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/2007
-La conversin de fecha y hora a los datos de caracteres (vachar)
-Los valores predeterminados (style 0 100, 9 o 109, 13 o 113, 20 o 120, y 21 o 121)
siempre devuelven el ao sin el siglo (aa).
-Aadir 100 a un valor de estilo para obtener un ao de cuatro plazas que incluye el ao
del siglo (aaaa).
-A continuacin se muestra ejemplo para la conversin de formato 1 de fecha y hora a
formato diferente de fecha y hora, de modo que puede ser aplicada en varias
condiciones.
SELECT CONVERT (varchar, GETDA
Valor devuelto = 6.6.07
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/2007
Valor de la hora actual del Horario Fecha GETDATE ()
SELECT (GETDATE ()) = 06/06/2007 23:41:10.153
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06 de junio 07
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06 de junio 2007
SELECT CONVERT (varchar, GETDATE (), 0)
Valor devuelto = 06 de junio 2007 23:07
SELECT CONVERT (varchar, GETDATE (), 100)
Valor devuelto = 06 de junio 2007 23:07
SELECT CONVERT (varchar, GETDATE (), 1)
Valor devuelto = 06/06/07
SELECT CONVERT (varchar, GETDATE (), 101)
Valor devuelto = 06/06/2007
SELECT CONVERT (varchar, GETDATE (), 2)
Valor devuelto = 6.7.06
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06 de junio 07
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06 de junio 2007
SELECT CONVERT (varchar, GETDA
Valor devuelto = 23:38:49
SELECT CONVERT (varchar, GETDA
Valor devuelto = 23:38:49
SELECT CONVERT (varchar, GETDATE (), 9)
Valor devuelto = 06 de junio 2007 11:39:17:060 AM
SELECT CONVERT (varchar, GETDATE (), 109)
Valor devuelto = 06 de junio 2007 11:39:17:060 AM
SELECT CONVERT (varchar, GETDATE (), 10)
Valor devuelto = 6.6.07
SELECT CONVERT (varchar, GETDATE (), 110)
Valor devuelto = 06/06/2007
SELECT CONVERT (varchar, GETDATE (), 11)
Valor devuelto = 07/06/06
SELECT CONVERT (varchar, GETDATE (), 111)
Valor devuelto = 06/06/2007
SELECT CONVERT (varchar, GETDATE (), 12)
Valor devuelto = 070606
SELECT CONVERT (varchar, GETDATE (), 112)
Valor devuelto = 20070606
SELECT CONVERT (varchar, GETDATE (), 13)
Valor devuelto = 06 de junio 2007 23:40:14:577
SELECT CONVERT (varchar, GETDATE (), 113)
Valor devuelto = 06 de junio 2007 23:40:14:577
SELECT CONVERT (varchar, GETDATE (), 14)
Valor devuelto = 23:40:29:717
SELECT CONVERT (varchar, GETDATE (), 114)
Valor devuelto = 23:40:29:717
SELECT CONVERT (varchar, GETDATE (), 20)
Valor devuelto = 06/06/2007 23:40:51
SELECT CONVERT (varchar, GETDATE (), 120)
Valor devuelto = 06/06/2007 23:40:51
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/2007 23:41:10
SELECT CONVERT (varchar, GETDA
Valor devuelto = 06/06/2007 23:41:10
SELECT CONVERT (varchar, GETDA
Valor devuelto = 2007-06-06T23: 41:1
SELECT CONVERT (varchar, GETDA
Valor devuelto = 21/05/1428 11:41:10
WITH ROLLUP
ANEXO 03
EJEMPLO
Consideremos que tenemos 03 tabla
siguiente: siendo esta un movimiento
FILAS ESTADISTICAS
COMPUTE
Sabemos que esto me va permitir generar totales que aparecen como columnas de
resumen adicionales al final del conjunto de resultados. Cuando se utiliza con BY, la
clusula COMPUTE genera interrupciones de control y subtotales en el conjunto de
resultados. Puede especificar COMPUTE BY y COMPUTE en la misma consulta.
Una clusula COMPUTE BY le permite ver tanto el detalle como las filas de resumen
con una instruccin SELECT. Puede calcular valores de resumen para los subgrupos, o
un valor de resumen para el conjunto de resultados completo.
Debemos recordar como conclusin que esta clausula crea nuevas filas que contienen
resultados estadsticos a partir de funciones de agregacin, asimismo dentro d las
funciones Estadsticas tenemos COUNT, SUM, AVG y MIN
EJEMPLO
SELECT NombrE_Articulo, Und, Pventa,Almacen,Cant_stock FROM BIENES ORDER
BY Nombre_Articulo COMPUTE SUM(Cant_Stock) BY Nombre_Articulo COMPUTE
SUM(Cant_stock)
Nombre_Articulo
Ampicilina 500 Mg
Megacilina 100 Mg
Aspirina 100 Mg
Riboxon 125 Mg
Calcioferol
Und
Amp
Und
Caps
Amp
Und
Pventa
0.3
0.6
0.1
1.5
3.2
Almacen
Almacen 01
Almacen 02
Almacen 01
Almacen 01
Almacen 02
Cant_stock
100
200
500
400
600
La tabla Matriculados es don
matriculados
La tabla Alumnos es donde
alumnos como datos generale
La tabla semestre es donde
para la tabla Alumnos
Adems la tabla Matriculado
Cdigo de alumno y la tabla A
el semestre acadmico.
SELECT
Codigo_alumno,No
(Cant_creditos) CREDITOS FROM M
MAT.Codigo_alumno = ALU.Codig
ALU.Codsemestre = SEM.Codsemes
AND Facultad_acad =Ingenieria GR
Codigo_alumno
A112120
A112110
A112130
A112140
A112160
A112100
A112106
Nombre_alumno
Mariluisa Pascal
Mariluisa Pereda A
Csar Pereda
Harumi Pereda
Mariluisa Harumi
Juana Torres
Pascal Ampudia
EJEMPLO
Segn el ejemplo anterior vamos ahora aplicar WITH ROLLUP con el mismo ejemplo, y
podremos analiar la diferencia entre cada una de ellas
SELECT
Codigo_alumno,Nombre_alumno,Curso_acad,Facultad_acad,COUNT
(Cant_creditos) CREDITOS FROM Matriculados MAT INNER JOIN Alumnos ALU ON
MAT.Codigo_alumno = ALU.Codigo_alumno INNER JOIN Semestre SEM ON
ALU.Codsemestre = SEM.Codsemestre WHERE ALU.Codigo_alumno LIKE [A1121]%
AND Facultad_acad =Ingenieria GROUP BY Facultad_acad,ALU.Codsemestre WITH
ROLLUP;
odigo_alumno Nombre_alumno
curso_acad
A112120
Mariluisa Pascal
Ingles I
A112120
Mariluisa Pascal Matematica IV
A112120
Mariluisa Pascal
Estadistica I
A112110
Mariluisa Pereda Analisis sistemas
A112130
Csar Pereda
Matematica I
A112140
Harumi Pereda
Matematica IV
A112140
Harumi Pereda
Fisica II
A112140
Harumi Pereda
Matematica IV
A112140
Harumi Pereda Planos y Diseos
A112160
Mariluisa Harumi
Ingles VI
A112100
Juana Torres
Estadistica I
A112106
Pascal Ampudia
Analisis II
Facultad_acad
Creditos
02
Ingenieria de Sistemas
03
Ingenieria de Sistemas
06
Ingenieria de Sistemas
10
Ingenieria de Sistemas
04
ingenieria Industrial
04
Ingenieria Industrial
04
Ingenieria Industrial
04
Ingenieria Industrial
04
Ingenieria Civil
02
Ingenieria Civil
02
Ingenieria Industrial
02
Ingenieria Civil
EJEMPLO
Segn el ejemplo anterior 01 vamos ahora aplicar la misma sentencia, pero aadiremos
WITH CUBE
SELECT
Codigo_alumno,Nombre_alumno,Curso_acad,Facultad_acad,COUNT
(Cant_creditos) CREDITOS FROM Matriculados MAT INNER JOIN Alumnos ALU ON
MAT.Codigo_alumno = ALU.Codigo_alumno INNER JOIN Semestre SEM ON
ALU.Codsemestre = SEM.Codsemes
AND Facultad_acad =Ingenieria GR
CUBE;
Codigo_alumno
A112120
A112120
A112120
A112110
A112110
A112130
A112130
A112140
A112140
A112140
A112140
A112160
A112160
A112100
A112106
Nombre_alumno
Mariluisa Pascal
Mariluisa Pascal
Mariluisa Pascal
Mariluisa Pereda A
NULL
Csar Pereda
NULL
Harumi Pereda
Harumi Pereda
Harumi Pereda
Harumi Pereda P
Mariluisa Harumi
NULL
Juana Torres
Pascal Ampudia
OVER
Esta Clausula permite dividir y/o cl
EJEMPLO
Tenemos dos tablas relacionadas
de carreras, donde nos piden que
OVER.
SELECT Nombres,Alu.codcarrera,A
SUM(Cant_cred) OVER (PARTITIO
FROM Matriculados
EJEMPLO
Vamos a sostener que tenemos las tablas Clientes, donde se registran todos los
datos de los clientes, el cual simplificaremos una columna al mximo, pero para
esto vamos a aplicar ejemplos practicos como ejecutar un reporte en forma
consecutiva, pero para esto debemos aplicar la funcion ROW_NUMBER( ).
SELECT ROW_NUMBER() OVER (ORDER BY Nombre_Cliente ), * FROM dbo.clientes;
Para esto obtendremos el siguiente Reporte consecutivo
1
2
3
4
Nombre_cliente
Mariluisa Pascal
Harumi Pereda
Cesar Pereda
Mariluisa Pereda
ANEXO 04
PROPIEDADES Y RESTRICCI
CODE EDITOR
Es un editor que se emplea para
consideremos 04 tipos del SQL SERV
1. SQL QUERY EDITOR
2. MAX QUERY EDITOR
3. XML QUERY EDITOR
4. SQL MOBILE QUERY
EJEMPLO
Asimismo se puede aadir calculos al resutlado de la funcion, por ejemplo:
SELECT (SELECT COUNT(*) FROM dbo.otratabla ) + ROW_NUMBER() OVER
(ORDER BY Nombre_cliente ), * FROM bo.clientes
MENU
SQL SERVER MANAGEMENT STUD
Asimismo para ejecutar el script pulsa
En el dialogo CONNECT TO SQL
conectarse y luego aada una fi
guardar el script debemos dar cl
herramientas o caso contrario Eejc
Para ver las Opciones de configur
CODE EDITOR
Exec SP_dbOption Nombre_base_datos
de configuracin de una base de d
opcin ALTER DATABASE
Para cambiar el estado de una opcin de base de datos a solo lectura
EXEC Sp_dboption NOMBRE_Basedatos, READ ONLY, TRUE
EXEC Sp_dboption NOMBRE_Basedatos
Para cambiar el estado de una Opcin de Base de datos a lectura y Escritura,
aplicaremos:
EXEC SP_dboption NOMBRE_BASEDATOS, READ WRITE, TRUE
EXEC Sp_dboption NOMBRE_Basedatos
GO
ALTER DATABASE MODIFY FILE
Recordemos que en una base de datos el incremento que se utiliza con
FILEGROWTH y un tamao mximo en el momento de la creacin del archivo con
ALTER DATABASE Bdatos
EXEC sp_dboption
Go
Recordemos que esta Opcim se u
de la base de datos; Esta opcin to
conservar la compatibilidad de l
ALTER DATABASE efectua las mis
IDENTITY
Esta Propiedad debe ser asignada a u
la modificacin de la tabla y debe ser
esta vinculada; el cual esta puede
tambin en un comando ALTER TABL
Se puede utilizar las siguientes funcio
de identidad:
EJEMPLO
Aumentar el tamao de un archivo existente empleando ALTER DATABASE
_IDENT_INCR
_IDENT_SEED
ALTER DATABASE Base_datos
MODIFY FILE (
Name = listados_data,
SIZE = 20 Mb);
Empleandose asi:
SET IDENT_INCR NOMBRE_TABLA
SET IDENT_SEED NOMBRE_TABLA
Recordemos que el comando ALTER DATABASE permite una accin mucho ms
importante sobre la base de datos tanto para modificar el tamao de los archivos, como
cambiar el nombre de la base de datos.
SP_dboption
Este procedimiento permite emplear en versiones anteriores no siendo esta
recomendada debido a que inicialmente permite revisar y cambiar las opciones
Para concoer
Para conoce
IDENTITY.
EJEMPLO
Crear una tabla Aplicando las prop
CREATE TABLE MOVIMIENTOS(
Numdoc
INT
IDEN
FechaReg
DATETIME,
Monto
SMALLMONE
Tipofactura
CHAR(2) CO
CONSTRAINT PK_Movimk
PRIM
CONSTRAINT FK_MovimF
VENTA(Numero))
FOREIGN
KEY(Numdoc)
REFERENCES
ALTER TABLE VENTAS
ADD CONSTRAINTPK_MOV PRIMAR
Adicionar una columna con la Propiedad Identity; denominada Mumero_hoja que
inicie en el numero 20 incrementadose de uno en uno
UNIQUE
ALTER TABLE FOLIOS
ADD Numero_hoja INT IDENTITY (20,1) CONSTRAINT Idem_hoja PRIMARY KEY
(Numero_hoja)
Esta Restriccin permite tambin trad
de la tabla o identificadores y cla
pueden haber varias restricciones U
utilizadas pueden ser NULL (No recom
SET IDENTITY_INSERT TABLE ON
Permite la insercin de datos sin usar la propiedad IDENTITY y la numeracin
automtica.
Ejemplo
USE Padron
GO
SET IDENTITY_INSERT Movimientos ON
INSERT INTO Padron.dbo.Movimientos (FechaReg,Monto)
VALUES(08-27-2010,100.00);
SET IDENTITY_INSERT Movimientos OFF
PRIMARY KEY
Esta Restriccin automticamente crea un ndice nico agrupado, por defecto con el
nombre de la restriccin; de ah las opciones NONCLUSTERED y FILLFACTOR.
Una clave principal puede constar hasta 16 columnas, no puede haber ms de una
clave principal en una tabla ya que las columnas deben ser NOT NULL.
EJEMPLO
CREATE TABLE PERSONAL(
Codigo
INT NOT NULL,
Nombres
NVARCHAR(60) NULL,
CONSTRAINT PK_Codigo PROMARY KEY (Codigo));
-- Adicionemos una clave principal en una tabla VENTAS
REFERENCIAS (REFERENCE
Esta Restriccin traduce la integridad
una clave primaria o secundaria de o
de las instrucciones CREATE TAB
clausulas ON DELETE y ON UPDATE
SET NULL
Cuandos e elimina la fila que corresp
clave externa toma el valor NULL.
EJEMPLO
Crear una restriccin Foranea, en la
Categoria.
ALTER TABLE Producto
ADD CONSTRAINT FK_Producto_C
Categoria(Codigo);
DEFAULT
Se puede definir un valor predetermin
columnas de tipo TIMESTAMP o las q
Recordemos que el valor puede se
(USE, CURRENT,..) o valores NUL
EJEMPLO
Adicionar una restriccin DEFAULT para la columna SEXO de la tabla PERSONAL
ALTER TABLE PERSONAL
ADD CONSTRAINT DF_SEXO DEFAULT Varon FOR SEXO;
ANEXO 05
Ahora dentro de las Propiedades del SQL MANAGEMENT STUDIO, observaremos
el valor por defecto dentro de las propiedades (Valor o enlace predeterminado).
ORDENES DE SQL
CHECK
PIVOT
Esta restriccin se asocia automticamente a la columna especificada en la expresin
de la condicin.
USE EJEMPLO
GO
ADD CONSTRAINT CHK_Modelo CHECK (MODELO LIKE B%);
DEFAULT
Se puede definir un valor predeterminado para todas las columnas con excepcin de las
columnas de tipo TIMESTAMP o las que poseen un tipo IDENTITY.
Recordemos
Esta instruccin es muy potente y f
forma de filas distintas previendo defin
EJEMPLO
Tenemos una tabla llamada MATRIC
una universidad, siendo la siguiente e
Codigo_alumno
VARCHAR(1
Semestre
VARCHAR(1
Creditos
INTEGER
Curso_cod
VARCHAR(1
Ahora vamos a listar la consulta
USE GESTOR
GO
SELECT * FROM Matriculados;
Empleando PIVOT vamos a listar la
SELECT Codigo_alumno,[I] AS I CIC
IV CICLO, [V] AS V CICLO FRO
Semestre IN ([I], [II], [III], [IV], [V])) AS
EJEMPLO
Ahora aplicando con dos tablas, realiz
que existe una tabla llamada ALUM
general de los alumnos
SELECT ALU.Codigo_alumno, [ I] AS
[IV] AS IV CICLO, [V] AS V CICL
PIVOT (SUM(Creditos) FOR SEMESTRE IN ([I], [II], [III], [IV], [V]) AS PVT INNER JOIN
ALUMNOS ALU ON ALU.Codigo_alumno = PVT.Codigo_alumno;
Codigo_alumno
Semestre
Creditos
Curso_cod
101000
101000
101000
101000
104000
104000
102000
I
I
I
II
I
II
I
10
2
4
8
12
6
8
A100
A200
A001
A008
A102
A804
A120
UNPIVOT
Esta instruccin realiza la inversa de lo que efectua la instruccin PIVOT, pero se
emplea dentro de ella la misma funcin de las tablas CTE.
USE GESTOR
GO
WITH CONTROL(Codigo_alumno,Semestre I,Semestre II,Semestre III, Semestre IV,
Semestre V, Nombre_alumno AS (SELECT ALU.Nombre_alumno, [I] AS I CICLO, [II]
AS II CICLO, [III] AS III CICLO, [IV] AS IV CICLO, [V] AS V CICLO,
ALU.codigo_alumno FROM MATRICULADOS PIVOT (SUM(Creditos) IN ([I], [II], [III],
[IV], [V]) AS PVT INNER JOIN ALUMNOS ALU ON ALU.Codigoalumno=
PVT.Codigoalumno)
SELECT
Codigoalumno,Nombre_alumno,Creditos
FROM
CONTROL UNPIVOT (Creditos FOR CONTROL IN ([V]) AS UNPIVOT;
ANEXO 06
PROBLEMAS PERSISTENTES
CAMBIOS EN UNA TABLA
Supongamos que tenemos creado nu
o realizar cambios en su estructura, m
muestra un Mensaje de Error Error W
saved...
Pues para esto el operador despus
HERRAMIENTAS del Men principal.
Luego de seleccionar dicha opcin en el el men barra observaremos, que muestra la
siguiente ventana:
ANEXO 07
COPIA DE SEGURIDAD DE LA
Esto te mostrar un cuadro de
en el botn Aceptar para hace
la que se har la copia, tendr
idea de que puedas elegir dond
Donde el operador deber seleccionar la opcin desplegable de DESIGNERS,
encontrando dentro de ella dos opciones tales como:
Table and Database Designers
Analysis Services Designers
Para esto desactivaremos la Casilla que dice Impedir Guardar Cambios que requieran
re-creacin
INDICE
INTRODUCCION
Que es SQL
Caracteristicas del SQL
Capitulo I
Seleccionamos la opcin del botn Agregar, donde mostrar un nuevo cuadro de
dilogo, para poder colocar la ruta de la nueva carpeta donde se grabara la base de
datos copia backup, por lo que es necesario escribir el nombre del fichero de copia de
seguridad; en nuestro caso colocaremos el nombre Backup bd Registro en la Carpeta
Alumno del Disco.
Instalacin de SQL
Requisitos de instalacin del SQL
Notas de seguridad
Compatibilidad de Sistemas operativo
Implementacin en Windows XP
Actualizar el SQL a nuevas versiones
Compatibilidad de idiomas
Restuar Base de datos antiguas
Generar copias de seguridad
Propiedades de las base de datos
Compatibilidad de la Base de datos
Capitulo II
Base de datos
Estructuracin de una base de datos
Archivos de una base de datos
Tamao de base de datos
Tipos de Archivos
Crear una base de datos usando SQL
Sintaxis de Base de datos
Notas de seguridad
Base de datos y grupo de archivos
Modelo de base de datos
Informacin de la Base de datos
Ejemplos practicos del 01 al 022
Ejercicios para realizar
Capitulo III
Tablas
Estructuras de Tablas
Creacin de tablas
Nomenclatura de tablas
Modificacin de tablas
Conceptos de:
Indices
Restricciones
Vistas
Estructuracin de una base de datos
T-SQL
Procedimientos Almacenados
Propiedades
Normalizaciones
Integridad y tipos
Integridad de dominio
Integridad Referencial
Integridad fijada por el operador
Formas de Normalizacion
Definicin de claves primarias
Identidades
Restricciones de identidades
Primary Key
Foreign Key
Unique
Default
Check
Verificacin de la definicin de la estructura de una table
Tabla del Sistema SYSOBJECTS
Modificar una tabla
Verificar los cambios de una tabla
Ejemplos de TSQL
Capitulo IV
Integridad de datos
Tipos de Restricciones
Clausula CONSTRAINT
Restriccion FOREIGN KEY
Diccionario de datos para restricciones
Uso de DROP TABLE
Uso de ALTER TABLE
Integridad de Identidad
Uso de Claves primarias
Tipos de Claves compuestas
INSERT INTO
Uso de claves forneas y relacionas e
Formas de deshabilitar restricciones
Restricciones UNIQUE
Integridad de Dominio
CREATE DEFAULT
Uso de SP_HELPCONSTRAINT
Propiedades de identity
Integridades de Dominio
Ejercicios practicos de Restricciones
Uso del Administrador Corporativo
Tipos de diagramas
Integridad Referencial en cascada
Capitulo V
T-SQL
Uso de la funcin REPLACE
Script y lotes
Tipos de datos
Uso de variables
Uso de funciones de SQL
Tipos de datos de fecha y hora
Funciones de seguridad de SQL
Funciones de tipo carcter
Transact TSQL
Eejemplos con tipos de variables
Variables locales y globales
Uso de operadores
Ejemplos con precedencia de Operad
Funciones matemticas
Funciones de Metadatos
Store Procedure
Fucniones de Fecha y hora
Funciones del sistema
Restaurar un backup de una base de
Capitulo VI
Consultas Basicas
Uso y definicin de la clausula WHERE
Tipos de operadores
Ejemplos practicos de consultas bsicas
Uso de la clausula DISTINCT
Uso de la clausula INTO
Uso de la funcin CONVERT
Uso de la funcin LIKE
Uso de la clausula ORDER BY
Uso de GROUP BY
Uso de HAVING
Insertar registros empleando identity
Truncate
Capitulo VII
Agrupamiento de datos
GROUP BY con el operador ROLLUP
COMPUTE BY
Consultas y agrupamientos de datos
Definicin de las caracteristicas de grouping sets
GROUPING SETS en SQL
Uso de la funcin UNION ALL
Auditoria y permisos en SQL
Uso de combinaciones
Combinaciones Internas
Combinaciones externas
Combinaciones Cruzadas
Autocombinacin
Combinaciones y funciones de agrupamiento
Combinaciones de dos a ms tablas
Combinaciones externas haciendo uso de funciones de agrupamiento
Uso de WITH ROLLUP
Sub consultas de multiples tablas
Sub consultas dentro de una clausula FORM
Sul consultas escalares
Sub consultas correlacionadas
Sub consultas anidadas
Funciones de Sub consultas
Uso del operador EXISTS
Funciones agregadas
Consultas con parmetros
Consultas de unidades externas
Agrupamiento de Registros
SQL DINAMICO TSQL
TRIGGERS SQL
Ejecutar un procedimiento almacenad
Uso de Reglas en SQL
Eeliminar valores predeterminados
Consultas Recursivas
ORDPATH
Capitulo IIX
Sentencias Anidadas
Datos definidos por el usuario
Indices de Gestion
TRANSACT TSQL
Importancia de los ndices CLUSTER
Tipos de ndices
Autocombinaciones
Importancia de los ndices
Crear reglas
Uso de EXCEPT
Ejemplos con INTER SECT
Uso de ejemplos con UNION, INTERC
Diferencias simtricas
Indexar tablas de desarrollo
Uso de CREATE INDEX
Uso de variables de TSQL
TSQL en tablas persistentes
TSQL en fecha y hora
HEARCHYID
Procedimientos almacenados
Recomendaciones sobre el uso de tab
Capitulo IX
Improve Data Quality
Vistas y mantenimientos de datos
Creacin de Vistas
Vistas Indexadas
Borrar una vista
Uso de SUBSTRING
Uso de DELETE y TRUNCATE
Tablas CTE
Capitulo X
Auditoria de Seguridad
Crear y habilitar la Auditoria de seguridad
Tipos de datos FileStream
Empleo de MERGE
LINQ to SQL
Utilizar base de datos espejos
Servicio BROKER
Uso de propiedad IDENTITY avanzada
Configurar conexiones remotas en SQL