Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Base de Datos Avanzado I PDF
Base de Datos Avanzado I PDF
Base de Datos
Avanzado I
NDICE Pgina
Presentacin 5
Red de contenidos 7
Unidad de aprendizaje 1 Lenguaje de manipulacin de datos (DML)
1.1 Tema 1 : Introduccin 11
1.2 Tema 2 : Lenguaje para la manipulacin de datos DML
1.2.1. : Operadores 17
1.2.2. : Funciones para el manejo de datos 22
1.2.3. : Comandos de LMD 25
1.2.4. Declaracin MERGE 39
1.3 Tema 3 : Recuperacin avanzada de datos
PRESENTACIN
RED DE CONTENIDOS
UNIDAD DE
APRENDIZAJE
TEMARIO
1.1. Introduccin
1.1.1. Tablas a usar en el curso
1.1.2. Manejo de Esquemas
1.2. Lenguaje para la manipulacin de datos DML (3 horas)
1.2.1. Operadores
1.2.2. Funciones usados en las consultas condicionales
1.2.2.1. Funciones para el manejo de fecha
1.2.2.2. Funciones pare el manejo de cadena
1.2.2.3. Funciones de conversin de datos
1.2.3. Insercin de datos: INSERT
1.2.4. Actualizacin de datos: UPDATE
1.2.5. Eliminacin de datos: DELETE
1.2.6. Seleccin de datos: SELECT
1.2.7. Instruccin MERGE
1.3. Recuperacin avanzada de datos (6 horas)
1.3.1. Combinacin de tablas: JOIN
1.3.2. Consultas agregadas: empleo de GROUP BY, HAVING. Empleo de funciones
agregadas: SUM, MIN, MAX, AVG, COUNT.
1.3.3. Agregar conjunto de resultados: UNION
1.3.4. Resumen de datos: CUBE
1.3.5. Resumen de datos: ROLLUP
ACTIVIDADES PROPUESTAS
Los alumnos implementan sentencias SQL para recuperar y actualizar datos en una
base de datos relacional.
Los alumnos implementan sentencias SQL para agrupar y resumir los datos.
1.1 INTRODUCCION
Tabla Paises
Contiene informacin o relacin de pases en donde viven los clientes o empleados.
La tabla Paises se encuentra en el esquema Venta
Tabla Categorias
Contiene informacin o relacin de categoras en donde se encuentran registrados los
productos. La tabla Categorias se encuentra en el esquema Compra.
Tabla Clientes
Contiene informacin o relacin de clientes que se encuentran registrados en la base
de datos. La tabla Clientes se encuentra en el esquema Venta
Tabla Proveedores
Contiene informacin o relacin de los proveedores que se encuentran registrados en
la base de datos. La tabla Proveedores se encuentra en el esquema Compra
Tabla Productos
Contiene informacin o relacin de los productos que ofrecen para la venta y que se
encuentran registrados en la base de datos. La tabla Productos se encuentra en el
esquema Compra.
Tabla Cargos
Contiene informacin o relacin de los cargos que se le asigna a cada empleado que
se encuentran registrados en la base de datos. La tabla Cargos se encuentra en el
esquema RRHH.
Tabla Distritos
Contiene informacin o relacin de los distritos que se le asigna a cada empleado que
se encuentran registrados en la base de datos. La tabla Distritos se encuentra en el
esquema RRHH.
Tabla Empleados
Contiene informacin o relacin de los empleados que se encuentran registrados en la
base de datos. La tabla Empleados se encuentra en el esquema RRHH.
Tabla PedidosCabe
Contiene informacin o relacin de la cabecera de los pedidos que se registran en el
proceso de la venta y que se encuentran registrados en la base de datos. La tabla
PedidosCabe se encuentra en el esquema Venta.
Tabla PedidosDeta
Contiene informacin o relacin del detalle de los productos solicitados en los pedidos
de venta y que se encuentran registrados en la base de datos. La tabla PedidosDeta
se encuentra en el esquema Compra.
USE NEGOCIOS2011
GO
1.2.1. Operadores
Un operador es un smbolo que especifica una accin que se realiza en una o ms
expresiones. A continuacin, detallamos las categoras de operadores que utilizan
SQL Server.
Operador Significado
+ (sumar) Suma
- (restar) Resta
* (multiplicar) Multiplicacin
/ (dividir) Divisin
Los operadores de suma (+) y resta (-) son utilizados para realizar operaciones
aritmticas sobre valores datetime y smalldatetime.
<> No es igual a
!= No es igual a (no es del estndar ISO)
!< No es menor que (no es del estndar ISO)
!> No es mayor que (no es del estndar ISO)
Operador Significado
Ejemplo: Mostrar todos los productos donde el valor del precioUnidad se encuentre
entre 27 a 30
USE NEGOCIOS2011
GO
Sintaxis
MATCH_EXPRESSION [NOT] LIKE PATTERN [ESCAPE ESCAPE_CHARACTER]
Argumentos:
match_expression: Es cualquier expresin vlida de tipo de datos de caracteres.
Pattern: Es la cadena de caracteres especfica que se busca en match_expression;
puede incluir los siguientes caracteres comodn vlidos. pattern puede tener 8.000
bytes como mximo.
% Cualquier cadena de WHERE title LIKE '%computer%' busca todos los ttulos de
cero o ms caracteres. libros que contengan la palabra 'computer' en el ttulo.
_ (carcter de Cualquier carcter. WHERE au_fname LIKE _ean busca todos los nombres de
subrayado) cuatro letras que terminen en ean (Dean, Sean, etc.)
[^] Cualquier carcter que WHERE au_lname LIKE de[^l]% busca todos los apellidos
no se encuentre en el de autores que empiecen por de y en los que la siguiente
intervalo ([^a-f]) o letra no sea l.
conjunto ([^abcdef]) que
se ha especificado.
Ejercicio:
USE NEGOCIOS2011
GO
Funcin Descripcin
DATEADD Devuelve un valor date con el intervalo number especificado,
agregado a un valor datepart especificado de ese valor date.
Funcin Descripcin
LEFT Devuelve la parte izquierda de una cadena de caracteres con el
nmero de caracteres especificado.
LEN ( string_expression )
LOWER Devuelve una expresin de caracteres despus de convertir en
minsculas los datos de caracteres en maysculas.
LOWER ( character_expression )
LTRIM Devuelve una expresin de caracteres tras quitar todos los espacios
iniciales en blanco.
LTRIM ( character_expression )
RTRIM Devuelve una cadena de caracteres despus de truncar todos los
espacios en blanco finales.
RTRIM ( character_expression )
SUBSTRING Devuelve parte de una expresin de caracteres, binaria, de texto o
de imagen. Para obtener ms informacin acerca de los tipos de
datos vlidos de SQL Server que se pueden usar con esta funcin.
UPPER ( character_expression )
Ejercicio
Convierte una expresin de un tipo de datos en otro tipo de dato definido en SQL
Server 2008.
Funcin Descripcin
CAST Convierte una expresin a un tipo de datos
Ejemplo
USE NEGOCIOS2011
GO
Agrega una o varias filas nuevas a una tabla o una vista en SQL Server 2008.
Sintaxis:
INSERT
{ [TOP (expresin) [ PERCENT ] ] [ INTO ] { <OBJETO> }
{
{ VALUES ( { DEFAULT | NULL | expression } [ ,...n ] )
[ ,...n ]
| table_derivada
| sentencia_ejecutar
| <table_origen>
| DEFAULT VALUES
}
}
}
INSERT INTO tabla [(columna1, columna2, columnan)] VALUES (expr1, expr2, exprn)
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
USE NEGOCIOS2011;
GO
USE NEGOCIOS2011;
GO
UPDATE Nombre_tabla
SET nombre_columna1 = expr1, nombre_columna2 = expr2,...
[WHERE {condicin}]
USE NEGOCIOS2011;
GO
UPDATE COMPRA.PRODUCTOS
SET PRECIOUNIDAD = 6000, UNIDADESENEXISTENCIA *= 1.50
GO
USE NEGOCIOS2011;
GO
UPDATE COMPRA.PRODUCTOS
SET PRECIOUNIDAD *= 1.25
WHERE NOMPRODUCTO LIKE 'A%' AND UNIDADESENEXISTENCIA > 100;
GO
USE NEGOCIOS2011;
GO
UPDATE VENTA.SALESEMPLEADO
SET VENTAEMP = VENTAEMP + (SELECT SUM(PRECIOUNIDAD*CANTIDAD)
FROM VENTA.PEDIDOSCABE PE JOIN VENTA.PEDIDOSDETA AS PD
ON PE.IDPEDIDO= PD.IDPEDIDO)
GO
La sentencia DELETE se utiliza para eliminar uno o varios registros de una misma
tabla. En una instruccin DELETE con mltiples tablas, debe incluir el nombre de tabla
(Tabla.*). Si especifica ms de una tabla para eliminar registros, todas deben tener
una relacin de muchos a uno. Si desea eliminar todos los registros de una tabla,
eliminar la propia tabla es ms eficiente que ejecutar una consulta de borrado.
USE NEGOCIOS2011;
GO
USE NEGOCIOS2011;
GO
DELETE VENTA.PEDIDOSDETA
FROM VENTA.PEDIDOSCABE PE JOIN VENTA.PEDIDOSDETA PD
ON PE.IDPEDIDO=PD.IDPEDIDO
WHERE DATEDIFF(YY, GETDATE(), FECHAPEDIDO) > 10;
GO
Recupera las filas de la base de datos y habilita la seleccin de una o varias filas o
columnas de una o varias tablas en SQL Server 2008.
La sintaxis completa de la instruccin SELECT es compleja, aunque las clusulas
principales se pueden resumir del modo siguiente:
Sintaxis:
<SELECT statement> ::=
[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC |
DESC ] }
[ ,...n ] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP (expression) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING < search_condition > ]
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE o WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
Ejemplo: Recupera las filas de la tabla Productos cuyo precioUnidad sea mayor a 50
USE NEGOCIOS2011;
GO
BEGIN
DECLARE @MYPRODUCTO INT
SET @MYPRODUCTO = 750
-- EVALUAR SI LA VARIABLE @MYPRODUCTO ES DIFERENTE DE 0
IF (@MYPRODUCTO <> 0)
Utilice la siguiente sintaxis para la creacin de una tabla con datos a partir de una
consulta:
Por ejemplo: Recuperar los registros de empleados cuyo cargo sea Supervisor de
Ventas y almacenarlos en la tabla EmpleadosBAK
USE NEGOCIOS2011
GO
SELECT IDEMPLEADO,
APEEMPLEADO,
NOMEMPLEADO
INTO DBO.EMPLEADOBAK
FROM RRHH.EMPLEADOS
WHERE IDCARGO = (SELECT C.IDCARGO
FROM RRHH.CARGOS C
WHERE DESCARGO = 'SUPERVISOR DE VENTAS')
GO
La instruccin MERGE, nos permite realizar mltiples acciones sobre una tabla
tomando uno o varios criterios de comparacin; es decir, realiza operaciones de
insercin, actualizacin o eliminacin en una tabla de destino segn los resultados de
una combinacin con una tabla de origen. Por ejemplo, puede sincronizar dos tablas
insertando, actualizando o eliminando las filas de una tabla segn las diferencias que
se encuentren en la otra.
2 La otra razn por la cual podramos usar MERGE, es cuando tenemos nuevos
datos que queremos almacenar en una tabla y no sabemos si la primary key de
la tabla ya existe o no, por lo tanto, no sabemos si hacer un UPDATE o un
INSERT en la tabla.
Sintaxis:
MERGE [INTO] <target table>
USING <source table>
ON <join/merge predicate>
WHEN [TARGET] NOT MATCHED <statement to runt>
Donde:
<target table>: Es la tabla de destino de las operaciones de insercin, actualizacin o
eliminacin que las clusulas WHEN de la instruccin MERGE especifican.
<source table>: Especifica el origen de datos que se hace coincidir con las filas de
datos en target_table. El resultado de esta coincidencia dicta las acciones que tomarn
las clusulas WHEN de la instruccin MERGE.
<statement to run when match found in target>: Especifica que todas las filas de
target_table que coinciden con las filas que devuelve <table_source> ON
<merge_search_condition> y que satisfacen alguna condicin de bsqueda adicional
se actualizan o eliminan segn la clusula <merge_matched>.
Ejemplo: Usar MERGE para realizar operaciones INSERT y UPDATE en una tabla
en una sola instruccin. Implemente un escenario para actualizar o insertar un
registro a la tabla pases: Si existe el cdigo del pas, actualice su nombre; sino inserte
el registro a la tabla
USE NEGOCIOS2011
GO
Ejemplo: Usar MERGE para realizar operaciones DELETE y UPDATE en una tabla
en una sola instruccin. Implemente un escenario para actualizar o eliminar un
registro a la tabla productos: Si existe el cdigo del producto y las
unidadesEnExistencia es menor o igual a cero, elimine el registro; sino actualice el
nombre del producto
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
Conocidos los fundamentos bsicos del comando SELECT, y est familiarizado con
varias de sus clusulas, a continuacin vamos a aprender tcnicas de consultas ms
avanzadas. Una de estas tcnicas es la de combinar el contenidos de una o ms
tablas para producir un conjunto de resultados que incorpore filas y columnas de cada
tabla. Otra tcnica es la de agrupar los datos para obtener, desde un conjunto de filas,
datos agrupados. Se pueden usar los elementos de Transact-SQL tales con CUBE y
ROLLUP para resumir datos.
Con esta operacin, se calcula el producto cruzado de los registros de dos tablas, pero solo
permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que
se especifican. La clusula INNER JOIN permite la combinacin de los registros de las
tablas, comparando los valores de la columna especfica en ambas tablas. Cuando no
existe esta correspondencia, el registro no se muestra
Esta consulta de Transact SQL es un ejemplo de una combinacin interna:
USE NEGOCIOS2011
GO
Esta combinacin interna se conoce como una combinacin equivalente. Devuelve todas
las columnas de ambas tablas y slo devuelve las filas en las que haya un valor igual en la
columna de la combinacin. Es equivalente a la siguiente consulta:
USE NEGOCIOS2011
GO
Mediante esta operacin no se requiere que cada registro en las tablas a tratar tenga un
registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no
existe otro registro que le corresponda. Este tipo de operacin se subdivide dependiendo
de la tabla a la cual se le admitirn los registros que no tienen correspondencia, ya sean de
tabla izquierda, de tabla derecha o combinacin completa.
SQL Server 2008 utiliza las siguientes palabras clave para las combinaciones externas
especificadas en una clusula FROM:
LEFT OUTER JOIN o LEFT JOIN
RIGHT OUTER JOIN o RIGHT JOIN
FULL OUTER JOIN o FULL JOIN
El operador de combinacin LEFT JOIN, indica que todas las filas de la primera tabla se
deben incluir en los resultados, con independencia si hay datos coincidentes en la segunda
tabla.
Ejemplo: Mostrar los registros de los clientes que han solicitado pedidos y aquellos clientes
que aun no han registrado pedidos
USE NEGOCIOS2011
GO
El operador de combinacin RIGHT JOIN, indica que todas las filas de la segunda tabla se
deben incluir en los resultados, con independencia si hay datos coincidentes en la primera
tabla.
Ejemplo: Mostrar los pedidos registrados por los productos, incluya los productos que
aun no se ha registrado en algn pedido.
USE NEGOCIOS2011
GO
Ejemplo: Mostrar los pedidos registrados por los productos, incluya los productos que
aun no se ha registrado en algn pedido.
USE NEGOCIOS2011
GO
D. COMBINACION CRUZADA
Las combinaciones cruzadas presentan el producto cartesiano de todos los registros de las
dos tablas. Se emplea el CROSS JOIN cuando se quiere combinar todos los registros de
una tabla con cada registro de otra tabla.
Por ejemplo, elaborar una lista de los productos donde asigne a cada producto todos los
posibles proveedores registrados en la base de datos. Aplique combinacin cruzada:
USE NEGOCIOS2011
GO
Las funciones SUM y AVG slo pueden utilizarse con columnas numricas: int ,
smallint , tinyint, decimal, numeric, float y Money. Las funciones MIN y MAX no pueden
usarse con tipos de datos bit .
Las funciones agregadas distintas de COUNT(*) no pueden utilizarse con los tipos de
datos text e image
USE NEGOCIOS2011
GO
La palabra clave DISTINCT es opcional con SUM, AVG y COUNT, y no se permite con
MIN, MAX ni COUNT (*). Si utiliza DISTINCT, el argumento no puede incluir una
expresin aritmtica, slo debe componerse de un nombre de columna, esta palabra
clave aparece entre parntesis y antes del nombre de la columna.
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
La funcin MAX (expr) y la funcin MIN (expr) devuelven el mximo o mnimo valor de
un conjunto de valores contenidos en un campo especfico de una consulta.
La expresin (expr) es el campo sobre el que se desea realizar el clculo; 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).
USE NEGOCIOS2011
GO
La funcin SUM (expr) retorna la suma del conjunto de valores contenido en un campo
especfico de una consulta.
La expresin (expr) representa el nombre del campo que contiene los datos que
desean sumarse o una expresin que realiza un clculo utilizando los datos de dichos
campos.
USE NEGOCIOS2011
GO
segn los resultados de las columnas calculadas utilizando tipos de datos numricos
en una expresin. El nmero mximo de columnas o expresiones es 16.
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier
registro agrupado por la clusula GROUP BY que satisfaga las condiciones de la
clusula HAVING.
Ejemplo: Mostrar los clientes cuyo importe total de pedidos (suma de pedidos
registrados por cada cliente) sea mayor a 1000.
USE NEGOCIOS2011
GO
Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar y la
clusula HAVING para filtrar los registros una vez agrupados.
Ejemplo: Mostrar los clientes cuyo importe total de pedidos (suma de pedidos
registrados por cliente) sea mayor a 1000 siendo registrados en el ao 2011.
USE NEGOCIOS2011
GO
Sintaxis:
{ <consulta> | ( <expresin> ) }
UNION [ALL]
<consulta | (<expresin>)
[UNION [ALL]
<consulta > | ( <expresin> )
[...n]]
Argumentos:
<consulta > | ( <expresin> ): Es una especificacin o expresin de consulta que
devuelve datos que se van a combinar con los datos de otra especificacin o
expresin de consulta. No es preciso que las definiciones de las columnas que forman
parte de una operacin UNION sean iguales, pero deben ser compatibles a travs de
una conversin implcita. Cuando los tipos son los mismos, pero varan en cuanto a
precisin, escala o longitud, el resultado se determina segn las mismas reglas para
combinar expresiones.
UNION: Especifica que se deben combinar varios conjuntos de resultados para ser
devueltos como un solo conjunto de resultados.
ALL: Agrega todas las filas a los resultados. Incluye las filas duplicadas. Si no se
especifica, las filas duplicadas se quitan.
USE NEGOCIOS2011
GO
USE NEGOCIOS2011
GO
SELECT E.NOMEMPLEADO,
E.APEEMPLEADO,
COUNT(*) AS 'CANTIDAD'
FROM RRHH.EMPLEADOS E JOIN VENTAS.PEDIDOSCABE P
ON E.IDEMPLEADO = P.IDEMPLEADO
WHERE YEAR(FECHAPEDIDO)=2011
GROUP BY E.NOMEMPLEADO, E.APEEMPLEADO
UNION
SELECT E.NOMEMPLEADO, E.APEEMPLEADO, 0 AS 'CANTIDAD'
FROM RRHH.EMPLEADOS E
WHERE E.IDEMPLEADO NOT IN(SELECT P.IDEMPLEADO FROM
VENTAS.PEDIDOSCABE P
WHERE YEAR(FECHAPEDIDO)=2011)
GO
USE NEGOCIOS2011
GO
Se genera una fila para cada combinacin nica de valores de (cliente, ao), (cliente) y
(ao), con un subtotal para cada fila y una fila de total general.
El operador CUBE se utiliza con una funcin agregada para generar filas adicionales
en un juego de resultados. Las columnas incluidas en la clusula GROUP BY tienen
referencias cruzadas para producir un super juego de grupos.
USE NEGOCIOS2011
GO
El operador ROLLUP es til para generar reportes que contienen subtotales y totales.
Genera un conjunto de resultados que es similar al conjunto de resultados del CUBE.
Las diferencias entre los operadores CUBE y ROLLUP son las siguientes:
CUBE genera un conjunto de resultados mostrando agregaciones para todas
las combinaciones de valores en las columnas seleccionadas.
ROLLUP genera un conjunto de resultados mostrando agregaciones para
jerarquas en las columnas seleccionadas.
Ejemplo: Mostrar la cantidad de pedidos registrados por cada ao. Al finalizar visualice
la cantidad total de pedidos.
USE NEGOCIOS2011
GO
Ejemplo: Mostrar la cantidad de pedidos registrados por cada empleado y por ao, al
finalizar visualice la cantidad total de pedidos por cada empleado y la cantidad total de
todos los pedidos.
USE NEGOCIOS2011
GO
Resumen
Un operador es un smbolo que especifica una accin que se realiza en una o ms
expresiones. Los operadores se clasifican en aritmticos, de asignacin, de
comparacin, lgicos
Las funciones son mtodos que permiten retornar un valor. Las funciones en SQL
SERVER se clasifican en: funciones de fechas, de cadena, de conversin.
La sentencia INSERT agrega una o varias filas a una tabla o vista en SQL
SERVER. Utilizando el comando SELECT, podemos agregar mltiples registros.
La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una
o varias columnas de una tabla de la base de datos.
La sentencia DELETE se utiliza para eliminar uno o varios registros de una misma
tabla. En una instruccin DELETE , con mltiples tablas, debe incluir el nombre de
tabla (Tabla.*). Si especifica ms de una tabla para eliminar registros, todas deben
tener una relacin de muchos a uno.
La sentencia SELECT recupera las filas de la base de datos y habilita la seleccin
de una o varias filas o columnas de una o varias tablas en SQL Server 2008.
La instruccin MERGE nos permite realizar mltiples acciones sobre una tabla
tomando uno o varios criterios de comparacin, es decir, realiza operaciones de
insercin, actualizacin o eliminacin en una tabla de destino segn los resultados
de una combinacin con una tabla de origen.
La sentencia JOIN , en el lenguaje de consulta, permite combinar registros de dos o
ms tablas en una base de datos relacional. La sentencia JOIN se pueden especificar
en las clusulas FROM o WHERE, aunque se recomienda que se especifiquen en la
clusula FROM. La clusula INNER JOIN permite la combinacin de los registros de
las tablas, comparando los valores de la columna especfica en ambas tablas.
La sentencia LEFT JOIN retorna la pareja de todos los valores de la izquierda con los
valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en
caso de no correspondencia. El operador RIGHT JOIN indica que todas las filas de la
segunda tabla se deben incluir en los resultados, con independencia si hay datos
coincidentes en la primera tabla.
Los resultados de consultas se pueden resumir, agrupar y ordenar utilizando funciones
agregadas y las clusulas GROUP BY, HAVING y ORDER BY con la instruccin
SELECT. Tambin, se puede usar la clusula compute (una extensin Transact-SQL)
con funciones agregadas para generar un informe con filas detalladas y resumidas.
http://www.sqlmax.com/centro/moduloIII_3.asp?MX=
Aqu hallar los conceptos de tcnicas avanzadas de consulta de datos.
http://msdn.microsoft.com/es-es/library/ms180026.aspx
En esta pgina, hallar los conceptos de la sentencia UNION.
Error! Referencia de hipervnculo no vlida.www.devjoker.com
Aqu hallar los conceptos de programacin TRANSACT SQL.
http://manuals.sybase.com/onlinebooks/group-
asarc/svs11001/tsqlsp/@Generic__BookTocView/2367;hf=0;pt=2367;lang=es
En esta pgina, hallar los conceptos de lenguaje de consulta.
UNIDAD DE
APRENDIZAJE
PROGRAMACIN TRANSACT-SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos. Cuando
se desea realizar una aplicacin completa para el manejo de una base de datos
relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de
consulta del SQL y la versatilidad de los lenguajes de programacin tradicionales.
TRANSACT SQL es el lenguaje de programacin que proporciona Microsoft SQL
Server para extender el SQL estndar con otro tipo de instrucciones y elementos
propios de los lenguajes de programacin.
2.1.2 VARIABLES
Una variable es una entidad a la que se asigna un valor. Este valor puede cambiar
durante el proceso donde se utiliza la variable. SQL Server tiene dos tipos de
variables: locales y globales. Las variables locales estn definidas por el usuario,
mientras que las variables globales las suministra el sistema y estn predefinidas.
Los nombres de las variables locales deben empezar con el smbolo @. A cada
variable local se le debe asignar un tipo de dato definido por el usuario o un tipo de
dato suministrado por el sistema distinto de text, image o sysname. Sintaxis:
USE NEGOCIOS2011
GO
Variable Contenido
@@ERROR Contiene 0 si la ltima transaccin se ejecut de forma
correcta; en caso contrario, contiene el ltimo nmero de
error generado por el sistema. La variable global @@error
se utiliza generalmente para verificar el estado de error de
un proceso ejecutado.
@@IDENTITY Contiene el ltimo valor insertado en una columna
IDENTITY mediante una instruccin insert
@@VERSION Devuelve la Versin del SQL Server
@@SERVERNAME Devuelve el Nombre del Servidor
@@LANGUAGE Devuelve el nombre del idioma en uso
@@MAX_CONNECTIONS Retorna la cantidad mxima de conexiones permitidas
La palabra clave IF se utiliza para definir una condicin que determina si se ejecutar
la instruccin siguiente. La instruccin SQL se ejecuta si la condicin se cumple, es
decir, si devuelve TRUE (verdadero). La palabra clave ELSE introduce una instruccin
SQL alternativa que se ejecuta cuando la condicin IF devuelva FALSE. La sintaxis de
la estructura condicional IF:
IF (<expression>)
BEGIN
...
END
ELSE IF (<expression>)
BEGIN
...
END
ELSE
BEGIN
...
END
GO
La estructura CASE evala una lista de condiciones y devuelve una de las varias
expresiones de resultado posibles. La expresin CASE tiene dos formatos:
CASE <expresin>
WHEN <valor_expresion> THEN <valor_devuelto>
WHEN <valor_expresion1> THEN <valor_devuelto1>
ELSE <valor_devuelto2> -- Valor por defecto
END
Ejemplo: Declare una variable donde le asigne el numero del mes, evale el valor de
la variable y retorne el mes en letras.
Ejemplo: Mostrar los datos de los empleados evaluando el valor del campo
tratamiento asignando, para cada valor, una expresin.
USE NEGOCIOS2011;
GO
2.2.2.1 Usar una instruccin SELECT con una expresin CASE de bsqueda
Por ejemplo: Implemente un programa que permita listar los 100 primeros nmeros
enteros, visualizando en cada caso si es par o impar.
WHILE BOOLEAN_EXPRESION
BEGIN
EXPRESION_SQL
[BREAK]
[EXPRESION_SQL]
[CONTINUE]
[EXPRESION_SQL]
END
USE NEGOCIOS2011
GO
BEGIN
SELECT TOP 1 @ID= P.IDPRODUCTO, @NOMBRE=P.NOMBREPRODUCTO
FROM TB_PRODUCTOS P WHERE UNIDADESENEXISTENCIA=0
UPDATE TB_PRODUCTOS
SET UNIDADESENEXISTENCIA=1000
WHERE IDPRODUCTO=@ID
BEGIN TRY
EXPRESION_SQL
END TRY
BEGIN CATCH
EXPRESION_SQL
END CATCH
BEGIN TRY
DECLARE @DIVISOR INT, @DIVIDENDO INT, @RESULTADO INT
SET @DIVIDENDO = 100
SET @DIVISOR = 9
Error Descripcin
ERROR_NUMBER() Devuelve el numero de error
ERROR_SEVERITY() Devuelve la severidad del error
ERROR_STATE() Devuelve el estado del error
ERROR_PROCEDURE() Devuelve el nombre del procedimiento almacenado
que ha provocado el error
ERROR_LINE() Devuelve el nmero de lnea en la que se ha
producido el error.
ERROR_MESSAGE() Devuelve el mensaje de error
BEGIN TRY
DECLARE @DIVISOR INT, @DIVIDENDO INT, @RESULTADO INT
SET @DIVIDENDO = 100
SET @DIVISOR = 9
-- ESTA LINEA PROVOCA UN ERROR DE DIVISION POR 0
SET @RESULTADO = @DIVIDENDO/@DIVISOR
PRINT 'NO HAY ERROR'
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
PRINT ERROR_STATE()
END CATCH;
Otra forma de implementar este proceso, es controlndolo a travs del bloque TRY
CATCH.
BEGIN TRY
DELETE FROM TB_CLIENTES
WHERE IDCLIENTE = 'ALFKI'
END TRY
BEGIN CATCH
IF @@ERROR=547
PRINT 'NO SE PUEDE ELIMINAR ESTE CLIENTE'
END CATCH
Ejemplo: Implemente un proceso que elimine los productos cuyo valor de sus unidades
en existencia, sea menor a 20, en caso de no ejecutar exitosamente el error,
implemente el CATCH para controlar el error.
BEGIN TRY
DELETE FROM TB_PRODUCTOS
WHERE UNIDADESENEXISTENCIA<20
END TRY
BEGIN CATCH
DECLARE @MENSAJE VARCHAR(255)
--RECUPERAR LA DESCRIPCION DEL VALOR DE @@ERROR
SELECT @MENSAJE= M.DESCRIPTION
FROM SYS.SYSMESSAGES M WHERE M.ERROR=@@ERROR
PRINT @MENSAJE
END CATCH
La severidad indica el grado de criticidad del error. Admite valores de 0 al 25, pero
solo podemos asignar valores del 0 al 18. Los errores el 20 al 25 son considerados
fatales por el sistema, y cerraran la conexin que ejecuta el comando RAISERROR.
Para asignar valores del 19 al 25, necesitaremos ser miembros de la funcin de SQL
Server sysadmin.
Un cursor es una variable que nos permite recorres con un conjunto de resultados
obtenidos a travs de una sentencia SELECT fila por fila.
El uso de los cursores es una tcnica que permite tratar fila por fila el resultado de una
consulta, contrariamente al SELECT SQL que trata a un conjunto de fila. Los cursores
pueden ser implementador por instrucciones TRANSACT-SQL (cursores ANSI-SQL) o
por la API OLE-DB.
Se utilizarn los cursores ANSI cuando sea necesario tratar las filas de manera
individual en un conjunto o cuando SQL no pueda actuar nicamente sobre las filas
afectadas. Los cursores API sern utilizados por las aplicaciones cliente para tratar
volmenes importantes o para gestionar varios conjuntos de resultados.
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- LECTURA DE LA SIGUIENTE FILA DE UN CURSOR
FETCH <NOMBRE_CURSOR> INTO <LISTA_VARIABLES>
...
END -- FIN DEL BUCLE WHILE
-- CIERRA EL CURSOR
CLOSE <NOMBRE_CURSOR>
Adems de esta sintaxis conforme con la norma ISO, TRANSACT-SQL propone una
sintaxis ampliada en la definicin de los cursores:
Esta instruccin permite hacer operativo el cursor y crear eventualmente las tablas
temporales asociadas. La variable @@CURSOR_ROWS se asigna despus de
OPEN.
Sintaxis:
Sintaxis:
NEXT lee la fila siguiente (nica opcin posible para los INSENSITIVE
CURSOR).
PRIOR lee la fila anterior
FIRST lee la primera fila
LAST lee la ltima fila
ABSOLUTE n lee la ensima fila del conjunto
RELATIVE n lee la ensima fila a partir de la fila actual.
Cierra el cursor y libera la memoria. Esta operacin debe interponerse lo antes posible
con el fin de liberar los recursos cuanto antes. La sintaxis es la siguiente:
CLOSE <nombre_cursor>
DEALLOCATE <nombre_cursor>
--CURSORES
DECLARE MI_CURSOR CURSOR FOR
SELECT TOP 1 * FROM COMPRAS.PRODUCTOS
--ABRIR
OPEN MI_CURSOR
--CERRAR
CLOSE MI_CURSOR
--LIBERAR
DEALLOCATE MI_CURSOR
Ejemplo 2: Trabajando con un cursor dinmico, defina un cursor dinmico que permita
visualizar: el primer registro, el registro en la posicin 6 y el ltimo registro.
--CURSORES
DECLARE MI_CURSOR CURSOR SCROLL FOR
SELECT * FROM COMPRAS.PRODUCTOS
-- ABRIR
OPEN MI_CURSOR
-- CERRAR
CLOSE MI_CURSOR
-- LIBERAR
DEALLOCATE MI_CURSOR
Ejemplo: Trabajando con un cursor, listar los clientes registrados en la base de datos,
incluya el nombre del pas.
-- DECLARO EL CURSOR
DECLARE MI_CURSOR CURSOR FOR
SELECT C.IDCLIENTE,
C.NOMBRECLIENTE,
P.NOMBREPAIS
FROM VENTAS.CLIENTES C
JOIN VENTAS.PAISES P ON C.IDPAIS=P.IDPAIS
-- ABRIR
OPEN MI_CURSOR
-- CERRAR
CLOSE MI_CURSOR
-- LIBERAR
DEALLOCATE MI_CURSOR;
GO
Ejemplo: Trabajando con un cursor, listar la relacin de los clientes que han registrado
pedidos. En dicho proceso, debemos imprimir el nombre del cliente, la cantidad de
pedidos registrados y al finalizar totalizar el proceso (suma total de todos los pedidos).
-- DECLARO EL CURSOR
DECLARE MI_CURSOR CURSOR FOR
SELECT C.NOMBRECIA,
COUNT(*)
FROM VENTAS.CLIENTES C
JOIN VENTAS.PEDIDOSCABE PC ON C.IDCLIENTE=PC.IDCLIENTE
GROUP BY C.NOMBRECLIENTE
-- ABRIR
OPEN MI_CURSOR
-- CERRAR
CLOSE MI_CURSOR
-- LIBERAR
DEALLOCATE MI_CURSOR;
-- IMPRIMIR
PRINT 'TOTAL DE PEDIDOS:' + CAST(@TOTAL AS VARCHAR)
GO
Ejemplo: Trabajando con un cursor, imprimir un listado de los pedidos realizados por
cada ao. En dicho proceso, listar por cada ao los pedidos registrados y totalizando
dichos pedidos por dicho ao.
SET @TOTAL=0
-- DECLARO EL CURSOR
DECLARE MI_CURSOR CURSOR FOR
SELECT YEAR(FECHAPEDIDO),
PC.IDPEDIDO,
SUM(PRECIOUNIDAD*CANTIDAD)
FROM VENTAS.PEDIDOSCABE C
JOIN VENTAS.PEDIDOSDETA D ON C.IDPEDIDO=D.IDPEDIDO
GROUP BY YEAR(FECHAPEDIDO), PC.IDPEDIDO
ORDER BY 1
-- ABRIR EL CURSOR
OPEN MI_CURSOR
-- IMPRIMIR EL PRIMER AO
PRINT 'AO:' + CAST(@Y1 AS VARCHAR)
-- CERRAR
CLOSE MI_CURSOR
-- LIBERAR
DEALLOCATE MI_CURSOR;
Para actualizar los datos de un cursor, debemos especificar la clusula FOR UPDATE
despus de la sentencia SELECT en la declaracin del cursor, y WHERE CURRENT
OF <nombre_cursor> en la sentencia UPDATE.
--IMPRIMIR
PRINT 'EL PRECIO DE PRODUCTO '+ @NOMBRE+ ' ES ' + STR(@PRECIO)
Resumen
SQL es un lenguaje de consulta para los sistemas de bases de datos relacinales,
pero que no posee la potencia de los lenguajes de programacin. No permite el uso
de variables, estructuras de control de flujo, bucles y dems elementos
caractersticos de la programacin.
TRANSACT-SQL ampla el SQL estndar con la implementacin de estructuras de
programacin. Estas implementaciones le resultarn familiares a los
desarrolladores con experiencia en C++, Java, Visual Basic .NET, C# y lenguajes
similares.
Una variable es una entidad a la que se asigna un valor. Este valor puede cambiar
durante el proceso donde se utiliza la variable. SQL Server tiene dos tipos de
variables: locales y globales. Las variables locales estn definidas por el usuario,
mientras que las variables globales las suministra el sistema y estn predefinidas.
La estructura condicional IF se utiliza para definir una condicin que determina si
se ejecutar la instruccin siguiente. La instruccin SQL se ejecuta si la condicin
se cumple, es decir, si devuelve TRUE (verdadero). La palabra clave ELSE
introduce una instruccin SQL alternativa que se ejecuta cuando la condicin IF
devuelva FALSE.
La estructura CASE evala una lista de condiciones y devuelve una de las varias
expresiones de resultado posibles. La expresin CASE tiene dos formatos:
La expresin CASE sencilla compara una expresin con un conjunto de
expresiones sencillas para determinar el resultado.
La expresin CASE buscada evala un conjunto de expresiones booleanas
para determinar el resultado.
La estructura WHILE ejecuta en forma repetitiva un conjunto o bloque de
instrucciones SQL siempre que la condicin especificada sea verdadera. Se puede
controlar la ejecucin de instrucciones en el bucle WHILE con las palabras clave
BREAK y CONTINUE.
BREAK y CONTINUE controlan el funcionamiento de las instrucciones dentro de
un bucle WHILE. BREAK permite salir del bucle WHILE. CONTINUE hace que el
bucle WHILE se inicie de nuevo.
http://www.devjoker.com/contenidos/catss/240/Cursores-en-Transact-SQL.aspx
Aqu hallar los conceptos de cursores TRANSACT SQL.
http://www.a2sistemas.com/blog/2009/02/06/uso-de-cursores-en-transact-sql/
En esta pgina, hallar los conceptos y ejercicios de Cursores
http://www.devjoker.com/gru/Tutorial-Transact-SQL/TSQL/Tutorial-Transact-
SQL.aspx
Aqu hallar los conceptos de programacin TRANSACT SQL.
UNIDAD DE
APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Las funciones son rutinas que permiten encapsular sentencias TRANSACT-SQL que
se ejecutan frecuentemente.
Las funciones de usuario son definidas para crear una rutina reutilizables que se
pueden utilizar en las siguientes maneras:
En TRANSACT-SQL como SELECT
En las aplicaciones de llamar a la funcin
En la definicin de otra funcin definida por el usuario
Para parametrizar una vista o mejorar la funcionalidad de una vista indizada
Para definir una columna en una tabla
Para definir una restriccin CHECK en una columna
Para reemplazar a un procedimiento almacenado
Son aquellas funciones donde retornan un valor nico: tipo de datos como int, Money,
varchar, real, etc. Pueden ser utilizadas en cualquier lugar, incluso, incorporada dentro
de las sentencias SQL.
Ejemplo: Crear una funcin que retorne el precio promedio de todos los productos
-- MOSTRAR EL RESULTADO
PRINT DBO.PRECIOPROMEDIO()
Ejemplo: Defina una funcin donde ingrese el id del empleado y retorne la cantidad de
pedidos registrados en el presente ao
Las funciones de tabla en lnea son las funciones que devuelven la salida de una
simple declaracin SELECT. La salida se puede utilizar adentro de JOINS o querys
como si fuera una tabla de estndar.
Ejemplo: Defina una funcin que liste los registros de los clientes, e incluya el nombre
del Pais.
-- EJECUTANDO LA FUNCION
SELECT * FROM DBO.CLIENTES() WHERE PAIS='CHILE'
GO
Ejemplo: Defina una funcin que liste los registros de los pedidos por un determinado
ao, incluya el nombre del producto, el precio que fue vendido y la cantidad vendida
-- EJECUTANDO LA FUNCION
SELECT * FROM DBO.PEDIDOSAO(2010)
GO
Son similares a los procedimientos almacenados excepto que vuelven una tabla. Este
tipo de funcin se usa en situaciones donde se requiere ms lgica y proceso. Lo que
sigue es la sintaxis para unas funciones de tabla de multisentencias:
Ejemplo: Defina una funcin que retorne el inventario de los productos registrados en
la base de datos.
-- EJECUTANDO LA FUNCION
SELECT * FROM DBO.INVENTARIO()
GO
Ejemplo: Defina una funcin que permita generar un reporte de ventas por empleado,
en un determinado ao. En este proceso, la funcin debe retornar: los datos del
empleado, la cantidad de pedidos registrados y el monto total por empleado
SUM(PRECIOUNIDAD*CANTIDAD)
FROM VENTAS.PEDIDOSCABE PC JOIN VENTAS.PEDIDOSDETA PD
ON PC.IDPEDIDO = PD.IDPEDIDO JOIN VENTAS.EMPLEADOS E
ON E.IDEMPLEADO = PC.IDEMPLEADO
WHERE YEAR(FECHAPEDIDO) = @Y
GROUP BY E.IDEMPLEADO, APELLIDOS
RETURN
END
GO
3.1.1.4 Limitaciones
Las funciones definidas por el usuario tienen algunas restricciones. No todas las
sentencias SQL son vlidas dentro de una funcin. Las listas siguientes enumeran las
operaciones vlidas e invlidas de las funciones:
Vlido:
Las sentencias de asignacin
Las sentencias de Control de Flujo
Sentencias SELECT y modificacin de variables locales
Operaciones de cursores sobre variables locales Sentencias INSERT,
UPDATE, DELETE con variables locales
Invlidas:
Armar funciones no determinadas como GetDate()
Sentencias de modificacin o actualizacin de tablas o vistas
Operaciones CURSOR FETCH que devuelven datos del cliente
Incluir parmetros
Llamar a otros procedimientos
Devolver un valor de estado a un procedimiento de llamada o lote para indicar el
xito o el fracaso del mismo y la razn de dicho fallo.
Devolver valores de parmetros a un procedimiento de llamada o lote
Ejecutarse en SQL Server remotos
Por ejemplo: Defina un procedimiento almacenado que liste todos los clientes
-- PROCEDIMIENTO ALMACENADO
CREATE PROCEDURE USP_CLIENTES
AS
SELECT IDCLIENTE AS CODIGO,
NOMBRECIA AS CLIENTE,
DIRECCION,
TELEFONO
FROM VENTAS.CLIENTES
GO
O simplemente
Por ejemplo: Cree un procedimiento almacenado que permita buscar los datos de los
pedidos registrados en una determinada fecha. El procedimiento deber definir un
parmetro de entrada de tipo DateTime
O simplemente, colocar la lista de los valores el cual ser asignada a cada parmetro,
donde el primer valor le corresponde a @f1
La direccin de un parmetro puede ser de entrada, que indica que un valor se pasa al
parmetro de entrada de un procedimiento almacenado o de salida, que indica que el
procedimiento almacenado devuelve un valor al programa que lo llama mediante un
parmetro de salida. El valor predeterminado es un parmetro de entrada.
Para especificar un parmetro de salida, debe indicar la palabra clave OUTPUT en la
definicin del parmetro del procedimiento almacenado. El programa que realiza la
llamada tambin debe utilizar la palabra clave OUTPUT al ejecutar el procedimiento
almacenado, a fin de guardar el valor del parmetro en una variable que se pueda
utilizar en el programa que llama.
Por ejemplo: Cree un procedimiento almacenado que muestre los datos de los
pedidos, los productos que fueron registrados por cada pedido, el precio del producto y
la cantidad registrada por un determinado cliente y ao. El procedimiento recibir
como parmetro de entrada el cdigo del cliente y el ao. Considere que el parmetro
ao tendr un valor por defecto: el ao del sistema.
Por ejemplo: Implemente un procedimiento almacenado que imprimir cada uno de los
registros de los productos, donde al finalizar, visualice el total del inventario (Suma de
cantidad de productos)
-- IMPRIMIR EL PRIMER AO
PRINT 'AO:' + CAST(@Y1 AS VARCHAR)
-- CERRAR EL CURSOR
CLOSE MI_CURSOR
-- LIBERAR EL RECURSO
DEALLOCATE MI_CURSOR;
USP_REPORTEPEDIDOSXAOXEMPLEADO 2
GO
Para este caso, hemos utilizado la instruccin MERGE que evala la existencia de un
registro. Si existe, actualizar los datos, sino agrega el registro.
-- PARMETROS DE PEDIDOSDETA
@IDPROD INT,
@PRE DECIMAL,
@CANT INT
AS
Esta forma de procesar las operaciones de pedidos sera errnea, ya que cada
instruccin se ejecutara y confirmara de forma independiente, por lo que un error en
alguna de las operaciones dejara los datos errneos en la base de datos.
BEGIN TRY
/*Bloque de instrucciones a validar*/
END TRY
BEGIN CATCH
/*Bloque de instrucciones que se ejecutan si ocurre un ERROR*/
END CATCH
-- CONTROLAR EL PROCESO
IF @@ERROR = 0
BEGIN
-- CONFIRMACIN DE LA INSERCIN
COMMIT TRAN TCLIENTE
PRINT 'CLIENTE REGISTRADO'
END
ELSE
BEGIN
PRINT @@ERROR
-- DESHACER LA INSERCIN
ROLLBACK TRAN TCLIENTE
END
GO
Para un mejor control de los errores, ejecutamos los procesos dentro del bloque TRY
CATCH, donde en caso que las operaciones hayan tenido xito, ejecutar COMMIT
TRAN, pero en caso de error CATCH, ejecutar ROLLBACK TRAN, tal como se
muestra en el siguiente ejercicio.
-- CONFIRMANDO LA ACTUALIZACION
COMMIT TRAN TPEDIDO
PRINT 'PEDIDO REGISTRADO'
END TRY
BEGIN CATCH
PRINT @@ERROR
ROLLBACK TRAN TPEDIDO
END CATCH
GO
SOURCE.IDPAIS, TARGET.TELEFONO=SOURCE.FONOCLIENTE
WHEN NOT MATCHED THEN
INSERT VALUES(SOURCE.IDCLIENTE,SOURCE.NOMCLIENTE,
SOURCE.DIRCLIENTE, SOURCE.IDPAIS, SOURCE.FONOCLIENTE)
WHEN NOT MATCHED BY SOURCE THEN
DELETE ;
PRINT 'TRANSACCION COMPLETADA'
COMMIT TRAN BK
END TRY
BEGIN CATCH
PRINT @@ERROR
ROLLBACK TRAN
END CATCH
GO
Los disparadores pueden usarse para imponer la integridad de referencia de los datos
en toda la base de datos. Los disparadores tambin permiten realizar cambios en
cascada en tablas relacionadas, imponer restricciones de columna ms complejas
que las permitidas por las reglas, compara los resultados de las modificaciones de
datos y llevar a cabo una accin resultante.
A. Disparador de Insercin
Cuando se inserta una nueva fila en una tabla, SQL Server inserta los nuevos valores
en la tabla INSERTED el cual es una tabla del sistema. Est tabla toma la misma
estructura del cual se origin el TRIGGER, de tal manera que se pueda verificar los
datos y ante un error podra revertirse los cambios.
Cree un TRIGGER que permita insertar los datos de un Producto siempre y cuando la
descripcin o nombre del producto sea nico.
B. Disparador de Eliminacin
Cuando se elimina una fila de una tabla, SQL Server inserta los valores que fueron
eliminados en la tabla DELETED el cual es una tabla del sistema. Est tabla toma la
misma estructura del cual se origino el TRIGGER, de tal manera que se pueda
verificar los datos y ante un error podra revertirse los cambios. En este caso, la
reversin de los cambios significar restaurar los datos eliminados.
Cree un TRIGGER el cual permita eliminar Clientes los cuales no han registrado algn
pedido. De eliminarse algn Cliente que no cumpla con dicha condicin la operacin
no deber ejecutarse.
C. Disparador de Actualizacin
Cuando se actualiza una fila de una tabla, SQL Server inserta los valores que antiguos
en la tabla DELETED y los nuevos valores los inserta en la tabla INSERTED. Usando
estas dos tablas se podr verificar los datos y ante un error podran revertirse los
cambios.
Por ejemplo, cuando el valor que se actualiza en un campo de tarifa de una hora de
trabajo de una tabla de planilla excede un valor especfico, se puede definir un
desencadenador para producir un error y revertir la transaccin o insertar un nuevo
registro en un registro de auditora antes de insertar el registro en la tabla de planilla.
A. INSTEAD OF INSERT
Se pueden definir desencadenadores INSTEAD OF INSERT en una vista o tabla para
reemplazar la accin estndar de la instruccin INSERT. Normalmente, el
desencadenador INSTEAD OF INSERT se define en una vista para insertar datos en
una o ms tablas base.
B. INSTEAD OF UPDATE
Se pueden definir desencadenadores INSTEAD OF UPDATE en una vista o tabla para
reemplazar la accin estndar de la instruccin UPDATE. Normalmente, el
desencadenador INSTEAD OF UPDATE se define en una vista para modificar datos
en una o ms tablas. Las instrucciones UPDATE que hacen referencia a vistas que
contienen desencadenadores INSTEAD OF UPDATE deben suministrar valores para
todas las columnas que no admiten valores NULL a las que hace referencia la clusula
SET
C. INSTEAD OF DELETE
Se pueden definir desencadenadores INSTEAD OF DELETE en una vista o una tabla
para reemplazar la accin estndar de la instruccin DELETE. Normalmente, el
desencadenador INSTEAD OF DELETE se define en una vista para modificar datos en
una o ms tablas. Las instrucciones DELETE no especifican modificaciones de los
valores de datos existentes. Las instrucciones DELETE slo especifican las filas que
se van a eliminar. La tabla inserted pasada a un desencadenador DELETE siempre
est vaca. La tabla deleted enviada a un desencadenador DELETE contiene una
imagen de las filas en el estado que tenan antes de emitir la instruccin DELETE
Cada disparador puede aplicarse a una sola tabla. Sin embargo, un mismo disparador
se puede aplicar a las tres acciones del usuario: UPDATE, INSERT y DELETE.
No se puede crear un disparador en una vista ni en una tabla temporal, aunque los
disparadores pueden hacer referencia a las vistas o tablas temporales.
Los disparadores no se permiten en las tablas del sistema. Aunque no aparece ningn
mensaje de error su crea un disparador en una tabla del sistema, el disparador no se
utilizar.
Resumen
Las funciones definidas por el usuario, en tiempo de ejecucin de lenguaje
TRANSACT-SQL o comn (CLR), acepta parmetros, realiza una accin, como un
clculo complejo, y devuelve el resultado de esa accin como un valor. El valor de
retorno puede ser un escalar (nico) valor o una tabla.
Las funciones escalares son aquellas funciones donde retornan un valor nico: tipo
de datos como int, Money, varchar, real, etc. Pueden ser utilizadas en cualquier
lugar, incluso, incorporada dentro de las sentencias SQL. Las funciones de tabla en
lnea son las funciones que devuelven la salida de una simple declaracin
SELECT. La salida se puede utilizar adentro de JOINS o querys como si fuera una
tabla de estndar. Las funciones de tabla multisentencias son similares a los
procedimientos almacenados excepto que vuelven una tabla
Los procedimientos almacenados son grupos formados por instrucciones SQL y el
lenguaje de control de flujo. Cuando se ejecuta un procedimiento, se prepara un
plan de ejecucin para que la subsiguiente ejecucin sea muy rpida. Los
procedimientos almacenados pueden:
1. Incluir parmetros
2. Llamar a otros procedimientos
3. Devolver un valor de estado a un procedimiento de llamada o lote para
indicar el xito o el fracaso del mismo y la razn de dicho fallo.
4. Devolver valores de parmetros a un procedimiento de llamada o lote
5. Ejecutarse en SQL Server remotos
Un procedimiento almacenado se comunica con el programa que lo llama
mediante sus parmetros. Cuando un programa ejecuta un procedimiento
almacenado, es posible pasarle valores mediante los parmetros del
procedimiento. Estos valores se pueden utilizar como variables estndar en el
lenguaje de programacin TRANSACT-SQL. El procedimiento almacenado
tambin puede devolver valores al programa que lo llama mediante parmetros
OUTPUT. Un procedimiento almacenado puede tener hasta 2.100 parmetros,
cada uno de ellos con un nombre, un tipo de datos, una direccin y un valor
predeterminado
http://msdn.microsoft.com/es-es/library/ms189260.aspx
UNIDAD DE
APRENDIZAJE
TEMARIO
1.1. Introduccin
1.1.1. Porque utilizar bases de datos relacionales para datos XML
1.1.2. Tipos de datos XML
1.1.3. Integracin de relaciones y XML
1.1.4. FOR XML y mejoras OPENXML
1.2. Procesamiento XML en SQL SERVER
1.2.1. Tipos de datos XML
1.2.2. Almacenamiento de datos XML
1.2.3. Recuperacin de datos de tipo XML
1.2.3.1. Usar modo RAW
1.2.3.2. Usar modo AUTO
1.2.3.3. Usar modo EXPLICIT
1.2.3.4. Usar modo PATH
1.2.4. Recuperacin de datos con OPENXML
ACTIVIDADES PROPUESTAS
4.1 INTRODUCCION
XML es cada vez ms presente en las aplicaciones empresariales que se utilizan para
el modelado de datos semi-estructurados y no estructurados. Una de estas
aplicaciones es la gestin de documentos. Documentos (mensajes de correo
electrnico, por ejemplo) son semi-estructuradas por la naturaleza.
Microsoft SQL Server proporciona una consulta de gran alcance y las capacidades de
modificacin de datos en datos relacionales. En SQL Server 2008, estas capacidades
se extienden a consultar y modificar datos XML. Esto permite a su empresa para
aprovechar las inversiones hechas en versiones anteriores, como las inversiones en
Los datos XML pueden interactuar con datos relacionales y aplicaciones SQL. Esto
significa que XML puede ser introducido en el sistema segn las necesidades de
modelado de datos se presentan sin interrumpir las aplicaciones existentes. El
servidor de base de datos tambin proporciona una funcionalidad administrativa para
la gestin de datos XML (por ejemplo, BACKUP, recuperacin y replicacin).
La compatibilidad nativa con XML en SQL Server 2008 es necesario para hacer frente
a aumentar el uso de XML. Beneficios de la empresa de desarrollo de aplicaciones de
la compatibilidad con XML en SQL Server 2008.
El modelo de datos XML tiene caractersticas que lo hacen muy difcil por no decir
prcticamente imposible asignar al modelo de datos relacional. De datos XML tiene
una estructura jerrquica que puede ser recursivo, bases de datos relacionales ofrecen
poco apoyo para los datos jerrquicos (modelados como relaciones de clave externa).
El orden del documento es una propiedad inherente de instancias XML y debe ser
preservada en los resultados de la consulta. Esto est en contraste con los datos
relacionales, que no est ordenado, el orden debe ser ejecutada con columnas
adicionales pedidos. Volver a montar el resultado en la consulta es costoso para los
realistas esquemas XML que se descomponen los datos XML en un gran nmero de
tablas.
SQL Server 2008 introduce un tipo de datos nativo llamado XML. Un usuario puede
crear una tabla que tiene una o ms columnas de tipo XML, adems de columnas
relacionales. Las variables y los parmetros de XML tambin son permitidos. Los
valores XML se almacenan en un formato interno como objetos binarios grandes
(BLOB) para apoyar a las caractersticas del modelo XML, tales como el orden del
documento y las estructuras recursivas, con mayor fidelidad.
SQL Server 2008 ofrece colecciones de esquemas XML como una manera de manejar
esquemas XML del W3C como metadatos. Un tipo de datos XML se puede asociar
con una coleccin de esquemas XML para hacer cumplir las restricciones de esquema
en las instancias XML. Cuando los datos XML se asocian con una coleccin de
esquemas XML, se llama XML con tipo, de lo contrario se llama XML sin tipo. Con tipo
y XML sin tipo se alojan en un marco nico, el modelo de datos XML se conserva, y el
procesamiento de consultas aplica la semntica XML. La infraestructura relacional
subyacente se utiliza ampliamente para este propsito. Es compatible con la
interoperabilidad entre datos relacionales y XML, con objeto de alcanzar la adopcin
ms generalizada de las caractersticas XML.
Los usuarios pueden almacenar datos relacionales y XML dentro de la misma base de
datos. En pocas palabras, el motor de base de datos sabe hacer honor a la modelo de
datos XML, adems del modelo de datos relacional. De datos relacionales y
aplicaciones de SQL, siguen comportndose correctamente en la actualizacin a SQL
Server 2008. De datos XML que residen en los archivos y las columnas de texto o la
imagen se puede mover en las columnas de tipo de datos XML en el servidor. La
columna XML se puede indexar, consultar y modificar con los mtodos de tipo de
datos XML.
La nueva directiva TYPE genera una instancia de tipo de datos XML que se pueden
asignar a una columna de XML, una variable o parmetro, o consultar utilizando los
mtodos de tipo de datos XML. Esto permite el anidamiento de SELECT... FOR
instrucciones de tipo XML.
El modo PATH permite a los usuarios especificar la ruta en el rbol XML donde el valor
de una columna debe aparecer y junto con el mencionado anidacin. Es ms cmodo
para escribir que para EXPLCITA XML.
SQL Server permite proporcionar una base de datos que puede almacenar datos
relacionales y XML.
Comprueba la buena formacin de los datos se lleva a cabo, que no requiere el tipo de
datos XML en obligarse a los esquemas XML. Datos que no estn bien formados son
rechazados. XML sin tipo es til cuando el esquema no se sabe a priori para que una
solucin basada en la cartografa no sea posible. Tambin, es til cuando el esquema
se conoce, pero la asignacin a un modelo de datos relacional es muy complejo y
difcil de mantener, o existen varios esquemas y estn obligados a fines de los datos
basados en los requerimientos externos.
La siguiente sentencia crea una tabla llamada SOLICITUD con una clave entera y una
columna XML sin tipo llamada detalle
USE NEGOCIOS2011
GO
Las columnas XML, los parmetros y las variables pueden almacenar documentos
XML o contenido, que se puede especificar como una opcin (documento o contenido,
respectivamente, con un contenido por defecto) en el momento de la declaracin.
Adems, debe proporcionar la coleccin de esquemas XML.
La siguiente sentencia crea una tabla llamada XmlCredito con un documento XML
con tipo columna con myCollection. La columna XML se especifica tambin que
aceptar fragmentos de XML, no slo los documentos XML.
USE NEGOCIOS2011
GO
Puede proporcionar un valor para una columna XML a travs de un parmetro o una
variable de varias maneras:
Como tipo binario o de SQL que se convierte implcitamente en el tipo de
datos XML.
A travs del contenido de un archivo.
Como la salida del mecanismo de publicacin XML FOR XML con la directiva
TYPE, que genera una instancia de datos de tipo XML.
Para un dato XML con tipo, el valor proporcionado se comprueba la conformidad con
los esquemas XML que se registran en la coleccin de esquemas XML que est
escribiendo la columna XML. La instancia XML se rechaza si no est validacin.
Adems, la bandera DOCUMENTO en XML restringe los valores aceptados para
documentos XML slo mientras que el contenido permite a ambos documentos XML y
contenido para su entrega.
USE NEGOCIOS2011
GO
</CREDITO>'),
(2,
'<CREDITO FECHA="12-08-2011">
<CLIENTE>
<NOMBRE>MANUEL</NOMBRE>
<APELLIDO>LUNA</APELLIDO>
<MONTO>3400</MONTO>
</CLIENTE>
<CLIENTE>
<NOMBRE>JORGE</NOMBRE>
<APELLIDO>LAURA</APELLIDO>
<MONTO>1290</MONTO>
</CLIENTE>
<CLIENTE>
<NOMBRE>INES</NOMBRE>
<APELLIDO>RIOS</APELLIDO>
<MONTO>4500</MONTO>
</CLIENTE>
</CREDITO>')
Para listar los registros de la tabla, ejecutamos la sintaxis siguiente, donde el proceso
listar los registros y la estructura XML insertado. Para abrir un archivo, hacer un click
al link, tal como se muestra.
USE NEGOCIOS2011
GO
[
<CommonDirectives>
[ , ELEMENTS [ XSINIL | ABSENT ] ]
]
}
<CommonDirectives> ::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ('RootName') ] ]
Argumentos Descripcin
RAW[('ElementName')] Obtiene el resultado de la consulta y transforma cada
fila del conjunto de resultados en un elemento XML
con un identificador genrico <row /> como etiqueta
del elemento. Opcionalmente, puede especificar un
nombre para el elemento de fila cuando se utiliza esta
directiva. El XML resultante utilizar el ElementName
especificado como el elemento de fila generado para
cada fila.
AUTO Devuelve los resultados de la consulta en un rbol
anidado XML sencillo. Cada tabla en la clusula FROM
de la que al menos se presenta una columna en la
clusula SELECT se representa como un elemento
XML. A las columnas presentadas en la clusula
SELECT se les asignan los atributos de elemento
apropiados.
EXPLICIT Especifica que la forma del rbol XML resultante est
definida explcitamente. Con este modo, es necesario
escribir las consultas de una cierta manera, de modo
que se pueda especificar explcitamente informacin
adicional acerca de la anidacin deseada.
PATH Facilita la mezcla de elementos y atributos, as como la
especificacin de anidacin adicional para representar
propiedades complejas. Puede utilizar consultas FOR
XML de modo EXPLICIT para construir XML a partir de
un conjunto de filas, pero el modo PATH supone una
alternativa ms simple a las consultas de modo
EXPLICIT potencialmente complicadas. De forma
predeterminada, el modo PATH genera un contenedor
La clusula FOR XML de nivel superior slo puede usarse en la instruccin SELECT.
En el caso de las subconsultas, FOR XML puede usarse en las instrucciones INSERT,
UPDATE y DELETE. Tambin puede usarse en instrucciones de asignacin.
El siguiente ejemplo nos permite recuperar un fragmento XML que contienen los datos
utilizando la clusula FOR XML en modo RAW
USE NEGOCIOS2011
GO
SELECT IDPEDIDO,
FECHAPEDIDO,
C.NOMCLIENTE AS CLIENTE,
C.DIRCLIENTE AS DIRECCION
USE NEGOCIOS2011
GO
SELECT IDPEDIDO,
FECHAPEDIDO,
C.NOMCLIENTE AS CLIENTE,
C.DIRCLIENTE AS DIRECCION
FROM VENTAS.CLIENTES C JOIN VENTAS.PEDIDOSCABE P
ON C.IDCLIENTE = P.IDCLIENTE
ORDER BY IDPEDIDO
FOR XML RAW, ELEMENTS
GO
El modo AUTO devuelve los resultados de la consulta como elementos XML anidados.
Esto no ofrece un gran control sobre la forma del XML generado a partir del resultado
de una consulta. Las consultas en modo AUTO son tiles si desea generar jerarquas
sencillas. Sin embargo, Usar el modo EXPLICIT y Usar el modo PATH ofrecen mayor
control y flexibilidad a la hora de decidir la forma del XML procedente del resultado de
una consulta.
La jerarqua XML, anidamiento de los elementos, del XML resultante est basada en el
orden de las tablas identificadas por las columnas especificadas en la clusula
SELECT. Por tanto, el orden en que se especifican los nombres de columna en la
clusula SELECT es importante. La primera, la tabla situada ms a la izquierda que se
identifica, constituye el elemento superior del documento XML resultante. La segunda
tabla situada ms a la izquierda, identificada por las columnas de la instruccin
SELECT, constituye un subelemento del elemento superior, etc.
En el siguiente ejemplo, muestra cmo utilizar la consulta de modo AUTO que retorne
un fragmento XML que contiene la lista de pedidos por cliente
El modo EXPLICIT concede un mayor control de la forma del XML. Es posible mezclar
atributos y elementos con total libertad para decidir la forma del XML. Requiere un
formato especfico para el conjunto de filas resultante generado debido a la ejecucin
de la consulta. Despus, el formato del conjunto de filas se asigna a una forma de
XML.
En primer lugar, la consulta debe crear las dos columnas de metadatos siguientes:
La primera columna debe proporcionar el nmero de etiqueta, el tipo de entero,
del elemento actual, y el nombre de la columna debe ser Tag. La consulta debe
proporcionar un nmero de etiqueta nico para cada elemento que se vaya a
construir a partir del conjunto de filas.
La segunda columna debe proporcionar un nmero de etiqueta del elemento
primario, y el nombre de la columna debe ser Parent. De este modo, las
columnas Tag y Parent ofrecen informacin sobre la jerarqua.
Los valores de estas columnas de metadatos, junto con la informacin de los nombres
de columna, se usan para generar el XML deseado. Tenga en cuenta que la consulta
debe proporcionar los nombres de columna de una manera determinada. Observe
tambin que un valor 0 NULL en la columna Parent indica que el elemento
correspondiente no tiene uno primario. El elemento se agrega al XML como elemento
de nivel superior.
En el siguiente ejemplo, vamos a listar los datos de los clientes, donde el campo id y
nombre sern atributos, y el campo direccin y telfono sern elementos.
SELECT 1 AS TAG,
NULL AS PARENT,
IDCLIENTE AS [CLIENTE!1!CODIGO],
NOMCLIENTE AS [CLIENTE!1!NOMBRE],
DIRCLIENTE AS [CLIENTE!1!DIRECCION!ELEMENT],
TELEFONO AS [CLIENTE!1!TELEFONO!ELEMENT]
FROM VENTAS.CLIENTES
FOR XML EXPLICIT
GO
En el modo PATH, los nombres o alias de columna se tratan como expresiones XPath.
Estas expresiones indican el modo en el que se asignan los valores a XML. Cada
expresin XPath es una expresin relativa que proporciona el tipo de elemento, como
el atributo, el elemento y el valor escalar, as como el nombre y la jerarqua del nodo
que se generar en relacin con el elemento de fila.
Resumen
Los datos XML pueden interactuar con datos relacionales y aplicaciones SQL.
Esto significa que XML puede ser introducido en el sistema segn las necesidades
de modelado de datos se presentan sin interrumpir las aplicaciones existentes. El
servidor de base de datos tambin proporciona una funcionalidad administrativa
para la gestin de datos XML (por ejemplo, BACKUP, recuperacin y replicacin).
SQL Server 2008 introduce un tipo de datos nativo llamado XML. Un usuario
puede crear una tabla que tiene una o ms columnas de tipo XML, adems de
columnas relacionales. Las variables y los parmetros de XML tambin son
permitidos.
Puede crear una tabla con una columna XML mediante la instruccin CREATE
TABLE de costumbre. La columna XML puede ser indexado de una manera
especial. Puede trabaja con formato o sin formato
Para almacenar datos XML, puede proporcionar un valor para una columna XML a
travs de un parmetro o una variable de varias maneras:
Como tipo binario o de SQL que se convierte implcitamente en el tipo de
datos XML.
A travs del contenido de un archivo.
Como la salida del mecanismo de publicacin XML FOR XML con la directiva
TYPE, que genera una instancia de datos de tipo XML.
El valor proporcionado se comprueba la buena formacin. Una columna XML por
defecto permite a ambos documentos y fragmentos XML para ser almacenados. Si
los datos no pasan la comprobacin de buena formacin, se rechaza con un
mensaje de error apropiado.
Una consulta SELECT devuelve los resultados como un conjunto de filas.
Opcionalmente, se pueden recuperar resultados formales de una consulta SQL
como XML especificando la clusula FOR XML en la consulta. La clusula FOR
XML puede usarse en consultas de nivel superior y en subconsultas.
El modo RAW transforma cada fila del conjunto de resultados de la consulta en un
elemento XML que tiene el identificador genrico <row> o el nombre del elemento,
que se proporciona de manera opcional. El modo AUTO devuelve los resultados de
la consulta como elementos XML anidados. El modo EXPLICIT concede un mayor
control de la forma del XML. Es posible mezclar atributos y elementos con total
libertad para decidir la forma del XML.
OPENXML, palabra clave de Transact-SQL, proporciona un conjunto de filas en
documentos XML en memoria que es similar a una tabla o una vista. OPENXML
permite el acceso a los datos XML a pesar de ser un conjunto de filas relacional.
http://technet.microsoft.com/es-es/library/ms187897(SQL.90).aspx
Aqu hallar los conceptos de OPENXML
http://msdn.microsoft.com/es-es/library/ms178107.aspx
En esta pgina, hallar los conceptos de consulta FOR XML
http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx
Aqu hallar los conceptos de manejo de datos en formato XML
UNIDAD DE
APRENDIZAJE
TEMARIO
1.1. Introduccin
1.1.1. Entidades de seguridad
1.1.2. Autenticacin
1.1.3. Inicio de sesin y usuarios
1.1.3.1. Creacin de login
1.1.3.2. Creacin de usuarios en SQL Server
1.1.3.3. Manejo de roles a nivel servidor
1.1.3.4. Manejo de roles a nivel base de datos
1.1.4. Permisos en el motor de base de datos
1.1.4.1. Comando GRANT
1.1.4.2. Comando DENY
1.1.4.3. Comando REVOKE
ACTIVIDADES PROPUESTAS
Los alumnos crea usuarios para manejar los objetos de la base de datos.
Los alumnos asigna permisos a los usuarios de una base de datos para realizar
operaciones de manipulacin de datos y definicin de datos.
5.1 INTRODUCCION
Las entidades de seguridad son entidades que pueden solicitar recursos de SQL
Server. Igual que otros componentes del modelo de autorizacin de SQL Server, las
entidades de seguridad se pueden organizar en jerarquas.
El inicio de sesin sa de SQL Server es una entidad de seguridad del servidor. Se crea
de forma predeterminada cuando se instala una instancia. En SQL Server 2005 y SQL
Server 2008, la base de datos predeterminada de sa es master. Es un cambio de
comportamiento con respecto a versiones anteriores de SQL Server.
Todos los usuarios de una base de datos pertenecen a la funcin public de la base de
datos. Cuando a un usuario no se le han concedido ni denegado permisos de un
elemento que puede protegerse, el usuario hereda los permisos de ese elemento
concedidos a public.
USE NEGOCIOS2011
GO
SELECT *
FROM SYS.SYSLOGINS
GO
5.1.2 Autenticacin
SQL Server usa despus esa identificacin del sistema operativo para determinar los
permisos del usuario que hay que aplicar. Con la autenticacin en modo mixto, los dos
Windows y SQL Server son responsables de identificar al usuario.
En la ventana del explorador de objetos, hacer click derecho sobre el administrador del
SQL Server, seleccione la opcin Propiedades, tal como se muestra en la figura.
Segn lo visto anteriormente, una cuenta de usuario de Windows puede ser necesaria
para conectarse a una base de datos. Tambin, podra ser necesaria la autenticacin
de SQL Server. Tanto si se va a usar autenticacin de Windows o autenticacin de
modo mixto, la cuenta que se usa para la conexin a SQL SERVER se le conoce
como inicio de sesin de SQL Server.
<option_list2> ::=
SID = sid
| DEFAULT_DATABASE =database
| DEFAULT_LANGUAGE =language
| CHECK_EXPIRATION = { ON | OFF}
| CHECK_POLICY = { ON | OFF}
| CREDENTIAL =credential_name <sources> ::=
WINDOWS [ WITH <windows_options>[ ,... ] ]
| CERTIFICATE certname
| ASYMMETRIC KEY asym_key_name<windows_options> ::=
DEFAULT_DATABASE =database
| DEFAULT_LANGUAGE =language
Argumentos Descripcin
loginName Especifica el nombre del inicio de sesin que se va a
crear. Hay cuatro tipos de inicio de sesin: de SQL
Server, de Windows, asignado a un certificado y
asignado a una clave asimtrica. Cuando crea inicios de
sesin que se asignan desde una cuenta de dominio de
Windows, debe usar el nombre de inicio de sesin de
usuario anterior a Windows 2000 con el formato
[<Dominio>\<InicioDeSesin>].
PASSWORD ='password' Slo se aplica a inicios de sesin de SQL Server.
Especifica la contrasea del inicio de sesin que se est
creando. Debe usar siempre una contrasea segura.
DEFAULT_DATABASE Especifica la base de datos predeterminada que debe
=database asignarse al inicio de sesin. Si no se incluye esta
opcin, la base de datos predeterminada es master.
DEFAULT_LANGUAGE Especifica el idioma predeterminado que debe asignarse
=language al inicio de sesin. Si no se incluye esta opcin, el
idioma predeterminado es el del servidor. Si el idioma
predeterminado del servidor se cambia ms tarde, el del
inicio de sesin se mantiene igual.
CHECK_EXPIRATION = { Slo se aplica a inicios de sesin de SQL Server.
ON | OFF } Especifica si debe aplicarse la directiva de expiracin de
contraseas en este inicio de sesin. El valor
predeterminado es OFF.
CHECK_POLICY = { ON | Slo se aplica a inicios de sesin de SQL Server.
OFF } Especifica que se deben aplicar las directivas de
contraseas de Windows en el equipo que ejecuta SQL
Server para este inicio de sesin. El valor
predeterminado es ON.
En la opcin Asignacin de
usuarios, asigne al inicio de
sesin la base de datos as
como el esquema donde
trabajar el inicio de sesin, tal
como se muestra en la figura.
Argumentos Descripcin
user_name Especifica el nombre por el que se identifica al usuario en
esta base de datos. user_name es de tipo sysname. Puede
tener una longitud mxima de 128 caracteres.
LOGIN login_name Especifica el inicio de sesin de SQL Server del usuario de
base de datos que se va a crear. login_name debe ser un
inicio de sesin vlido en el servidor. Cuando este inicio de
sesin de SQL Server se introduzca en la base de datos
adquirir el nombre y el identificador del usuario de la base
de datos que se va a crear.
WITHOUT LOGIN Especifica que el usuario no se debe asignar a un inicio de
sesin existente
USE NEGOCIOS2011;
GO
USE NEGOCIOS2011;
GO
SELECT *
FROM SYS.SYSUSERS
GO
Para administrar con facilidad los permisos en el servidor, SQL Server proporciona
varios roles, que son las entidades de seguridad que agrupan a otras entidades de
seguridad. Los roles son como los grupos del sistema operativo Microsoft Windows.
Los roles de nivel de servidor tambin se denominan roles fijos de servidor porque no
se pueden crear nuevos roles de nivel de servidor. Puede agregar inicios de sesin de
SQL Server, cuentas de Windows y grupos de Windows a los roles de nivel de
servidor. Cada miembro de un rol fijo de servidor puede agregar otros inicios de sesin
a ese mismo rol.
sysadmin Los miembros del rol fijo de servidor sysadmin pueden realizar
cualquier actividad en el servidor.
serveradmin Los miembros del rol fijo de servidor serveradmin pueden cambiar
las opciones de configuracin en el servidor y apagarlo.
securityadmin Los miembros del rol fijo de servidor securityadmin administran los
inicios de sesin y sus propiedades. Pueden administrar los
permisos de servidor GRANT, DENY y REVOKE. Tambin, pueden
administrar los permisos de nivel de base de datos GRANT, DENY
y REVOKE si tienen acceso a una base de datos. Asimismo,
pueden restablecer las contraseas para los inicios de sesin de
SQL Server.
Nota de seguridad.- La capacidad de conceder acceso a Motor de
base de datos y configurar los permisos de usuario permite que el
administrador de seguridad asigne la mayora de los permisos de
processadmin Los miembros del rol fijo de servidor processadmin pueden finalizar
los procesos que se ejecuten en una instancia de SQL Server.
setupadmin Los miembros del rol fijo de servidor setupadmin pueden agregar y
quitar servidores vinculados.
bulkadmin Los miembros del rol fijo de servidor bulkadmin pueden ejecutar la
instruccin BULK INSERT.
dbcreator Los miembros del rol fijo de servidor dbcreator pueden crear,
modificar, quitar y restaurar cualquier base de datos.
Los roles de nivel de base de datos se aplican a toda la base de datos en lo que
respecta a su mbito de permisos.
Existen dos tipos de roles de nivel de base de datos en SQL Server: los roles fijos de
base de datos, que estn predefinidos en la base de datos, y los roles flexibles de
base de datos, que pueden crearse.
Los roles fijos de base de datos se definen en el nivel de base de datos y existen en
cada una de ellas. Los miembros de los roles de base de datos db_owner y
Puede agregar cualquier cuenta de la base de datos y otros roles de SQL Server a los
roles de nivel de base de datos. Cada miembro de un rol fijo de base de datos puede
agregar otros inicios de sesin a ese mismo rol.
En la tabla siguiente, se muestran los roles fijos de nivel de base de datos y sus
capacidades. Estos roles existen en todas las bases de datos.
db_owner Los miembros del rol fijo de base de datos db_owner pueden
realizar todas las actividades de configuracin y mantenimiento
en la base de datos y tambin pueden quitar la base de datos.
Todos los elementos protegibles de SQL Server tienen permisos asociados que se
pueden conceder a una entidad de seguridad.
Los permisos se pueden manipular con las conocidas consultas GRANT, DENY y
REVOKE de TRANSACT-SQL.
El siguiente ejemplo muestra cmo otorgar permiso de alterar cualquier base de datos
al usuario ciber
GRANT SELECT,UPDATE
ON Ventas.Clientes
TO ciber
El siguiente ejemplo muestra como revocar permiso de crear una tabla al usuario ciber
Resumen
Las entidades de seguridad son entidades que pueden solicitar recursos de SQL
Server. Igual que otros componentes del modelo de autorizacin de SQL Server,
las entidades de seguridad se pueden organizar en jerarquas.
El inicio de sesin sa de SQL Server es una entidad de seguridad del servidor. Se
crea de forma predeterminada cuando se instala una instancia. En SQL Server
2005 y SQL Server 2008, la base de datos predeterminada de sa es master. Es un
cambio de comportamiento con respecto a versiones anteriores de SQL Server.
Por definicin, un cliente y un servidor de base de datos son entidades de
seguridad y se pueden proteger. Estas entidades se pueden autenticar
mutuamente antes de establecer una conexin de red segura. SQL Server admite
el protocolo de autenticacin Kerberos, que define cmo interactan los clientes
con un servicio de autenticacin de red.
Para acceder a SQL SERVER, se dispone de dos modos de autenticacin:
Autenticacin de Windows y Autenticacin en modo mixto. En la autenticacin de
Windows, el sistema operativo es el responsable de identificar al usuario. SQL
Server usa despus esa identificacin del sistema operativo para determinar los
permisos del usuario que hay que aplicar. Con la autenticacin en modo mixto, los
dos Windows y SQL Server son responsables de identificar al usuario.
Una cuenta de usuario de Windows puede ser necesaria para conectarse a una
base de datos. Tambin, podra ser necesaria la autenticacin de SQL Server.
Tanto si se va a usar autenticacin de Windows o autenticacin de modo mixto, la
cuenta que se usa para la conexin a SQL SERVER se le conoce como inicio de
sesin de SQL Server.
Una consulta SELECT devuelve los resultados como un conjunto de filas.
Opcionalmente, se pueden recuperar resultados formales de una consulta SQL
como XML especificando la clusula FOR XML en la consulta. La clusula FOR
XML puede usarse en consultas de nivel superior y en subconsultas.
Para administrar con facilidad los permisos en el servidor, SQL Server proporciona
varios roles, que son las entidades de seguridad que agrupan a otras entidades de
seguridad. Los roles son como los grupos del sistema operativo Microsoft Windows
Los roles de nivel de base de datos se aplican a toda la base de datos en lo que
respecta a su mbito de permisos. Existen dos tipos de roles de nivel de base de
datos en SQL Server: los roles fijos de base de datos, que estn predefinidos en la
base de datos, y los roles flexibles de base de datos, que pueden crearse.
Todos los elementos protegibles de SQL Server tienen permisos asociados que se
pueden conceder a una entidad de seguridad. Los permisos se pueden manipular
con las conocidas consultas GRANT, DENY y REVOKE de TRANSACT-SQL
Si desea saber ms acerca de estos temas, puede consultar las siguientes
pginas:
http://msdn.microsoft.com/es-es/library/ms173463.aspx
Aqu hallar los conceptos de crear usuarios
http://mredison.wordpress.com/2009/03/15/como-creo-un-usuario-en-sql-server/
En esta pgina, hallar los conceptos de cmo crear un usuario
http://msdn.microsoft.com/es-es/library/bb510418.aspx
Aqu hallar los conceptos de manejo identidades y control de acceso
UNIDAD DE
APRENDIZAJE
TEMARIO
1.1. Introduccin a las estrategias de seguridad y restauracin en SQL Server
1.1.1. Impacto del modelo de recuperacin de copia de seguridad.
1.1.2. Diseo de la estrategia de copia de seguridad
1.2. Copia de Seguridad en SQL Server
1.2.1. Copia de seguridad completa
1.2.2. Copia de seguridad diferencial
1.2.3. Copia de seguridad de registro de transacciones
1.2.4. BACK UP (Transact-SQL)
1.2.5. Realizar copia de seguridad utilizando el Management Studio de SQL Server
1.3. Restaurando una copia de seguridad
1.3.1. RESTORE (Transact-SQL)
1.3.2. Restaurando una base de datos utilizando Management Studio
ACTIVIDADES PROPUESTAS
Los alumnos crea copia de respaldo o seguridad a una base de datos y su registro
de transacciones en forma completa o diferencial.
Los alumnos restauran una base de datos desde una copia de respaldo o de
seguridad de una base de datos o de registro de transacciones.
El propsito de crear copias de seguridad de SQL Server es para que usted pueda
recuperar una base de datos daada. Sin embargo, copias de seguridad y
restauracin de los datos debe ser personalizado para un ambiente particular y debe
trabajar con los recursos disponibles. Por lo tanto, un uso fiable de copia de seguridad
y restauracin para la recuperacin exige una copia de seguridad y restauracin de la
estrategia.
restauracin son compatibles con la base de datos. Normalmente, una base de datos
utiliza ya sea el modelo de recuperacin simple o el modelo de recuperacin completa.
Para una gran base de datos en la que los cambios se concentran en una parte de los
archivos o grupos de archivos, copias de seguridad parciales o copias de seguridad de
archivos y puede ser til.
Cunto espacio en disco una copia de seguridad completa requiere?
El alcance de una copia de seguridad de los datos puede ser una base de datos
completa, una base de datos parciales, o un conjunto de archivos o grupos de
archivos. Para cada uno de estos, SQL Server admite copias de seguridad completas
y diferenciales:
Contiene todos los datos en una base de datos especfica o un conjunto de grupos de
archivos o archivos, y tambin suficiente registro para permitir la recuperacin de los
datos.
Se basa en la ltima copia de seguridad completa de los datos. Esto se conoce como
copia diferencial. Una copia diferencial es una copia de seguridad completa de lectura
/ escritura de datos. Una copia de seguridad diferencial incluye slo los datos que ha
cambiado desde la base diferencial. Por lo general, los respaldos diferenciales que se
toman poco despus de la copia de seguridad de base son ms pequeos y ms
rpidos de crear que la base de una copia de seguridad completa. Por lo tanto, utilizar
los respaldos diferenciales puede acelerar el proceso de hacer copias de seguridad
frecuentes para disminuir el riesgo de prdida de datos. Por lo general, una base
diferencial es utilizada por varias copias de seguridad diferenciales sucesivas. En el
tiempo de restauracin, la copia de seguridad que se restaura el primero, seguido por
la copia de seguridad diferencial ms reciente.
Antes de crear la copia de seguridad de registro en primer lugar, debe crear una copia
de seguridad completa, como una copia de seguridad de bases de datos. A partir de
entonces, la copia de seguridad del registro de transacciones con regularidad es
necesaria, no slo para minimizar la prdida de trabajo sino tambin para permitir el
truncamiento del registro de transacciones.
.
6.1.3.4 BACKUP (TRANSACT-SQL)
Argumentos
Argumento Descripcin
DATABASE Especifica una copia de seguridad
completa de la base de datos. Si se
especifica una lista de archivos y grupos
de archivos, slo se realiza la copia de
seguridad de esos archivos o grupos de
archivos. Durante una copia de seguridad
completa o diferencial de una base de
datos, SQL Server realiza la copia de
seguridad de una parte suficiente del
registro de transacciones para producir
una base de datos coherente cuando se
restaure la base de datos.
LOG Especifica que slo se realizar la copia
de seguridad del registro de
transacciones. Se realiza la copia de
seguridad.
{ device_logico | @var_device_logico }
Es el nombre lgico del dispositivo de
copia de seguridad en que se hace la
copia de seguridad de la base de datos.
El nombre lgico debe seguir las reglas
definidas para los identificadores.
{ DISK | TAPE } = { 'device_fisico' |
@var_device_fisico }
Especifica un archivo de disco o un
dispositivo de cinta.
[<MIRROR TO clause>] [ next- Especifica un conjunto de hasta tres
mirror-to ] dispositivos de copia de seguridad, cada
uno de los cuales reflejar los
dispositivos de copia de seguridad
especificados en la clusula TO. La
clusula MIRROR TO debe incluir el
mismo nmero y tipo de dispositivos de
copia de seguridad que la clusula TO.
Opciones de WITH
Opcin Descripcin
DIFFERENTIAL Se utiliza slo con BACKUP DATABASE.
Especifica que la copia de seguridad de la base
de datos o el archivo slo debe estar compuesta
por las partes de la base de datos o el archivo
que hayan cambiado desde la ltima copia de
seguridad completa. Una copia de seguridad
diferencial suele ocupar menos espacio que una
copia de seguridad completa.
{ NOINIT | INIT } NOINIT
Indica que el conjunto de copia de seguridad se
anexa al conjunto de medios especificado,
conservando as los conjuntos de copia de
seguridad existentes, es el valor predeterminado.
INIT
Especifica que se deben sobrescribir todos los
conjuntos de copia de seguridad, pero conserva el
encabezado de los medios. Si se especifica INIT,
se sobrescriben todos los conjuntos de copia de
seguridad existentes en el dispositivo, si las
condiciones lo permiten.
{ NOSKIP | SKIP } NOSKIP
Indica a la instruccin BACKUP que compruebe la
fecha de expiracin de todos los conjuntos de
copia de seguridad de los medios antes de
permitir que se sobrescriban. ste es el
comportamiento predeterminado.
SKIP
Deshabilita la comprobacin de la expiracin y el
nombre del conjunto de copia de seguridad que
suele realizar la instruccin BACKUP para impedir
que se sobrescriban los conjuntos de copia de
seguridad. Para obtener ms informacin acerca
de las interacciones entre {INIT | NOINIT} y
{NOSKIP | SKIP},
{ NOFORMAT | FORMAT } NOFORMAT
Especifica que la operacin de copia de seguridad
conservar los conjuntos de copias de seguridad
y el encabezado del medio existentes en los
volmenes del medio usados en esta operacin
de copia de seguridad. ste es el comportamiento
predeterminado.
FORMAT
Especifica que se debe crear un conjunto de
medios nuevo. FORMAT hace que la operacin
de copia de seguridad escriba un nuevo
encabezado en todos los volmenes del medio
usados en la operacin de copia de seguridad.
{NO_CHECKSUM|CHECKSUM} NO_CHECKSUM
Deshabilita de forma explcita la generacin de
Use Negocios2011
Go
Use Negocios2011
Go
Use Negocios2011
Go
Use Negocios2011
Go
USE Negocios2011;
GO
ALTER DATABASE Negocios2011
SET RECOVERY FULL;
GO
Use Negocios2011
Go
La sintaxis para restaurar una base de datos desde una copia de seguridad completa
Argumentos
Argumento Descripcin
DATABASE Especifica la base de datos de destino. Si se
especifica una lista de archivos y grupos de
archivos, slo se restauran esos archivos y
grupos de archivos.
LOG Especifica que slo se va a aplicar una copia
de seguridad de registro de transacciones a
esta base de datos. Los registros de
transacciones deben aplicarse en orden
secuencial. Para aplicar varios registros de
transacciones, utilice la opcin
NORECOVERY en todas las operaciones de
restauracin.
{ nombre_base_datos | Es la base de datos para la que se realiza la
@var_nombre_base_datos } restauracin del registro o de la base de
datos completa. Si se proporciona como una
variable (@var_nombre_base_datos), este
nombre se puede especificar como una
constante de cadena
(@var_nombre_base_datos =database
name) o como una variable de un tipo de
datos de cadena de caracteres
<file_or_filegroup> [ ,...n ] Especifica un grupo de archivos o un archivo
de que se van a incluir en una instruccin
RESTORE DATABASE o RESTORE LOG.
Puede especificar una lista de archivos o
grupos de archivos.
Opciones de WITH
Opcin Descripcin
PARTIAL Especifica una operacin de restauracin parcial
que solo restaura el grupo de archivos principal y
cualquiera de los grupos de archivos secundarios
especificados. La opcin PARTIAL selecciona
implcitamente el grupo de archivos principal; por
tanto, no es necesario especificar FILEGROUP =
'PRIMARY'. Para restaurar un grupo de archivos
secundarios, debe especificarlo de forma explcita
mediante la opcin FILE o FILEGROUP.
La opcin PARTIAL no se permite en las
instrucciones RESTORE LOG.
[ RECOVERY | NORECOVERY RECOVERY
| STANDBY ] Indica a la operacin de restauracin que revierta
las transacciones no confirmadas. Despus del
proceso de recuperacin, la base de datos est
preparada para ser utilizada, la opcin
predeterminada es RECOVERY.
NORECOVERY
Indica a la operacin de restauracin que no
revierta las transacciones no confirmadas. Si se
utiliza la opcin NORECOVERY durante una
operacin de restauracin sin conexin, la base
de datos no puede utilizarse.
STANDBY =standby_file_name
USE NEGOCIOS2011;
GO
UPDATE COMPRAS.PRODUCTOS
SET PRECIOUNIDAD *= 1.10 WHERE NOMPRODUCTO LIKE 'BK-%';
GO
USE MASTER
GO
Haga clic en el botn Examinar, que abrir el cuadro de dilogo Especificar copia de
seguridad. En el cuadro de lista Copia de seguridad de los medios de
comunicacin, seleccione uno de los tipos de dispositivo. Para seleccionar uno o
varios dispositivos del cuadro de lista Ubicacin de copia de seguridad, haga clic en
Agregar.
Despus de agregar los dispositivos que desee al cuadro de lista Ubicacin de copia
de seguridad, haga clic en Aceptar para regresar a la pgina General.
Resumen
El propsito de crear copias de seguridad de SQL Server es para que usted pueda
recuperar una base de datos daada. Sin embargo, copias de seguridad y
restauracin de los datos deben ser personalizados para un ambiente particular y
debe trabajar con los recursos disponibles. Por lo tanto, un uso fiable de copia de
seguridad y restauracin para la recuperacin exige una copia de seguridad y
restauracin de la estrategia.
La mejor opcin de modelo de recuperacin de la base de datos depende de los
requerimientos de su negocio. Para evitar la gestin del registro de transacciones
y simplificar el BACKUP y restauracin, utilice el modelo de recuperacin simple.
Para minimizar la prdida de trabajo, a costa de los gastos generales de
administracin, utilice el modelo de recuperacin completa
El alcance de una copia de seguridad de los datos puede ser una base de datos
completa, una base de datos parciales, o un conjunto de archivos o grupos de
archivos. Para cada uno de estos, SQL Server admite copias de seguridad
completas y diferenciales
Bajo el modelo de recuperacin optimizado para cargas masivas de registros de
modelo de recuperacin, copias de seguridad del registro de transacciones (o
copias de seguridad de registro) son obligatorias. Cada copia de seguridad de
registro cubre la parte del registro de transacciones que estaba activa cuando la
copia de seguridad fue creada, e incluye todos los registros que no fueron
respaldados en una copia de seguridad de registros anterior
BACK UP TRANSACT-SQL realiza copias de seguridad de una base de datos
completa, o uno o ms archivos o grupos de archivos (BASE DE DATOS DE
SEGURIDAD). Adems, bajo el modelo de recuperacin optimizado para cargas
masivas de registros de modelo de recuperacin, copias de seguridad del registro
de transacciones (BACKUP LOG).
Un escenario de restauracin es un proceso que restaura los datos de una o ms
copias de seguridad y se recupera la base de datos cuando la ltima copia de
seguridad se restaura