SQL
SQL
ndice
Introduccin Caractersticas SQL Componentes SGBD Aplicaciones Instrucciones SQL Tipos de Sentencias SQL
ndice
Instruccin SELECT
Diferentes tipos de consultas SELECT con predicado: WHERE Tipos de datos Funciones:
Tipos Escalares Colectivas
ndice
Creacin de bases de datos Tablas
Relaciones entre tablas Constrains
ndices Sinnimos
ndice
Transact SQL
Procedimientos almacenados Triggers Funciones definidas por el usuario Cursores Transacciones
ndice
Transact SQL
Administracin
Herramientas de administracin Creacin de grupos Registro de servidores Seguridad Definir usuarios Funciones definidas por el usuario Permisos de las tablas Copias de seguridad Mantenimiento de bases de datos
Introduccin SQL
Lenguaje para acceso a la informacin almacenada en Bases de Datos relacionales Bases de datos Relacionales
Informacin en tablas (entidad): filas o registros (tuplas) y columnas o campos (atributos) La mayora de las Bases de datos actuales son relacionales Bsicamente se puede introducir datos, almacenar datos, recuperar datos y trabajar con ellos
SQL: Structure Query Language (Lenguaje estructurado de consultas) Es un lenguaje utilizado en muchos productos tanto para ordenadores tipo PC como para grandes sistemas, y corre en muchos sistemas operativos diferentes Fue creado por IBM (SEQUEL). Existen unas especificaciones ANSI sobre el SQL, aunque no todos los productos las cumplen Esta es una de las razones por lo que es muy usado
Caractersticas
Se puede manejar conjunto de registros Estructura simple Gran potencia: Con una instruccin se puede obtener una consulta compleja Flexibilidad: Permite especificar muchas condiciones Acceso directo a datos (sin programacin, en modo interactivo) Se puede usar SQL desde dentro de programas, o directamente interactivo dentro de un Query (preguntador), consultas abiertas
Por esta razn tanto lo pueden usar los programadores como los usuarios (que quieran acceder a los datos mediante consultas)
Caractersticas
SQL Interactivo
El usuario escribe sentencias en la lnea de comandos o en una pantalla visual y son respondidas por el SGBD.
SQL Embebido
Permite ejecutar sentencias en el interior de programas escritos en otros lenguajes. Se pone un delimitador antes de la sentencia SQL Precompilador SQL.
SQL modular
Permite compilar sentencias SQL separadas del lenguaje de programacin y enlazadas (links) despus con el resto de mdulos objeto para crear el programa ejecutable. Los procedimientos almacenados son de este tipo.
Otra clasificacin:
SQL esttico: Las sentencias incluidas en el programa no pueden cambiar durante la ejecucin. Es sencillo y eficiente. SQL dinmico: Las sentencias pueden ser modificadas en tiempo de ejecucin. Es potente
U S U A R I O S
S.G.B.D
CATLOGO
B.D.
HARDWARE
SQL
Lenguaje que permite operar con tablas, (manejo de registros por consulta o actualizacin) Las operaciones con tablas se expresan en sentencias SQL Las sentencias SQL (interactivas o de programa), son enviadas al SGBD que las analiza y procesa.
El SGBD se responsabiliza de coordinar las peticiones de distintos usuarios sobre los mismos datos (integridad)
SYSCOLUMNS
Columnas de cada tabla que est en SYSTABLES (campo, tabla, tipo, tamao, ..)
SYSINDEXS
ndices del sistema (ndice, tabla, usuario, ...)
SYSVIEW
Vistas de la base de datos (vista, tabla, usuario, ...)
Con esto se puede ver la estructura de la base de datos. Las tablas que posee, los campos de cada tablas, etc.
Instrucciones SQL
El usuario solo ve tablas (filas y columnas)
Como estn organizada fsicamente da igual, eso es misin del SGBD El ADB debe conocer algunas de esas caractersticas.
Los datos de una columna son homogneos No hay criterio de orden entre las filas Cada columna tiene un nombre (para distinguirla de las otras)
Instrucciones SQL
Componentes de una sentencia SQL
SELECT campo1, campo2 FROM Tabla1 WHERE Cdigo=10 1 2 2 1 2 1 2 4 3
Palabras definidas
Tienen un significado en SQL
Constantes
Valor determinado.
Signos
<, >, =, <=, >=, <>, ( ), ...
Variables
Si se usa el SQL dentro de un programa.
Instrucciones SQL
Pasos al analizar la sentencia
1. Seleccin Tabla1 de entre todas las tablas 2. Extraer los registros que tienen el valor 10 en el campo cdigo 3. De los registros anteriores extrae campo1 y campo2 4. Devuelve el resultado
SELECT
Extraer o seleccionar datos de una o varias tablas (Consultas o Querys), dando como resultado una tabla de ninguna, una o varias filas (registros)
INSERT
Aadir uno o varios registros a una tabla
UPDATE
Modificar uno o varios valores de uno o varios registros de una o varias tablas
DELETE
Borrar uno o varios registros de una tabla
CREATE
Crear nuevas tablas, ndices o vistas
DROP
Destruir tablas, ndices o vistas
ALTER
Alterar tablas
GRANT
Dar autorizaciones de acceso.
REVOKE
Denegar autorizaciones de acceso
SELECT
Utilizada para realizar consultas Permite recuperar informacin de una o varias tablas Muy potente
SELECT
[ALL] Col1 [, Col2] [[AS] Alias] DISTINCT * DISTINCT ROW Expresion1 TOP PERCENT FROM Tabla [[AS] Alias] [WHERE condicin] [GROUP BY Col1 [, Col2] ] [HAVING condicin] ORDER BY Col1 [DESC][ , Col2 [DESC] ] Num1 [DESC][ , Num2 [DESC] ] [COMPUTE Expresion2 [BY Col1] ]
Consultas sencillas
SELECT
SELECT
SELECT
Seleccionar datos de una tabla Se eligen los campos a ser seleccionados Puede ser una columna, varias o todas Tambin se admiten expresiones
FROM
Indica la tabla o tablas desde donde se van a seleccionar los datos (donde estn los datos que se van a extraer en el SELECT) Si se trabaja con varias tablas se puede especificar en FROM una expresin para indicar que datos ha de buscar Aqu es donde se establece la relacin entre dos o ms tablas
SELECT
WHERE
Condicin o condiciones que deben cumplir los datos que se van a seleccionar Es un filtro de bsqueda que establece las condiciones que deben cumplir los registros, con lo que se limita el nmero de registros
ORDER BY
Orden de clasificacin en que se van a obtener los datos Se puede especificar el nombre del campo, campos, o expresin, o el nmero que hace el campo en el SELECT La ordenacin puede ser creciente (por defecto) o decreciente (DESC)
SELECT
GROUP BY
Agrupa los registros que tengan valores iguales en los campos especificados
HAVING
De entre todos los grupos, descarta los que no cumplan la condicin dada
COMPUTE
Usa funciones para producir filas adicionales que resuman los contenidos de grupos
SELECT
ALL
Por defecto aparecen todos los registros, incluidos los que tienen valores iguales. Para que esto no ocurra, y restringir el nmero de registros a devolver (adems del WHERE) DISTINCT
Para que en el resultado no aparezcan filas repetidas (si las hay las elimina), dejando slo valores distintos
DISTINCTROW Exclusivo de ACCESS. Es similar a DISTINCT pero busca duplicados en todos los campos de la tabla (no slo en los campos seleccionados). TOP(n)
Exclusivo de ACCESS. Muestra los n primeros valores que cumplen la condicin del WHERE
PERCENT
Selecciona un % de registros
El predicado o la condicin puede ser: Verdadera, Falsa o Desconocida Los predicados pueden ser tambin Simples o Compuestos
Simples
Slo se pone una condicin de comparacin
Compuestos
Varias condiciones enlazadas por un operador lgico (AND o OR)
[WHERE condicin]
Una Subselect, es una Select subordinada, que slo puede devolver un valor, a menos que tenga un cuantificador (ALL, SOME, ANY), que puede devolver varios
[WHERE expresin [NOT] IN (SELECT Col1 [, Col2] ... FROM Tabla .......)]
[WHERE [NOT] EXIST (SELECT Col1 [, Col2] ... FROM Tabla ... )]
NULL
Sirve para preguntar si el valor contenido en una columna de un registro determinado es o no Nulo, y segn lo sea o no tomar el valor V o F (no puede ser D) Un campo puede tener: dato, blanco o null (desconocido)
PREDICADOS CUANTIFICADOS
Si se utiliza una sentencia Select subordinada en un predicado de comparacin, su valor debe ser nico como ya se ha dicho Se admite que el predicado tenga varios valores, si la sentencia subordinada es precedida de algn cuantificador: ALL, SOME o ANY (predicado cuantificado). El resultado de la Select subordinada deber ser una tabla con una columna (un campo) que puede contener 0 o ms filas ALL: Predicado cuantificado que es V si la comparacin es Verdadera para todos y cada uno de los valores resultantes de la sentencia subordinada SOME: Predicado cuantificado que es V si la comparacin es V para uno cualquiera de los valores del resultado de la sentencia subordinada ANY: Igual que SOME
LIKE
Sirve para buscar combinaciones de caracteres que cumplan ciertas condiciones En la constante alfanumrica se pueden utilizar mscaras
EXIST
El predicado es V si la Select subordinada es una tabla con 1 o ms filas (no es una tabla vaca) La SELECT puede tener varias columnas
PREDICADOS COMPUESTOS
Son combinaciones de predicados simples enlazados con los operadores AND y/o OR
TIPOS DE DATOS
Numricos
Enteros
BINARY: 0 1 SMALLINT: -32768, +32767 INTEGER: -2147483647, +2147483647 AUTOINCREMENT MONEY
Decimales
DECIMAL (p,s): p=precisin (n total de dgitos)
s=n de dgitos de la parte decima
Coma flotante
REAL FLOAT(n): 5.4E-79, 7.2E+75 n = precisin de bits de la mantisa (1,21) Rojo no ANSI
TIPOS DE DATOS
Alfanumrico
TEXT, LONGTEXT, LONGCHAR, MEMO
Longitud fija:
CHAR,VARCHAR, NCHAR, NVARCHAR, TEXT(n), CHARACTER, STRING CHAR(n): n es la longitud (entre 1 y 254)
TIPOS DE DATOS
Fecha
Fecha: DATE dd.mm.aaaa 01.01.0001, 31.12.9999 Hora: TIME hh:mm:ss
00:00:00, 24:00:00
Instante: TIMESTAMP dd.mm.aaaa.hh.mm.ss.mmmmmm DATETIME
Grficos
IMAGE
TIPOS DE DATOS
TIPOS DE DATOS
http://office.microsoft.com/eses/access/HA012315043082.aspx http://office.microsoft.com/eses/access/CH010499573082.aspx
TIPOS DE DATOS
Valor nulo
Se puede poner nulos: NULL (desconocido) No se pueden poner nulos: NOT NULL
Constantes
Numricas: 3, +10, +3.04, 003.04, +3.14E-2, ... Alfanumricas: ABC, abc, aB458c,
TIPOS DE DATOS
Valor nulo
Se puede poner nulos: NULL (desconocido) No se pueden poner nulos: NOT NULL
Constantes
Numricas: 3, +10, +3.04, 003.04, +3.14E-2, ... Alfanumricas: ABC, abc, aB458c, ...
Expresiones
En una consulta se pueden realizar operaciones con los datos (valores de una columna sumados con los de otra o multiplicados por un nmero, etc.). Esto se realiza con expresiones Tambin se utilizan en las condiciones de seleccin de registros
Expresin: Combinacin de valores, operandos y parntesis, que dan un valor Operandos: Campos, constantes, variables o registros especiales Operadores: Signos con los que se opera: Numricos (+ - * /) y alfanumrico (||) Registros especiales
Palabras que representan un valor P.e. el registro especial USER, que indica el usuario que est conectado al sistema (cada vez que un usuario se conecta, el SGBD controla el acceso, por motivos de seguridad y confidencilidad). El contenido de este registro especial es alfunumrico de longitud fija y tamao 8, y guarda en cada momento el identificador personal del usuario que ejecuta la instruccin
FUNCIONES
Las funciones del lenguaje SQL permiten realizar ciertas operaciones Funcin
Representa un valor nico que se obtiene al aplicar determinadas operaciones a otros valores dados (argumentos)
Colectivas
El resultado se obtiene a partir de una coleccin de valores Se obtiene un valor como resultado de aplicar una determinada operacin a los valores de una columna (separndolos en grupos)
FUNCIONES ESCALARES
Funciones para convertir valores
INTEGER: Convierte un valor a un nmero entero FLOAT: Convierte un valor a un float DECIMAL: Convierte un valor a un decimal DIGITS: Convierte un valor numrico a alfanumrico HEX: Convierte un valor a hexadecimal
FUNCIONES ESCALARES
Funciones de tratamiento de cadenas
LENGHT: Obtiene la longitud de un valor
LENGHT (expresin) La tamao del dato ser:
Longitud Tamao 2 4 p 8
FUNCIONES ESCALARES
Funciones de tratamiento de cadenas
|| : Este smbolo se utiliza para concatenar cadenas de caracteres. En algunos sistemas tambin se usa la funcin: CONCAT (cadena1, cadena2) RTRIM: Extrae caracteres de una cadena por la derecha. No funciona en todos los sistemas. LTRIM: Extrae caracteres de una cadena por la izquierda. No funciona en todos los sistemas UPPER: Convierte las letras de una cadena de caracteres a maysculas. No funciona en todos los sistemas LOWER: Convierte las letras de una cadena de caracteres a minsculas. No funciona en todos los sistemas
FUNCIONES ESCALARES
Funciones de tratamiento de fechas
Convertir de alfanumrico a fecha/hora
DATE: Convierte una cadena de caracteres a: yyyy/mm/dd
DATE (expresin) Convierte una cadena en una fecha o un nmero de das en una fecha (a partir del 1/1/0001).
FUNCIONES ESCALARES
Funciones de tratamiento de fechas
Convertir de alfanumrico a fecha/hora
TIMESTAMP: Convierte una cadena de caracteres a: yyyy/mm/dd/hh/mm/ss/mmmmmm
TIMESTAMP (expresin) Los formatos que pueden tener los datos son: Tipo USA Formato Fecha aaaa-mm-dd mm/dd/aaaa dd.mm.aaaa aaaa-mm-dd Formato Hora hh.mm.ss ISO hh.mm AM hh.mm PM hh.mm.ss hh:mm:ss EUR JIS
FUNCIONES ESCALARES
Funciones de tratamiento de fechas
Obtener un elemento de un dato fecha/hora
YEAR: Obtener el componente ao de una fecha
YEAR (expresin)
FUNCIONES ESCALARES
Funciones de tratamiento de fechas
Realizar conversin de formatos
CHAR: Convertir un valor de fecha a un valor alfanumrico
CHAR (expresin, tipo_formato) Tipo formato: ISO, USA, EUR, JIS
FUNCIONES ESCALARES
Funciones de tratamiento de fechas
Duraciones. Intervalos de tiempo
Duracin de calendario: Se obtiene al restar dos fechas de 8 cifras (aaaa.mm.dd). Se obtiene un nmero que representa: 2 primeros dgitos nmero de aos, 2 segundos dgitos nmero de meses y 2 ltimos dgitos nmero de das
DATE(18.4.2000) DATE(31.12.1999) = 318 El 318 indica 0 aos, 3 meses y 18 das
Duracin de reloj: Se obtiene al restar dos horas. Las dos primeras cifras del nmero que se obtiene representa las horas, las dos segundas los minutos y las dos ltimas los segundos
TIME(18.50.55) TIME(15.30.45) = 32010 El 32010 indica 3 horas, 20 minutos y 10 segundos
Duracin explcita: Es un nmero seguido de una palabra que indica una unidad de tiempo (YEARS, MONTHS, DAYS, HOURS, MINUTES o SECONDS). Estas palabras tambin son funciones
FECHA_NACIMIENTO + 3 MONTHS + 20 DAYS
FUNCIONES ESCALARES
Funciones de tratamiento de fechas
Operaciones con fechas
Se pueden realizar las siguientes operaciones: Fecha1 Fecha2 Fecha1 + duracin Fecha1 duracin
Registros especiales
Adems del registro especial USER ya comentado, existen otros como: CURRENT_DATE: Indica la fecha del sistema. CURRENT_TIME: Indica la hora del sistema.
FUNCIONES COLECTIVAS
AVG: Calcula la media de los valores de un campo (columna)
AVG (expresin) AVG([DISTINCT / ALL] expresin) El resultado es numrico.
FUNCIONES COLECTIVAS
COUNT: Halla cuantos valores hay en una coleccin
COUNT (expresin) COUNT (*) Nmero de filas que hay en el grupo al que se aplica COUNT ([DISTINCT / ALL] expresin) El resultado es numrico
FORMATO GENERAL
Nombre_funcin ([DISTINC] campo) El DISTINCT elimina antes los valores repetidos. En una SELECT no se puede poner DISTINCT ms de una vez Nombre_funcin ([DISTINC] expresin)
AGRUPAMIENTO DE FILAS
Se pueden formar grupos de registros o filas de acuerdo a un determinado criterio, para aplicarles luego las funciones colectivas Los registros se pueden dividir en grupos y calcular subtotales, medias, etc. GROUP BY
Se incluye en la sentencia SELECT. Sirve para agrupar filas, y se escribe detrs del WHERE (si existe ste) GROUP BY col1 [, col2] ...
Se especifican las columnas o campos por los que se van a agrupar los registros Se van a agrupar las filas de la tabla, tal que todas las que tengan el mismo valor en las columnas de agrupamiento forman un grupo Pueden haber grupos de 1 registro (1 fila) Una vez se forman los grupos para cada uno se evalan las expresiones de la clusula SELECT (cada grupo produce 1 fila en la tabla final resultante) Las otras columnas que no se usan en los agrupamientos slo se pueden usar como argumento de las funciones colectivas de la SELECT dando lugar a una fila en el resultado
AGRUPAMIENTO DE FILAS
HAVING
Se incluye en la sentencia SELECT. Sirve para descartar grupos de filas que cumplan una condicin. HAVING condicin
Despus de haber separado las filas en uno o varios grupos, se descartan aquellos que no sastifagan la condicin Si no se agrupan las filas con GROUP BY, se forma un grupo con todos los registros GROUP BY debe preceder a HAVING El agrupamiento se puede hacer por GROUP BY o funciones colectivas en la SELECT o las dos Si se usa GROUP BY se agrupan las filas con igual valor en las columnas de agrupamiento, sino todos los registros forman un grupo Una vez formados los grupos: Se evaluan las expresiones de la SELECT dando lugar a una fila en el resultado
AGRUPAMIENTO DE FILAS
[GROUP
BY Col1 [, Col2] ]
[HAVING condicin]
Propietario.Tabla.Columna
Esta operacin tambin se denomina JOIN
El WHERE que aparece despus del FROM se aplica a una tabla formada por las filas que resulten de pegar una al lado de otra una fila de la 1 tabla, y todas las de la 2, la 2 fila de la 1 tabla y todas las de la 2 y as sucesivamente, formando todas las combinaciones posibles (producto cartesiano) Si no se pone WHERE aparecen todas las combinaciones
Usualmente que la clave ajena de la 1 tabla sea igual a la clave primaria de la 2 tabla, con tablas relacionadas
En la condicin se pueden incluir columnas de distintas tablas (anteponiendo el nombre de la tabla) En la tabla final resultante se tiene:
N columnas: col . Tabla1 + col. Tabla2 + ... N filas: filas Tabla1 * filas Tabla2 * ...
OJO. La SELECT no tiene ni idea de cmo estn relacionadas las tablas Si le decimos que seleccione datos de dos tablas, combinar las dos tablas haciendo un producto cartesiano entre las dos Por cada fila de la primera tabla se incluyen todas las filas de la segunda tabla
Queremos que en el resultado slo aparezcan las filas sombreadas cmo podemos hacer esto?
Para hacer un emparejamiento de tablas no es necesario que haya una relacin de 1 a N entre ellas. Sin embargo, el emparejamiento de tablas suele hacerse cuando queremos juntar dos o ms tablas relacionadas
Al hacer un emparejamiento de tablas, puede ocurrir que no queramos todas las columnas (SELECT *) sino solo unas cuantas de cada tabla. qu ocurre si en las dos tablas hay columnas que tienen el mismo nombre? Solucin: Utilizamos prefijos. Antes del nombre de la columna ponemos el nombre de la tabla y un punto Para que este trabajo no sea demasiado engorroso se pueden utilizar los alias (etiquetas) de tablas para abreviar el nombre de las mimas
Si en el SELECT se hace referencia a algn campo de tablas que se llamen igual, hay que ponerle el nombre de la tabla precediendo al del campo.
Nombres Locales
Los nombres locales son alias que se asignan a las tablas de una sentencia SELECT (su mbito de utilizacin es la sentencia SELECT). Detrs del nombre de la tabla, se pone su nombre local, refirindonos a la tabla por su nombre local
Interno Externo Cruzado Self-join (una tabla puede unirse consigo misma en casos especiales)
Cada registro en la tabla A es combinado con cada registro de la tabla B; pero slo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen Es el ms utilizado
Tipos
De equivalencia
usa comparaciones de igualdad en el predicado JOIN No usa < o > SELECT * FROM Empleado INNER JOIN Departamento ON
Empleado.IDDepartamento=Departamento.IDDepartamento
Naturales
Cruzadas
Producto cartesiano de todos los registros de las 2 tablas
SELECT * FROM Empleado CROSS JOIN Departamento SELECT * FROM Empleado, Departamento
El resultado ser:
El resultado ser:
INSERT
Aadir Registros
No hace falta insertar todos los campos, ni en el mismo orden en que estn en la tabla Si se omite Col1, Col2, ..., entonces hay que poner todos los campos y en el mismo orden. Si no se pone nada en un campo: NULL
Si se usa una instruccin SELECT dentro de otra, se le llama Subselect o Select subordinada Todas las filas que resulten de ejecutar la SELECT se insertan en la tabla No se puede hacer referencia en el SELECT a la tabla en la que se est insertando El nmero de columnas del SELECT deber ser igual al nmero de nombres en la lista de columnas
INSERT
INSERT INTO Tabla [(Col1, Col2, ...)] VALUES (Valor1, Valor2, ...)
Insertado de registros
DELETE
Borrar Registros
Si no se pone la clusula WHERE se borran todos los registros de la tabla (no la tabla)
DELETE
Borrado de registros
UPDATE
Modificar Registros
Modificar o actualizar varias filas de una tabla ( no tiene que ser la fila completa)
UPDATE Tabla [Nombre_Local] SET Col1=expresin1 [,Col2=expresin2] ... [WHERE condicin]
En expresin se puede poner NULL Si se omite WHERE se actualizan todas las filas de la tabla
UPDATE
Modificacin de registros
EL proceso es muy sencillo, como ejemplo creamos una base de datos llamada pruebas con un tamao de 10 MB y limitada a 50 MB y un incremento de 5 MB. El registro de transacciones lo creamos con un tamao de 5MB y limitado a 25 y un incremento de la base de datos de 5 MB.
FILEGROWTH = Incremento del archivo (crecimiento en MB) Para ejecutar esta cdigo utilizaremos el Analizador de consultas (Query Analyzer)
ON (ARCHIVO BD)
PRIMARY
Especifica que los archivos de disco utilizados para almacenar las secciones de datos de la base de datos (archivos de datos) se definen explcitamente. ON es obligatorio cuando va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de datos del grupo de archivos principal Detrs de la lista de archivos del grupo de archivos principal se puede colocar una lista opcional de elementos <filegroup> separados por comas que definan los grupos de archivos de usuario y sus archivos Especifica que la lista de elementos <filespec> asociada define el archivo principal El primer 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 principal.
Si no se especifica PRIMARY, el primer archivo enumerado en la instruccin CREATE DATABASE se convierte en el archivo principal
SQL Server asigna una base de datos a un conjunto de archivos del sistema operativo Los datos y la informacin del registro nunca se mezclan en el mismo archivo, y cada archivo slo es utilizado por una base de datos Los grupos de archivos se denominan colecciones con nombre de archivos que se utilizan como ayuda en tareas de colocacin de datos y administrativas, como las operaciones de copias de seguridad y restauracin Archivos de base de datos
Las bases de datos de SQL Server utilizan tres tipos de archivos: Archivos de datos principales El archivo de datos principal es el punto de partida de la base de datos y apunta a los otros archivos de la base de datos Cada base de datos tiene un archivo de datos principal La extensin recomendada para los nombres de archivos de datos principales es .mdf. Archivos de datos secundarios Los archivos de datos secundarios son todos los archivos de datos menos el archivo de datos principal Puede que algunas bases de datos no tengan archivos de datos secundarios, mientras que otras pueden tener varios archivos de datos secundarios La extensin de nombre de archivo recomendada para los archivos de datos secundarios es .ndf. Archivos de registro Los archivos de registro almacenan toda la informacin de registro que se utiliza para recuperar la base de datos Como mnimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios La extensin de nombre de archivo recomendada para los archivos de registro es .ldf.
SQL Server no exige las extensiones de nombre de archivo .mdf, .ndf y .ldf, pero estas extensiones ayudan a identificar las distintas clases de archivos y su uso En SQL Server, las ubicaciones de todos los archivos de una base de datos se guardan tanto en el archivo principal de la base de datos como en la base de datos maestra
Especifica que los archivos de disco utilizados para almacenar el registro de la base de datos (archivos de registro) se definen explcitamente LOG ON va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de registro Si no se especifica LOG ON, se crea automticamente un archivo de registro cuyo tamao es el 25 por ciento de la suma de los tamaos de todos los archivos de datos de la base de datos, o 512 KB, lo que sea mayor. LOG ON no se puede especificar en una instantnea de base de datos
USE master; GO IF DB_ID (N'mytest') IS NOT NULL DROP DATABASE mytest; GO CREATE DATABASE mytest; GO -- Verify the database files and sizes SELECT name, size, size*1.0/128 AS [Size in MBs] FROM sys.master_files WHERE name = N'mytest'; GO
Crear una base de datos que especifica los archivos de datos y de registro de transacciones
USE master; GO IF DB_ID (N'Sales') IS NOT NULL DROP DATABASE Sales; GO -- Get the SQL Server data path DECLARE @data_path nvarchar(256); SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1); -- execute the CREATE DATABASE statement EXECUTE ('CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = '''+ @data_path + 'saledat.mdf'', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log, FILENAME = '''+ @data_path + 'salelog.ldf'', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )' ); GO
Crear una base de datos mediante la especificacin de mltiples archivos de datos y de registro de transacciones
USE master; GO IF DB_ID (N'Archive') IS NOT NULL DROP DATABASE Archive; GO -- Get the SQL Server data path DECLARE @data_path nvarchar(256); SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1); -- execute the CREATE DATABASE statement EXECUTE ('CREATE DATABASE Archive ON PRIMARY (NAME = Arch1, FILENAME = '''+ @data_path + 'archdat1.mdf'', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Arch2, FILENAME = '''+ @data_path + 'archdat2.ndf'', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Arch3, FILENAME = '''+ @data_path + 'archdat3.ndf'', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) LOG ON (NAME = Archlog1, FILENAME = '''+ @data_path + 'archlog1.ldf'', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), (NAME = Archlog2, FILENAME = '''+ @data_path + 'archlog2.ldf'', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20)' ); GO
Se pueden modificar las opciones de configuracin de las bases de datos excepto el nombre, la ruta de los ficheros y el Nombre de intercalacin. Para acceder a la opcin de propiedades pulsamos con el botn derecho del ratn en la base de datos que vamos a modificar y seleccionamos propiedades.
Copia de Seguridad
Una de las cosas ms importantes respecto a nuestra base de datos son las copias de seguridad, que debemos hacerlas regularmente por lo que pudiera pasar, teniendo una copia de seguridad de la base de datos, si por cualquier motivo tenemos un desastre o hay que restaurar la base de datos, siempre podremos hacerlo recuperando la copia. Las copias debemos hacerlas en funcin de la utilizacin de la base de datos, si por ejemplo una base de datos no se actualiza nada ms que una vez a la semana, la copia de seguridad la podemos hacer despus de actualizar la base de datos, si por el contrario se actualiza de forma constante es bueno realizar las copias diarias o dos veces al da. Las copias y restauracin de las bases de datos al igual que casi todo lo que queramos hacer desde SQL Server tenemos varias formas de hacerlo, desde el administrador corporativo que es la forma ms usual de trabajar con SQL Server, en entorno grfico o mediante programacin a travs de Transact-SQL o desde VB,ASP, etc., con SQL-DMO.
Copia de Seguridad
Para crear copias de seguridad desde el administrador corporativo, seleccionamos la base de datos de la que queremos crear una copia de seguridad y con el botn derecho del ratn seleccionamos Todas las tareas -> Copia de seguridad
de la base de datos.
Podemos decir que clase de copia queremos hacer: Base de datos completa. Diferencial, esta forma solo copiara los cambios realizados desde la ltima copia. Copiar el registro de transacciones.
Copia de Seguridad
Seleccionamos agregar y saldr una pantalla donde especificaremos la ruta y el nombre del fichero que queremos utilizar como copia, el fichero puede ser de nueva creacin o uno existente, o podemos especificar un dispositivo ya existente o crear uno nuevo. Un dispositivo de copia de seguridad no es ms que un archivo igual que el que hubieramos seleccionado en la opcin superior, pero estos a diferencia de los anteriores, podemos adminstralo y ver su contenido desde la opcin del nodo Administracin -> Copias de seguridad. Una vez seleccionado donde alojaremos la copia, debemos elegir si sobrescribimos las copias que tenga el fichero o la nueva copia se anexa a las ya existentes en el fichero (en caso de ser un fichero con copias existentes). Una vez hecho sto seleccionamos la ficha opciones y habilitamos la opcin Comprobar la copia de seguridad al concluir, para que una vez finalizada la copia de seguridad compruebe si se ha realizado correctamente.
USE Master. Utilizamos la base de datos Master para ejecutar la primera sentencia porque el procedimiento almacenado que ejecutamos para crear un dispositivo esta alojado en la base de datos Master. EXEC sp_ addumpdevice. Utilizamos ste procedimiento almacenado de la base de datos Master para crear un dispositivo de copia de seguridad. Parmetros que recibe:
disk, especifica que el archivo de seguridad ser un archivo de disco. pruebas_1, nombre lgico que le damos al dispositivo de copia y es el que se ver desde el administrador de copias. ruta, ruta fsica donde se alojar el fichero en disco, ruta y nombre del fichero.
BACKUP , a continuacin hacemos un Backup (copia de seguridad) de la base de datos PRUEBAS al dispositivo Pruebas_1.
Copia de Seguridad
Lo explicado hasta el momento sobre las copias de seguridad esta muy bien y es muy til, pero, muy pesado si cada da tenemos que entrar en el administrador corporativo para hacer una copia de seguridad, y muy peligroso si nos olvidamos, por eso hay lo que se llama programacin de copias de seguridad, con esta utilidad programamos la tarea de copias de seguridad para que se realicen solas en una determinada fecha.
Copia de Seguridad
Para programar el da y hora que se realizarn las copias realizamos las misma operaciones que para crear una copia de seguridad pero tenemos que habilitar la opcin programar, en la imagen de la pantalla anterior podemos ver esa opcin al final de la pantalla, pulsando el botn podremos seleccionar da y hora para que la copia de seguridad se ejecute sola. Esta tarea queda guardad en la opcin del Agente de SQL Server trabajos.
Si se pueden hacer copias de seguridad lo lgico es que estas copias se puedan restaurar. Para restaurar una copia de seguridad tenemos que seleccionar la base de datos deseada y con el botn derecho pulsamos en la opcin Todas las tareas -> Restaurar base de datos.
En la siguiente ficha de esta pantalla opciones, seleccionamos las opciones de restauracin de la copia:
Forzar restauracin sobre la base de datos existente, forzamos a que se restaure la copia sobrescribiendo el fichero existente. Restaurar archivos de base de datos como, especifica el nombre del archivo fsico y lgico de la restauracin.
CREATE TABLE
Las tablas las suele crear el ADB (Administrador de la Base de Datos), aunque un usuario tambin puede crearlas, si tiene permiso (tablas particulares) Normalmente las tablas SQL se usan en sistemas multiusuario, por varios usuarios a la vez, por lo que normalmente sern definidas por el ABD
Las pondr a disposicin de quien las necesite El usuario tiene que tener autorizacin para ello
Para crear nuevos objetos se utiliza el lenguaje DDL: Lenguaje de Definicin de Datos Entre los objetos que se pueden crear estn: Tablas,Vistas, ndices, Sinnimos, Condiciones de integridad referencial, Bases de datos, usuarios, trigger, funcin, procedimiento almacenado, etc. Cuando se crea un objeto, se almacena en el catlogo la definicin del objeto y sus caractersticas, para poder ser usado, y una vez no es necesario, se borra el objeto del catlogo
CREATE TABLE
IDENTIFICADOR
Es el nombre que se utiliza para designar un campo, tabla, vista, ndice, etc. (un objeto del SGBD) Mximo de 10 caracteres (depende del sistema) Debe empezar por una letra mayscula Si se escribe entre comillas se puede usar tanto letras maysculas como minsculas (se especifica tal y como se pone)
CREATE TABLE
NOMBRE DE TABLA
Como ya se indic consta de tres partes si el sistema es distribuido, y slo de dos si el sistema no es distribuido. Propietario.Tabla.Campo Identificador que define al usuario propietario de la tabla Cuando un usuario se conecta al SGBD para trabajar con l tiene un identificador, de uso personal, asignado por el Administrador del Sistema El propietario de una tabla puede acceder y modificar datos y puede autorizar a otros usuarios a consultar y modificar datos de las tablas de su propiedad (mediante GRANT). El creador y propietario de una tabla es quien la define (CREATE) Es el identificador que se pone como nombre a la tabla Pueden haber dos o ms tablas con el mismo nombre si son de propietarios distintos Cuando se escribe una sentencia SQL de manipulacin de datos, se puede o no poner el identificador propietario para referirse a una tabla. Si no se pone, el sistema ejecuta la sentencia como si el propietario de la tabla es el usuario que la manda a ejecutar (utilizando el identificador personal del usuario) Columna de la tabla No debe existir ambigedad al referirse a un campo ( si un campo est repetido en ms de una tabla, hay que poner el nombre de la tabla, y si existen varias tablas con el mismo nombre, el nombre del propietario)
Propietario
Tabla:
Campo
CREATE TABLE
Sirve para definir tablas en un SGBD Antes de referirse a una tabla, sta debe estar definida en el catlogo
CREATE TABLE Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2 Tipo2 [NOT NULL] [CHECK restricciones de columna]]
Tabla
Nombre asignado a la tabla que se va a crear Si no se pone lo contrario, el propietario es el usuario que est ejecutando la orden Nombres asignados a los campos. Tipo de datos del campo
Tipo1,Tipo2, ...:
CREATE TABLE
Tipos de datos
INTEGER, INT: Entero largo. SMALLINT: Entero corto. FLOAT, REAL: Punto flotante. DECIMAL(p,s): Decimal con precisin p, escala s. CHARACTER(n), CHAR(n): Alfanumrico de longitud fija. VARCHAR(n): Alfanumrico de longitud variable. DATE: Fecha. TIME: Hora. TIMESTAMP: Instante.
CREATE TABLE
CREATE TABLE Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2 Tipo2 [NOT NULL] [CHECK restricciones de columna]]
NOT NULL
No se admite el valor nulo como dato en ese campo (hay que poner algo)
CREATE TABLE
CREATE TABLE Prueba (Cdigo NUMBER (3) CHECK (Cdigo BETWEEN 1 AND 5)) CREATE TABLE Empleado (idemp CHAR(4) PRIMARY KEY, nombre CHAR(40) NOT NULL, salario NUMBER(10) NOT NULL, iddep CHAR(2) NOT NULL, FOREIGN KEY (iddep) REFERENCES departamento) La instruccin CREATE TABLE crea la tabla y no su contenido (est vaca). Para incluir registros en ella se usa la instruccin INSERT Un usuario no puede definir tablas sino ha sido autorizado para ello
CONSTRAINTS
Permiten definir la manera en que Database Engine (Motor de base de datos) exigir automticamente la integridad de una BD Las restricciones definen reglas relativas a los valores permitidos en las columnas y constituyen el mecanismo estndar para exigir la integridad
CONSTRAINTS
[ CONSTRAINT constraint_name ]
{ PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR = fillfactor | WITH ( < index_option > [ , ...n ] ) ] [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] | [ FOREIGN KEY ] REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ] [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ NOT FOR REPLICATION ] | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) }
CONSTRAINTS
Tipos de constraints
NULL/NOT NULL
La columna no acepta valores nulos
CHECK
Limitacin de los valores que se pueden asignar a una columna
UNIQUE
Exigen la unicidad de los valores de un conjunto de columnas En una restriccin UNIQUE, dos filas de la tabla no pueden tener el mismo valor en las columnas Las claves principales tambin exigen exclusividad, pero no aceptan NULL como uno de los valores exclusivos
CONSTRAINTS
Tipos de constraints
PRIMARY KEY
Identifican la columna o el conjunto de columnas cuyos valores identifican de forma exclusiva cada una de las filas de una tabla Dos filas de la tabla no pueden tener el mismo valor de clave principal No se pueden asignar valores NULL a ninguna de las columnas de una clave principal Se recomienda utilizar una columna pequea de tipo entero como clave principal Todas las tablas tienen que tener una clave principal
CONSTRAINTS
Tipos de constraints
FOREIGN KEY
identifican y exigen las relaciones entre las tablas Una clave externa de una tabla apunta a una clave candidata de otra tabla No se puede insertar una fila que tenga un valor de clave externa, excepto NULL, si no hay una clave candidata con dicho valor ON DELETE controla las acciones que se llevarn a cabo si intenta eliminar una fila a la que apuntan las claves externas existentes
NO ACTION especifica que la eliminacin produce un error CASCADE especifica que tambin se eliminan todas las filas con claves externas que apuntan a la fila eliminada SET NULL especifica que todas las filas con claves externas que apuntan a la fila eliminada se establecen en NULL SET DEFAULT especifica que todas las filas con claves externas que apuntan a la fila eliminada se establecen en sus valores predeterminados
ON UPDATE define las acciones que se llevarn a cabo si intenta actualizar un valor de clave candidata a la que apuntan las claves externas existentes
Opciones NO ACTION, CASCADE, SET NULL y SET DEFAULT
CONSTRAINTS
Tipos de constraints
CLUSTERED/NOT CLUSTERED
Indica que se ha creado un ndice agrupado o no agrupado para la restriccin PRIMARY KEY o UNIQUE De forma predeterminada, el valor de las restricciones PRIMARY KEY es CLUSTERED, y el de las restricciones UNIQUE es NONCLUSTERED En una instruccin CREATE TABLE, se puede especificar CLUSTERED tan slo para una restriccin. Si especifica CLUSTERED para una restriccin UNIQUE y especifica tambin una restriccin PRIMARY KEY, el valor predeterminado de PRIMARY KEY es NONCLUSTERED.
DEFAULT
Especifica el valor suministrado para la columna cuando no se ha especificado explcitamente un valor durante la insercin Las definiciones DEFAULT se pueden aplicar a cualquier columna excepto a las definidas como timestamp o a aquellas que tengan la propiedad IDENTITY
CONSTRAINTS
Tipos de constraints
IDENTITY
Indica que la nueva columna es una columna de identidad Cuando se agrega una nueva fila a la tabla, el Database Engine (Motor de base de datos) proporciona un valor incremental nico para la columna Las columnas de identidad se utilizan normalmente con las restricciones PRIMARY KEY como identificadores de fila nicos de la tabla La propiedad IDENTITY se puede asignar a las columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0) Slo se puede crear una columna de identidad para cada tabla Las restricciones DEFAULT y los valores predeterminados enlazados no se pueden utilizar en las columnas de identidad En este caso, deben especificarse el valor de inicializacin y el incremento, o ninguno de esto valores. Si no se especifica ninguno, el valor predeterminado es (1,1). seed Es el valor que se utiliza para la primera fila cargada en la tabla. increment Es el valor incremental que se agrega al valor de identidad de la fila cargada anterior.
CONSTRAINTS: Ejemplos
CREATE TABLE cust_sample ( cust_id int PRIMARY KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 )); CREATE TABLE part_sample (part_nmbr int PRIMARY KEY, part_name char(30), part_weight decimal(6,2), part_color char(15) );
CONSTRAINTS: Ejemplos
CREATE TABLE order_part (order_nmbr int, part_nmbr int FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION, qty_ordered int);
ALTER TABLE
Se utiliza para modificar la estructura de la tabla Los motivos por los que se modifica la estructura de una tabla pueden ser:
Borrar alguna columna Cambiar el tipo de alguna columna Cambiar la longitud de algn atributo Modificar el orden de las columnas Aadir nuevas columnas
ALTER TABLE Tabla [ADD (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [ADD (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] ... [MODIFY (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [MODIFY (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] ... [DROP (Col1)] ALTER TABLE asignatura ADD (FOREIGN KEY (idprofesor) REFERENCES profesor)
ALTER TABLE
ALTER en SQL SERVER 2008
DROP TABLE
Instruccin que se utiliza para borrar una tabla Borra su contenido y su estructura Si hay claves ajenas no se puede borrar (primero hay que borrar la otra tabla) Borra del catlogo la descripcin de la tabla Se pierden los datos que contiene la tabla Si hay alguna vista basada en la tabla tambin se pierde Se pierden los objetos basados en esta tabla (vistas, ndices, sinnimos, etc.). Borrado en cascada. DROP TABLE Tabla
CREATE VIEW
Se utiliza para definir una vista CREATE VIEW Vista [(Col1 [, Col2] ...] AS Subselect [WITH CHECK OPTION] [READ ONLY] Subselect: Sentencia SELECT sobre la que se va a realizar la vista (la que se va a grabar en el catlogo Vista: Nombre que se le va asignar a la vista La SUBSELECT puede tener: SELECT, FROM, WHERE, GROUP BY, HAVING La SUBSELECT no puede tener: UNION, INTERSECT, MINUS, ORDER BY El nombre de la vista se especifica de forma similar a una tabla Si no se pone el nombre del usuario el sistema lo pone automticamente Propietario.Vista Col1, Col2, ...: Indica que las columnas que se van a evaluar en la Subselect se les va a dar ese nombre (es decir, que tiene distinto nombre en la vista que en la tabla desde donde se crean) Es opcional, si no se ponen se mantienen los mismos nombres Es obligatorio poner nombres en las columnas si los campos de la Subselect son calculados Si se especifica nombre en la columna debe tener el mismo nmero de columnas que la Subselect Tambin se puede cambiar en las vistas el orden de las columnas (especificndolos en la SELECT con el nuevo orden). WITH CHECK OPTION: El dato a insertar cumple las restricciones puestas sobre las vista Indica que las operaciones de modificacin (INSERT, UPDATE) realizadas sobre la vista, deben comprobar la condicin de creacin de la vista (el WHERE de la SELECT de la vista)
READ ONLY: Si se pone esta opcin no se puede escribir sobre la vista (slo consultar)
CREATE VIEW
USE AdventureWorks ; GO IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL DROP VIEW hiredate_view ; GO CREATE VIEW hiredate_view AS SELECT c.FirstName, c.LastName, e.EmployeeID, e.HireDate FROM HumanResources.Employee e JOIN Person.Contact c on e.ContactID = c.ContactID ; GO
CREATE VIEW
WITH ENCRYPTION (SQL SERVER) Se muestran columnas calculadas, columnas con el nombre cambiado y varias columnas USE AdventureWorks ; GO IF OBJECT_ID ('Purchasing.PurchaseOrderReject', 'V') IS NOT NULL DROP VIEW Purchasing.PurchaseOrderReject ; GO CREATE VIEW Purchasing.PurchaseOrderReject WITH ENCRYPTION AS SELECT PurchaseOrderID, ReceivedQty, RejectedQty, RejectedQty / ReceivedQty AS RejectRatio, DueDate FROM Purchasing.PurchaseOrderDetail WHERE RejectedQty / ReceivedQty > 0 AND DueDate > CONVERT(DATETIME,'20010630',101) ; GO
CREATE VIEW
WITH CHECK OPTION (SQL SERVER) Vista que hace referencia a cinco tablas y permite modificar datos aplicados nicamente a los empleados que viven en Seattle.
USE AdventureWorks ; GO IF OBJECT_ID ('dbo.SeattleOnly', 'V') IS NOT NULL DROP VIEW dbo.SeattleOnly ; GO CREATE VIEW dbo.SeattleOnly AS SELECT c.LastName, c.FirstName, a.City, s.StateProvinceCode FROM Person.Contact AS c JOIN HumanResources.Employee AS e ON c.ContactID = e.ContactID JOIN HumanResources.EmployeeAddress AS ea ON e.EmployeeID = ea.EmployeeID JOIN Person.Address AS a ON ea.AddressID = a.AddressID JOIN Person.StateProvince AS s ON a.StateProvinceID = s.StateProvinceID WHERE a.City = 'Seattle' WITH CHECK OPTION ; GO
Una vista puede consultarse como una tabla ms y para el usuario es como una tabla SELECT Col1 [, Col2] ... FROM Vista Si se hace una actualizacin sobre una vista (INSERT, UPDATE, DELETE), stas deben ser repercutidas en las tablas de base por el SGBD No siempre es posible:
Si hay campos calculados Si contiene una Yuncin (JOIN: SELECT sobre varias tablas) Tienen filas no repetidas (DISTINCT en la SELECT) Tienen funciones colectivas Tienen agrupamiento (GROUP BY, HAVING) Tienen sentencias subordinadas que hacen referencia a la misma tabla Se basa en otra vista que no es actualizable. Tienen campos que provienen de clculos, funciones, etc.
SELECT * FROM VISTA1 DELETE FROM Vista1 WHERE condicin ... INSERT INTO Vista 1 Col1, Col2, ... VALUES Val1, Val2, ... UPDATE Vista1 SET Col1=expresin1 [,Col2=expresin2] ... [WHERE condicin]
DROP VIEW
DROP VIEW
Se utiliza para destruir una vista, y borrarla del catlogo DROP VIEW Vista
Vista: Nombre de la vista a destruir Se borra del catlogo la vista (ya no se admiten referencias a ella) Al destruir una vista se pierde tambin las vistas que se basen en ella, si las hay (se puede producir una destruccin en cadena)
VISTAS
UTILIDAD DE LAS VISTAS Prohibir el acceso a datos confidenciales. Se pueden hacer vistas sobre tablas privadas y hacer pblicos parte de los datos (Vistas) Si una tabla contiene datos que no deben ser accesibles a algunos usuarios, se puede crear una vista en la que estos datos no aparezcan y autorizar a estos usuarios a trabajar con la vista y no con la tabla (datos protegidos). Se pueden esconder campos o registros que cumplan ciertas condiciones Permiten a distintos usuarios ver los mismos datos de diferentes formas (todos trabajan con la misma base de datos pero con distinta visin) Simplificar la percepcin del usuario. La vista permite al usuario concentrarse slo en los datos de su inters personal, y hacer caso omiso de los otros datos Simplificar la formulacin de consultas complejas o repetitivas. Si una consulta es complicada y debe ser usada por usuarios sin mucha experiencia, se crea una vista y se deja hecha para su uso, a travs de SELECTS sencillas. Tambin se puede ahorrar tiempo (aunque el usuario no sea novato) si es una consulta larga o repetitiva, haciendo una vista, y trabajar con ella en lugar de con las tablas Aumentar la independencia de los programas con respecto a los datos (independencia lgica de los datos). Un SGBD tiene independencia fsica de los datos porque los usuarios no tienen nada que ver en la estructura fsica de los datos almacenados (no saben como se guardan los datos en disco). Y tiene independencia lgica de los datos porque los usuarios y los programas son independientes de la estructura lgica de la base de datos (reestructuracin y crecimiento (incluir campos nuevos)). Si se cambian nombres a tablas (por cualquier razn), o se desglosa una tabla en dos, las sentencias SQL incluidas en los programas que se refieren a estas tablas, deben ser revisadas y cambiadas. Si se define una vista sobre la nueva estructura dejando en la vista los mismos nombres de las tablas viejas, el programa sigue valiendo
COMPOSICIN DE CONSULTAS
Una composicin de consultas es la unin del resultado de varias consultas formando una tabla nica Consulta compuesta
Es una consulta que resulta de unir otras dos (que tambin pueden ser compuestas) Para poderse realizar, las dos SELECTS deben tener el mismo nmero de columnas y del mismo tipo en cada posicin relativa, obteniendo una tabla con las mismas columnas y tipos TIPOS: Union, Interseccin, Minus
COMPOSICIN DE CONSULTAS
Se produce una tabla que contiene todas las filas resultantes del primer SELECT ms todas las filas resultantes del segundo SELECT Si hay filas iguales se eliminan para que no hayan repeticiones Dos filas son iguales si todos sus valores son iguales Similar al operador OR
Tabla que contiene todas la filas resultantes del primer SELECT ms todas las resultantes del segundo SELECT, incluidas las que sean iguales
COMPOSICIN DE CONSULTAS
COMPOSICIN DE CONSULTAS
MINUS o EXCEPT
SELECT __________ EXCEPT SELECT ________ SELECT __________ MINUS SELECT _________
Halla los elementos que pertenecen al primer SELECT y que no pertenecen al segundo Toma todos los resultados de la primera instruccin SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instruccin SQL para obtener una respuesta final Si la segunda instruccin SQL incluye resultados que no estn presentes en la primera instruccin SQL, dichos resultados se ignoran
NDICES
Tablas de gran tamao, el proceso de recuperacin de datos puede ser lento Por ejemplo
Para un pedido hay que recorrer la tabla de lneas de pedido completa, de principio a fin Lista de claves con una estructura tal que el servidor puede realizar bsquedas de forma muy rpida Tambin puede establecer el orden en que se almacenan las filas en una tabla Cada vez que se inserta, modifica o elimina de una tabla de la cual depende uno o varios ndices, el servidor tiene que actualizar la tabla de datos y todos los ndices que existan (consistencia informacin)
NDICES
El diseo fsico es muy dependiente del SGBD que se use. En l se describen las distintas formas de almacenar los datos, ndices a utilizar, rutinas de compresin, parmetros fsicos de la base de datos, etc En una sentencia SELECT se seleccionan ciertos registros en funcin de unas condiciones Para recuperar los registros pedidos se puede hacer leyendo completamente la tabla o tablas participantes (bsqueda secuencial)
Los ndices son ficheros auxiliares que se utilizan para leer directamente el registro necesario (sin pasar por los registros previos), lo que se traduce en ms rapidez Un ndice es una estructura de datos que permite acceder a las filas de una tabla siguiendo el orden de los valores de alguna o algunas de sus columnas El SGBD trabaja con bloques (unidad de transferencia de datos entre el disco y la memoria en las operaciones de Lectura/Escritura), generalmente 4096 Bytes. Para obtener un registro por lo menos se ha de ver un bloque Un ndice transforma el contenido de uno o ms campos en una direccin. Si se da el valor de un campo (o varios), la direccin indica donde est (acceso directo a los datos) El ndice suele guardarse en un fichero auxiliar donde se guardan todos los valores de los campos indexados ordenados y su direccin de bloque
NDICES
El SGBD se encarga de mantener estos ndices Cada vez que se inserte o borre una fila hay que actualizar los ndices, lo que supone ms tiempo En una tabla se pueden definir uno o varios ndices o ninguno, sobre uno o varios campos Se pueden crear los ndices antes de que la tablas tenga datos Se pueden crear ndices en tablas o vistas Conclusin:
Los ndices aceleran las bsquedas Los ndices ralentizan las actualizaciones Hay que pensar bien donde poner los ndices
NDICES
Un ndice debe crearse sobre una tabla o vista ndices: Agrupados y no agrupados Agrupados (CLUSTERED)
Slo puede haber un ndice agrupado por tabla Establece el orden de las filas en la tabla a la que pertenece Si no se pone ndice agrupado las filas se almacenan en el orden en que se introducen Hace ms fciles las bsquedas en las tablas pero las operaciones no son aadir fila y ya est (hay que insertarlas y cambiar su orden) Por defecto el ndice agrupado es el ndice agrupado a la clave principal, si hay Los ndices no agrupados hacen referencia a las filas de datos correspondientes, basndose en el ndice agrupado
Generalmente el ABD es el que crea y destruye los ndices, teniendo en cuenta cuales pueden ser los ms usados El SGBD se encargar de usarlos si existen Para crear un ndice hay que especificar principalmente la tabla sobre la que se va a crear y la columna o columnas que se van a utilizar para establecer el orden.
CREATE [UNIQUE] INDEX ndice ON tabla (Col1 [ASC / DESC] [, Col2 [ASC/DESC] ] ...) [CLUSTERED] [WITH CHECK OPTION]
ndice: Nombre que se le asigna al ndice Tabla: Tabla sobre la que se define el ndice DESC: Si se especifica, el orden del ndice es de mayor a menor, si no se pone es ASC por defecto UNIQUE: Indica que los valores indexados no pueden repetirse (si se intenta insertar o actualizar un valor repetido da un error). El ndice no puede contener duplicados. Puede haber slo un registro con campo nulo
CLUSTER
El ndice CLUSTER (slo puede haber uno por tabla) indica que las filas de la tabla correspondiente deben estar almacenadas fsicamente segn el orden de las columnas que impone el ndice. En la insercin CLUSTER se almacena el registro fsicamente tan prximo como sea posible a su posicin de orden) Puede tener ventajas en ciertas operaciones Crea un ndice en el que el orden lgico de los valores de clave determina el orden fsico de las filas correspondientes de la tabla Cree el ndice agrupado antes de crear los ndices no agrupados. Los ndices no agrupados existentes en las tablas se vuelven a generar al crear un ndice agrupado. Exige que todas las instrucciones de modificacin de datos ejecutadas en la vista (INSERT, UPDATE, DELETE) sigan los criterios establecidos en la SELECT de la vista. Cuando una fila se modifica mediante una vista, WITH CHECK OPTION garantiza que los datos permanezcan visibles en toda la vista despus de confirmar la modificacin Una vista se crea con una condicin (vuelo de iberia), se inserta un registro en la vista (vuelo de binter). El vuelo se crea en la tabla, pero si se seleccioina la vista no est (no cumple la condicin). Con CHECK OPTION no permitira el INSERT sobre la vista
Sentencia que se utiliza para destruir un ndice (borrarlo del catlogo) DROP INDEX ndice
Si se destruye una tabla sobre la que hay ndices definidos, tambin se destruyen stos automticamente
NDICES
Definir un ndice en el campo clave, para asegurar que ste es nico, adems de ser un campo de acceso frecuente Usar en campos claves alternativas (DNI, Nmero de la Seguridad Social, nmero de cuenta corriente, etc.) Usar un ndice para cada clave ajena, puesto que stas son utilizadas en las yunciones (relaciones entre tablas) En campos que se usan frecuentemente en SELECTS En campos que se necesiten tener ordenados Si las tablas tienen pocas filas no es muy conveniente los ndices Ms ndices de los debidos supone espacio y tiempo perdido Menos ndices de los debidos suponen lentitud
NDICES
INTEGRIDAD REFERENCIAL
Consiste en garantizar que cualquier clave ajena se corresponde con una clave primaria o es nula (por ejemplo, no hay empleados que pertenezcan a algn departamento inexistente) Esto es misin del SGBD (no del usuario, que si est haciendo una consulta interactiva no sabe como estn los datos) Utilizando la integridad referencial se aumenta la calidad de los datos y se evitan errores Cuando se da de alta a un empleado, por ejemplo, es el SGBD el que verifica que existe el departamento, o cualquier clave ajena (y no el programador) Tambin se comprueba, si se intenta borrar un departamento y tiene asignados empleados Rechazar operacin si tiene empleados asignados: Restringir. Suprimir el departamento y los empleados: Propagar en cascada. Suprimir el departamento y poner a nulo el campo departamento en empleados: Hacer nula la clave ajena Es misin del ABD decidir si la integridad la realiza el SGBD o el programa del usuario (es mejor que la controle el Gestor por facilidad y por calidad de los datos)
SINNIMOS
Los sinnimos se utilizan para poder identificar a las tablas con un nombre diferente al que se les dio en su creacin (por ejemplo para simplificar su nombre original) Son alias que se le asigna a una tabla Los sinnimos slo son utilizables por el usuario que los ha creado Si un usuario quiere referirse a una tabla original con un sinnimo debe crearlo Se pueden crear diferentes sinnimos para una misma tabla No se puede crear un sinnimo sobre una tabla con un nombre de sinnimo ya existente (aunque sea otra tabla)
Transact SQL
Los SGBD permiten almacenar datos, recuperarlos y manipularlos Pueden almacenar y ejecutar la lgica necesaria para el tratamiento de esa informacin Utilizacin de un lenguaje basado en SQL Transact SQL: Lenguaje SQL de SQL Server
Funciones
Programa que realiza una tarea determinada bajo demanda
Table
Almacenar en una variable una tabla completa Se puede realizar sobre la variable cualquier operacin vlida en una tabla P.e.: crear una tabla virtual, temporal con el fin de devolver unos resultados elaborados a partir de los datos de la base
Transact SQL:Variables
SQL:
Los datos se almacenan en una tabla de la bd Permanecen all hasta que se recuperan
Transact SQL:Variables
Antes de utilizar Declarar
DECLARE @nombre tipo @variable: @ para declaracin, asignacin, lectura DECLARE @Suma int
Asignacin
SELECT @nombre = valor SELECT @Suma = 12 SELECT @Suma = Count(numem) FROM temple
Transact SQL:Variables
Programa 1
USE temple DECLARE @suma int SELECT @suma = COUNT(numem) FROM temple PRINT @suma
Transact SQL:Variables
Expresiones
Variables, constantes, resultado de funciones pueden ser operandos formando parte de expresiones Expresin: Operandos + operadores Resultado Aritmticas (clculos, con resultado) y Lgicas (relaciones v, f t,f) Aritmticas (+ - * / %) Lgicas (= <> < <= > >= !< !>)
Transact SQL:Variables
Programa 2
USE temple DECLARE @suma int DECLARE @resultado int SELECT @suma = COUNT(numem) FROM temple SELECT @resultado = @suma * AVG(salar) PRINT @resultado
Transact SQL:Variables
Programa 3
USE temple IF (SELECT COUNT(numem) FROM temple) >10 PRINT Hay muchos empleados ELSE PRINT La empresa es pequea
Transact SQL:Variables
Programa 4
USE temple DECLARE @contador smallint SELECT @contador = 1 WHILE @contador !>10
mientras contador no sea mayor que 10
Transact SQL:Variables
DECLARE @total int, @hoy datetime DECLARE @cp char(5) @ciudad varchar(30) Declarar una variable de tipo tabla (3 campos) DECLARE @tablaempleados table (numem char(5) PRIMARY KEY, salar money, nomem varchar(30))
Transact SQL:Variables
Variable recin creada no tiene valor asignacin Asignacin de valores simples
SELECT @suma = 10 SET @suma = 10
Otras asignaciones
SELECT @suma = AVG(salar) FROM temple Consulta de la cual se obtiene el resultado a asignar a la variable SET no se puede utilizar
Transact SQL:Variables
Variables predefinidas
Aparte de las variables que podamos declarar, podremos utilizar otras ya predefinidas Globales: Disponibles siempre (no hay que definirlas ni asignarles valor) @@nombre
Transact SQL:Variables
Variables predefinidas: Algunas
@@CONNECTIONS
N de conexiones efectuadas desde que se inici SQL Server
@@CURSOR_ROWS
N de filas del ltimo cursor abierto
@@FETCH_STATURS
Estado tras la ltima recuperacin de fila a travs de un cursor
@@IDENTITY
Valor asignado a la ltima columna de identidad que se haya insertado
@@ ROWCOUNT
N de filas afectadas por la ltima sentencia que se haya ejecutado
@@SERVERNAME
Nombre del servidor
@@SERVICENAME
Nombre del servicio
@@VERSION
Informacin de versin del servidor
Transact SQL:Variables
El valor de las variables predefinidas se obtiene con SELECT
SELECT @@SERVERNAME PRINT @@SERVERNAME SELECT @@SERVERVERSION AS Versin de SQL Server, @@SERVERNAME AS Servidor
Transact SQL:Variables
Cursores
No utilizar si no es totalmente necesario Ralentizan muchsimo el rendimiento de la aplicacin Intentar utilizar SQL complejas en lugar de cursores Obtener un cursor para manipular un conjunto de datos Se puede trabajar con un conjunto de datos fila a fila, en lugar de hacerlo con todos los datos
Definir el conjunto de datos: DECLARE Abrir el cursor: OPEN Recuperar los datos de una fila en variables: FETCH Procesar Liberar el cursor: DEALLOCATE
Transact SQL:Variables
Cursores: Definir cursor
1. Como variable global, luego se le asigna un valor 2. Como objeto cursor 1. DECLARE CursorNumem CURSOR FOR SELECT numem, salar FROM temple
No se le pone @ a CursorNumem (no es una variable local). Se le asigna un nombre a un objeto del tipo CURSOR Cursor asociado a un conjunto de datos
2. DECLARE @CursorNumem cursor SET @CursorNumem = CURSOR FOR SELECT numem, salar FROM temple
La variable local podra utilizarse como cursor para distintos conjuntos de datos (cambiando la asignacin)
Transact SQL:Variables
Cursores: Abrir cursor
Despus de definir el cursor: Abrirlo antes de poder acceder a las filas del conjunto de datos Desplazamiento secuencial (de la primera a la ltima)
DECLARE CursorNumem CURSOR FOR SELECT
Abrir el cursor
OPEN cursor (nombre del cursor o variable)
Transact SQL:Variables
Cursores: Recuperar filas del conjunto
FETCH fila FROM cursor INTO variables fila
NEXT: Siguiente al actual o 1 si se acaba de abrir PRIOR: Anterior FIRST: Primera LAST: ltima ABSOLUTE n: fila a recuperar RELATIVE +- n: n de filas a moverse adelante o atrs
@@FETCHSTATUS
Determinar si la operacin FETCH ha tenido xito (devuelve 0)
Transact SQL:Variables
Cursores: Liberar cursor
Despus de usar el cursor, liberar los recursos utilizados
DEALLOCATE
Transact SQL:Variables
Table
Tabla temporal en memoria Las sentencias SQL actan sobre conjunto de datos Se pueden crear tablas virtuales o temporales (no se almacenan en la bd)
Definir variable table Usarla como una tabla: insertando filas, modificndolas, seleccionando datos, etc.
Transact SQL:Variables
Programa 5 USE temple -- Variable que funciona como tabla DECLARE @TbEmpleados table (numem char(3) PRIMARY KEY, salar money, fecin datetime) -- Variables para ir recuperando los valores DECLARE @varnumem char(3) DECLARE @varsalar money -- Cursor del que se recuperan los valores DECLARE @CursorNumem SET @CursorNumem = CURSOR FOR SELECT numem, salar FROM temple -- Abrir el cursor y recuperar 1 fila OPEN @CursorNumem FETCH NEXT FROM @CursorNumem INTO @varnumem, @varsalar -- Recorrer la tabla mientras hayan filas WHILE @@FETCHSTATUS=0 BEGIN --Las insertamos en la variable table, junto con la fecha y la hora INSERT INTO @TbEmpleados VALUES (@varnumem, @varsalar, GETDATE()) --Siguiente fila FETCH NEXT FROM @CursorNumem INTO @varnumem, @varsalar END --Liberar el cursor DEALLOCATE @CursorNumem SELECT * FROM @TbEmpleados
De conjunto de filas:
containstable, freetexttable, opendatasource, openquery, openrowset, openxml
De seguridad:
http://msdn.microsoft.com/es-es/library/ms186236.aspx
TRIGGERS
Tambin llamados disparadores o desencadenadores Son procedimientos almacenados que se ejecutan automticamente, en lugar de ser invocados de manera explcita, en el momento en que se desencadena cierto suceso o evento
TRIGGERS
Beneficios
Un trigger es un SP que se ejecuta automticamente cada vez que tiene lugar la accin para la que se ha definido No se pueden invocar directamente, se puede ejecutar la accin que activa el trigger No admite parmetros y no puede usar la instruccin RETURN Puede devolver resultados (no se recomienda) Se ejecutan en segundo plano y no deberan devolver ms que mensajes de error, cuando sea necesario Dentro del Trigger se puede hacer referencia a objetos de otras bases de datos (integridad referencial entre objetos de distintas BD)
TRIGGERS
Beneficios
Se pueden definir varios trigger para cada accin INSERT, UPDATE o DELETE No representan una gran sobrecarga de trabajo para SQL Server No es recomendable complicar la lgica interna de los desencadenadores Estn asociados a una tabla o vista concreta
TRIGGERS
Tablas INSERTED y DELETED
La tabla INSERTED
Las nuevas filas que se han insertado mediante la instruccin INSERT Los nuevos valores para las filas que se han modificado mediante la instruccin UPDATE
La tabla DELETED
Las filas eliminadas por una instruccin DELETE Los valores viejos de las filas modificadas por una instruccin UPDATE
Si la accin original modific varias filas a la vez, el trigger se activar una sola vez y las tablas INSERTED y DELETED contendrn varias filas con las modificaciones
TRIGGERS
Tablas INSERTED y DELETED
INSERT
Los datos insertados se guardan en la tabla inserted INSERT INTO hist . FROM inserted
DELETE
Los datos borrados se guardan en la tabla deleted INSERT INTO hist . FROM deleted
UPDATE
Los valores nuevos del registro se guardan en inserted Deleted guarda el registro modificado sin los cambios que se acaban de hacer INSERT INTO hist . FROM inserted o deleted Si no hay cambios:
Si c1<>deleted.c1 or c2<>deleted.c2 update Else no grabar
TRIGGERS
Tablas INSERTED y DELETED
Las tablas inserted y deleted son creadas automticamente al entrar en un desencadenador Se puede recuperar datos de dichas tablas, pero no aadir Los nombres de las columnas de estas tablas sern los mismos que tengan las columnas originales en sus respectivas tablas o vistas
TRIGGERS
Tipos de trigger segn el momento de su ejecucin
Desencadenadores INSTEAD OF. Se activan en lugar de la accin original, antes de que tenga lugar la modificacin del objeto base Desencadenadores AFTER. Se activan inmediatamente despus de la modificacin de los datos de la tabla base
Una tabla puede tener un nmero ilimitado de desencadenadores AFTER para cada accin, pero solamente un desencadenador INSTEAD OF por accin. Las vistas slo pueden tener desencadenadores INSTEAD OF.
TRIGGERS
Desencadenadores INSTEAD OF
Se evita que la accin desencadenante sea ejecutada Se activan automticamente cuando se ejecuta la instruccin definida Se activa antes de la ejecucin de la accin. La tabla base an no ha sufrido modificaciones Se puede acceder a las tablas Inserted y Deleted Se pueden usar para controlar los datos antes de que tenga lugar la modificacin, en forma ms compleja de la permitida por las restricciones CHECK Dependiendo de las condiciones evaluadas podemos decidir entre hacer efectivos los cambios solicitados o dejarlos totalmente sin efecto En una tabla que tenga definida una restriccin FOREIGN KEY con operaciones CASCADE no se puede crear un trigger INSTEAD OF
TRIGGERS
Desencadenadores INSTEAD OF
Para cada tabla o vista se puede definir un solo desencadenador INSTEAD OF por accin activadora (INSERT, UPDATE y DELETE): INSTEAD OF INSERT
Brinda la posibilidad de controlar los cambios antes de que se apliquen a los datos y decidir por ltimo cuales aplicar
INSTEAD OF DELETE
TRIGGERS
Desencadenadores AFTER
Despus del INSERT, UPDATE, DELETE Se ejecutan una vez modificados los datos. Sin embargo, como la transaccin todava sigue en curso, podemos decidir la cancelacin de la accin A diferencia de los desencadenadores INSTEAD OF, para confirmar la transaccin no hace falta hacer nada especial; sta se completar automticamente a menos que decidamos descartarla Se puede definir un nmero indefinido de desencadenadores AFTER para cada tabla y accin (se ejecutarn uno tras otro en el orden en que se han definido) Verificar validez de la operacin realizada, actuar sobre otras tablas
TRIGGERS
Creacin y eliminacin de Triggers
TRIGGERS
Creacin y eliminacin de Triggers
CREATE TRIGGER NombreTrigger ON {NombreTabla/NombreVista} [WITH ENCRYPTION] {FOR/AFTER/INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]} AS BEGIN <Cuerpo de la trigger> END CREATE TRIGGER tr_Customers ON Customers AFTER INSERT, UPDATE, DELETE AS -- Inserte sus instrucciones aqu CREATE TRIGGER tr_Customers ON Customers FOR INSERT, UPDATE, DELETE AS -- Inserte sus instrucciones aqu
TRIGGERS
Creacin y eliminacin de Triggers
CREATE TRIGGER tr_Customers ON Customers AFTER INSERT, UPDATE, DELETE AS -- Inserte sus instrucciones aqu CREATE TRIGGER isr_Customers ON Customers AFTER INSERT AS -- Inserte sus instrucciones aqu CREATE TRIGGER tr_Customers ON Customers INSTEAD OF INSERT, UPDATE, DELETE AS -- Inserte sus instrucciones aqu CREATE TRIGGER tr_Customers ON Customers FOR INSERT, UPDATE, DELETE AS -- Inserte sus instrucciones aqu CREATE TRIGGER tr_Customers ON Customers WITH ENCRYPTION FOR INSERT, UPDATE, DELETE AS -- Inserte sus instrucciones aqu CREATE TRIGGER isr_Customers ON Customers INSTEAD OF INSERT AS -- Inserte sus instrucciones aqu
TRIGGERS
Utilidad desencadenadores
Integridad referencial Actualizacin de una vista en la que participan mltiples tablas Realizacin de un registro o histrico de los cambios realizados en una tabla
TRIGGERS
Integridad referencial
TRIGGERS
Actualizacin vistas
TRIGGERS
Histrico Realizacin de un registro de los cambios que se efectan en una tabla
Se puede controlar desde el VB si se accede a una BD (por software) Con trigger funciona siempre independientemente desde donde se haga el acceso Visual basic, php, asp Administrador corporativo Analizador de consultas Conexiones desde access, Insert Insert tabla fsica, Insert tabla histrico Delete Delete tabla fsica, Insert tabla histrico Update Update tabla fsica, Insert tabla histrico
Cada vez que se efecta un cambio, guardar el registro, indicar quien lo cambi, cuando, que cambi, tipo de cambio
TRIGGERS
Ejemplo
--Hay varias personas que pueden registrar nuevos libros (quin y cuando resgistr libros) --Operacin INSERT sobre la tabla Libros Guardar algunos datos en otra tabla por cada insercin --Tabla HistLibros, campos: ISBN, quien, cuando --Cada empleado cada vez que inserta un libro lo escribe en la otra tabla? CREATE TRIGGER tr_NuevoLibro ON Libros FOR INSERT -- Es equivalente a AFTER INSERT AS BEGIN INSERT INTO HistLibros SELECT ISBN, SUSER_SNAME(), GETDATE()) FROM inserted END --Cada vez que se inserten filas en la tabla Libros se producir automticamente un registro en la --tabla HistLibros
TRIGGERS
Ejemplo
--Construir una vista con datos obtenidos de dos tablas relacionadas --Podemos hacer insercin de registro sobre esta vista con un trigger (no se puede hacer --inserciones en vistas compuestas de varias tablas directamente) --Se quiere aadir un empleado nuevo que est en un departamento que no existe en un edificio ------nuevo CREATE TRIGGER ON INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON --No devolver nmero de filas afectadas . END
TRIGGERS
Determinacin del orden de ejecucin
Es imposible determinar un orden de ejecucin especfico para los desencadenadores definidos para una misma accin Se puede seleccionar que desencadenador se ejecutar en primer lugar y cul lo har al final Se utiliza el procedimiento almacenado de sistema sp_settriggerorder
TRIGGERS
Determinacin del orden de ejecucin
CREATE TRIGGER tr3_Customers ON Customers AFTER UPDATE AS PRINT 'Este es el desencadenador tr3'
TRIGGERS
Controlar la modificacin de columnas especficas Dentro de un desencadenador podemos saber si una columna ha sufrido modificaciones. Funcin UPDATE(). El valor de esta funcin es TRUE cuando la columna fue modificada. COLUMNS_UPDATED(). Devuelve un patrn de bits varbinary que indica qu columnas de la tabla se insertaron o se actualizaron. Cada bit es 1 si la columna sufri cambios y 0 en caso contrario.
TRIGGERS
Controlar la modificacin de columnas especficas
La funcin COLUMNS_UPDATED devuelve los bits en orden de izquierda a derecha, siendo el bit menos significativo el primero de la izquierda. El primer bit de la izquierda representa la primera columna de la tabla, el siguiente representa la segunda columna, etc. COLUMNS_UPDATED devuelve varios bytes si la tabla en que se ha creado el desencadenador contiene ms de 8 columnas, siendo el menos significativo el primero de la izquierda. COLUMNS_UPDATED devolver el valor TRUE en todas las columnas de las acciones INSERT porque en las columnas se insertaron valores explcitos o implcitos (NULL).
TRIGGERS
Controlar la modificacin de columnas especficas
CREATE TRIGGER tr_OrderDetails ON [Order Details] AFTER UPDATE AS -- Verificamos si hubo cambios en la clave principal IF UPDATE(OrderID) BEGIN PRINT 'No se permiten cambios a la clave principal' ROLLBACK TRAN END -- Verificamos si hubo cambios en las columnas 2, 3 y 5 IF ((COLUMNS_UPDATED() & (22)) > 0) BEGIN IF ((COLUMNS_UPDATED() & 2) = 2) PRINT 'Se modific la columna ProductID' IF ((COLUMNS_UPDATED() & 4) = 4) PRINT 'Se modific la columna UnitPrice' IF ((COLUMNS_UPDATED() & 16) = 16) PRINT 'Se modific la columna Quantity' END
TRIGGERS
Controlar la modificacin de columnas especficas
Crea el siguiente grupo de sentencias SQL y ejectalas
PRINT CHAR(10) + 'Modificamos las columnas ProductID y UnitPrice' UPDATE [Order Details] SET ProductID = ProductID, UnitPrice = UnitPrice PRINT CHAR(10) + 'Modificamos solamente la columna Quantity' UPDATE [Order Details] SET Quantity = Quantity PRINT CHAR(10) + 'Modificamos OrderID' UPDATE [Order Details] SET OrderID = OrderID
TRIGGERS
Controlar la modificacin de columnas especficas
Debe dar el resultado siguiente:
Modificamos las columnas ProductID y UnitPrice Se modific la columna ProductID Se modific la columna UnitPrice (2155 filas afectadas) Modificamos solamente la columna Quantity Se modific la columna Quantity (2155 filas afectadas) Modificamos OrderID No se permiten cambios a la clave principal
TRIGGERS
Controlar la modificacin de columnas especficas
Si tiene que probar actualizaciones que afectan a otras columnas que no sean las 8 primeras de una tabla, debe utilizar la funcin SUBSTRING para probar si COLUMNS_UPDATED devuelve el bit correcto.
CREATE TRIGGER tr1 ON Customers FOR UPDATE AS IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=20 AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=1 ) PRINT 'Las columnas 3, 5 y 9 han sido actualizadas' GO UPDATE Customers SET ContactName=ContactName, Address=Address, Country=Country GO
TRIGGERS
Controlar la modificacin de columnas especficas
La funcin POWER Devuelve el valor de la expresin indicada elevada a la potencia especificada. Sintaxis POWER ( numeric_expression , y )
IF (SUBSTRING(COLUMNS_UPDATED(),4,1) & 28) > 0 -- Estas dos lneas hacen exactamente lo mismo IF (SUBSTRING(COLUMNS_UPDATED(),4,1) & (POWER(2, (3-1)) + POWER(2, (4-1)) + POWER(2, (5-1))) > 0
TRIGGERS
Modificacin de Triggers
Para modificar un Trigger existente se utiliza la instruccin ALTER TRIGGER. Las sintaxis de ALTER TRIGGER es idntica a la de CREATE TRIGGER. Como los desencadenadores son objetos independientes, ningn objeto depende de ellos. Podemos eliminarlos y volver a crearlos cada vez que sea necesario. DROP TRIGGER se utiliza para borrar un desencadenador.
TRIGGERS
Deshabilitar los desencadenadores
Para acelerar algunos procesos se puede deshabilitar temporalmente un desencadenador. El histrico puede hacerse enorme Para deshabilitar un Trigger se utiliza la instruccin ALTER TABLE con la opcin DISABLE TRIGGER Para volver a activar el Trigger se utiliza la instruccin ALTER TABLE con la opcin ENABLE TRIGGER
ALTER TABLE [Order Details] DISABLE TRIGGER tr_OrderDetails ALTER TABLE [Order Details] ENABLE TRIGGER tr_OrderDetails ALTER TABLE Employees DISABLE TRIGGER tr_Employees, isr_Employees, udt_Employees
PROCEDIMIENTOS ALMACENADOS
SQL Server no slo manipula informacin gestionando tablas e ndices procesando consultas, etc. Hasta ahora slo hemos visto consultas interactivas con el SGBD Es capaz de ejecutar procedimientos almacenados
Se ejecuta y se ve el resultado de forma inmedianta Procedimientos escritos en Transact-SQL y almacenados en la propia BD Mejoran la seguridad y la integridad de los datos
Se puede crear la estructura de la BD con que trabajarn las aplicaciones y la lgica para la manipulacin de esos datos
PROCEDIMIENTOS ALMACENADOS
Caractersticas
Se ejecuta bajo demanda Puede recibir y devolver parmetros Facilitar la accin de futuros usuarios y aplicaciones
Con las vistas: Simplificar consultas, simplificar insercin de datos en mltiples tablas. Queremos saber las ventas de un da, un mes, una semana o entre 2 fechas: Podra utilizarse una consulta SQL, pero el usuario debe saber SQL Procedimientos almacenados, simplifican esta labor
Mecanismo de seguridad
Si no queremos dar permisos a los usuarios sobre ciertos objetos podemos crear SP que se encarguen de manipular dichos objetos y dar permisos a los usuarios para ejecutar estos SP
Ejecucin automtica
EXEC sp_MostrarBaseDeDatos
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado
Se puede crear desde el Managament Studio o desde una consulta SQL Managament Studio
En la BD donde se va a crear Crear Procedimiento almacenado (carpeta programacin Escribir el contenido
Comprobar sintaxis Asignar permisos Guardar como plantilla
CREATE PROCEDURE HoraActual AS SELECT CURRENT_TIMESTAMP
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado
CREATE PROCEDURE NombreSP [ @Param1 tipodatos [=valorPredeterminado] [OUTPUT], @Param1 tipodatos [=valorPredeterminado] [OUTPUT],... ] AS ... Cuerpo del SP ...
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: recepcin y devolucin de parmetros
Mayor utilidad cuanto ms flexible sea En el ejemplo siguiente:
Buscar los apellidos que empiezan por a Buscar los apellidos que empiezan por cualquier letra que se le pasa
Tambin sera til que se le pudiera pasar un resultado al usuario o aplicacin que lo solicita, en lugar de quedarse almacenado en la tabla del que deber ser recuperado
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: recepcin y devolucin de parmetros
Cualquier sp puede recibir parmetros si los necesita Irn detrs del nombre, especificando la variable y su tipo Si se ejecuta el sp sin parmetros error El error se evita ponindole al parmetro un valor por defecto
Usado si se llama al sp sin parmetro alguno
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: recepcin y devolucin de parmetros
CREATE PROCEDURE NombreSP [ @Param1 tipodatos [=valorPredeterminado] [OUTPUT], @Param1 tipodatos [=valorPredeterminado] [OUTPUT],... ] AS ... Cuerpo del SP ...
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Ejemplos
CREATE PROCEDURE buscarEmpleadosPorApellido @apellidoEmp varchar(40) AS SELECT * FROM Employees WHERE lastname LIKE % + @apellidoEmp + % CREATE PROCEDURE buscarEmpleadosPorApellido @apellidoEmp varchar(40) = a AS SELECT * FROM Employees WHERE lastname LIKE % + @apellidoEmp + % Exec buscarEmpleadosPorApellido Exec buscarEmpleadosPorApellido a
PROCEDIMIENTOS ALMACENADOS
Ejecutar el procedimiento almacenado
EXECUTE o EXEC nombre_procedimiento
CREATE PROCEDURE buscarEmpleadosPorApellido @apellidoEmp varchar(40) AS SELECT * FROM Employees WHERE lastname LIKE % + @apellidoEmp + % CREATE PROCEDURE buscarEmpleadosPorApellido @apellidoEmp varchar(40) = a AS SELECT * FROM Employees WHERE lastname LIKE % + @apellidoEmp + % Exec buscarEmpleadosPorApellido Exec buscarEmpleadosPorApellido a
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Instruccin RETURN
Se usa para salir sin condiciones de un SP (desde cualquier punto del SP) Tiene un valor de retorno de tipo entero El valor de retorno predeterminado es 0 Se puede utilizar RETURN para devolver un cdigo de error
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Instruccin RETURN
CREATE PROCEDURE ObtenerEmpleado @idEmpleado int AS IF NOT EXISTS(SELECT * FROM Employees WHERE employeeid=@idEmpleado) RETURN 1 ELSE SELECT * FROM Employees WHERE employeedid=@idEmpleado RETURN
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURE Totaliza @ISBN char(13)= NULL AS BEGIN --El parmetro es NULL por defecto
IF @ISBN IS NULL --Si no se pasa parmetro INSERT INTO Totales SELECT (GETDATE(), NULL, SUM(importe) FROM Ventas ELSE -- si se pasa parmetro INSERT INTO Totales SELECT (GETDATE(), @ISBN, SUM(importe) FROM Ventas WHERE ISBN=@ISBN END -- Si no se pasa parmetro, valor por defecto NULL y se totalizan todas las ventas -- si se pasa el parmetro, se suman las filas correspondientes a ese libro
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURE Totaliza @ISBN char(13)= NULL AS BEGIN IF @ISBN IS NULL --Si no se pasa parmetro -- Devolvemos directamente el RETURN RETURN(SELECT SUM(importe) FROM Ventas) ELSE -- si se pasa parmetro RETURN(SELECT (SUM(importe) FROM Ventas WHERE ISBN=@ISBN) END -- En lugar de realizar una insercin en una tabla, se devuelve directamente el resultado --El parmetro es NULL por defecto
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Ejemplo con parmetro de salida (OUTPUT)
CREATE PROCEDURE ObtenerDireccionEmpleado @idEmpleado int, @Direccion varchar(100) OUTPUT AS SELECT @Direccion= address + . + city + . + region + . + postalcode + . + country FROM Employees WHERE employeeid = @idEmpleado DECLARE @DireccionSP varchar(100) EXEC ObtenerDireccionEmpleado 12, @Direccion=@DireccionSP OUTPUT PRINT @DireccionSP
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURE Totaliza @ISBN char(13)= NULL --El parmetro es NULL por defecto
@Total money OUTPUT -- Parmetro de salida AS BEGIN IF @ISBN IS NULL --Si no se pasa parmetro -- Devolvemos el resultado en SELECT @Total=SUM(importe) FROM Ventas) ELSE -- si se pasa parmetro SELECT @Total=SUM(importe) FROM Ventas WHERE ISBN=@ISBN) END -- En lugar de realizar una insercin en una tabla, se devuelve directamente el resultado
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Devolucin de conjunto de datos
Adems de para actuar sobre tablas, insertando datos o extrayendo informacin procesada, un sp puede devolver un conjunto de datos procedentes de tablas fsicas de la BD o contenidos en una variable table
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Manejo de errores
La funcin del sistema @@ERROR devuelve el cdigo de error de la ltima instruccin ejecutada Este valor cambia cada vez que se ejecuta una instruccin, por lo tanto hay que controlar el error inmediatamente despus de ejecutar la instruccin RAISERROR
Se usar para generar explcitamente un error
RAISERROR (id_mensaje | texto_mensaje, gravedad, estado) WITH opcin
PROCEDIMIENTOS ALMACENADOS
Crear procedimiento almacenado: Manejo de errores
sp_addmessage 50001, 11, 'There was an error', 'us_english' sp_addmessage 50001, 11, 'Ha ocurrido un error', 'spanish CREATE PROCEDURE GenerarError AS RAISERROR (50001, 11, 1) WITH LOG SELECT @@ERROR
PROCEDIMIENTOS ALMACENADOS
USE empleados GO CREATE PROCEDURE CrearBD --@variable char(13)= NULL AS BEGIN DECLARE @ERROR int BEGIN TRANSACTION CREATE TABLE temple (..) SET @ERROR = @@ERROR IF @ERROR = -1 BEGIN ROLLBACK TRANSACTION RETURN @ERROR END INSERT INTO temple COMMIT TRANSACTION RETURN 0 END --@@ERROR a partir de aqu ya tiene otro valor NO es necesario
PROCEDIMIENTOS ALMACENADOS
USE empleados GO CREATE PROCEDURE sp_Actualiza_temple @empleado int AS BEGIN DECLARE @ERROR int BEGIN TRANSACTION UPDATE temple (..) SET C1=@C1, C2=@C2, WHERE numem=@empleado SET @ERROR = @@ERROR --@@ERROR a partir de aqu ya tiene otro valor IF @ERROR = -1 BEGIN ROLLBACK TRANSACTION RETURN @ERROR END COMMIT TRANSACTION RETURN 0 END
FUNCIONES DE USUARIO
Beneficios
Su definicin puede incluir ms de una instruccin y tener parmetros Se pueden invocar igual que los Procedimientos Almacenados Una funcin escalar definida por el usuario se puede usar en cualquier lugar de una expresin Transact-SQL en el que sea vlido el uso de una expresin Una funcin de usuario que devuelva una tabla se puede usar en la clusula FROM de cualquier instruccin del lenguaje de manipulacin de datos
Esto no es posible con los sp SELECT numem, salar, comis FROM Empleados (Siendo sp_Empleados un sp da un error) El mismo cdigo del sp puesto en una funcin si se puede ejecutar
FUNCIONES DE USUARIO
Beneficios
Usarla como subconsulta en la clusula WHERE Combinar resultados de dos funciones sin necesidad de usar tablas temporales para almacenar datos intermedios Usar el resultado como argumento del operador IN Crear una vista que no podra ser resuelta por una nica sentencia SELECT Crear una vista con parmetros Ampliar la lista de funciones predefinidas con funciones financieras de todo tipo Crear nuevas funciones matemticas
FUNCIONES DE USUARIO
Diferencias entre Funcin y Procedimiento Almacenado
Distinta sintaxis Contexto en que puede ser utilizada Un sp que efecta un clculo que devuelve un n, no puede ser utilizado en la definicin de una tabla para crear una columna calculada, una funcin s Un sp que devuelve un conjunto de datos no puede ser utilizado en una consulta, una funcin s Una funcin de usuario se puede utilizar donde se puede utilizar una funcin de SQL Server
FUNCIONES DE USUARIO
Tipos de funciones definidas por el usuario
Una funcin definida por el usuario puede constar de una nica instruccin o de varias. Segn su valor de retorno, las funciones definidas por el usuario se pueden dividir en tres grupos: Funciones escalares: Devuelven un nico valor escalar Funciones tabulares: Devuelven un conjunto de resultados completo (similar a una tabla) Funciones en lnea: Son un caso especial de las tabulares, pero constan de una nica instruccin SELECT
FUNCIONES DE USUARIO
Funciones Escalares
Devuelven un nico valor y se pueden usar en cualquier lugar donde se admita una expresin, por ejemplo: En la clusula SELECT de una instruccin SELECT, como parte de una expresin o como una columna individual En la clusula SET de una instruccin UPDATE, como valor para insertar en el campo de la tabla a modificar En la clusula ORDER BY como criterio de ordenacin Como valor DEFAULT para una columna Dentro de la definicin de una restriccin CHECK Dentro de una expresin CASE Dentro de una instruccin PRINT
FUNCIONES DE USUARIO
Funciones Escalares
Como parte de la condicin en instrucciones IF o WHILE Como parmetro, al llamar a un SP u otra funcin definida por el usuario Como valor de retorno de un procedimiento almacenado, si la funcin devuelve un valor entero Como valor de otra funcin escalar definida por el usuario
Se pueden combinar con otras funciones en una expresin, siempre que los tipos de datos sean compatibles con la operacin
FUNCIONES DE USUARIO
Creacin de Funciones Escalares
CREATE FUNCTION [Propietario.]NombreFuncin ( @Param1 tipodatos [=default], @ParamN tipodatos [=default]) RETURNS TipoDatosDeRetorno AS BEGIN <Cuerpo de la funcin> RETURN ValorDeRetorno END
Ejemplos de ejecucin
SELECT [Propietario.]dbo.NombreFuncin(ValorParam1,ValorParam2) SELECT @Variable = [Propietario.]dbo.NombreFuncin(ValorParam1,ValorParam2)
FUNCIONES DE USUARIO
Creacin de Funciones Escalares
CREATE FUNCTION [Propietario.]NombreFuncin ( @Param1 tipodatos [=default], @ParamN tipodatos [=default]) RETURNS TipoDatosDeRetorno AS BEGIN <Cuerpo de la funcin> RETURN ValorDeRetorno END
Principal diferencia de sintaxis entre la funcin y el procedimiento almacenado En la cabecera: Compuesta por la lista de parmetros y el tipo entre parntesis y el tipo de valor devuelto Se puede retornar un valor simple (int, money, ) o una variable table o una consulta
FUNCIONES DE USUARIO
Creacin de Funciones Escalares
Utilizamos la base de datos CURSO_SQL
USE CURSO_SQL
FUNCIONES DE USUARIO
Creacin de Funciones Escalares
Otra caracterstica interesante es que las funciones de usuario soportan llamadas recursivas, como se muestra en el siguiente ejemplo, que calcula el factorial de un nmero
CREATE FUNCTION dbo.Factorial ( @Numero int ) RETURNS INT AS BEGIN DECLARE @i int IF @Numero <= 1 SET @i = 1 ELSE SET @i = @Numero * dbo.Factorial( @Numero - 1 ) -- Devuelve el valor calculado RETURN (@i) END
FUNCIONES DE USUARIO
Creacin de Funciones Escalares
Devuelve el nombre de la persona que ejecut la funcin y desde que aplicacin lo hizo.
CREATE FUNCTION dbo.QuienFue() RETURNS varchar(100) AS BEGIN RETURN SYSTEM_USER + ' DESDE ' + APP_NAME() END PRINT dbo.QuienFue()
Ejecucin Salida
FUNCIONES DE USUARIO
CREATE FUNCTION fn_Edad (@NumEmpleado int) RETURNS smallint AS BEGIN DECLARE @FechaNacimiento datetime, @Edad smallint SELECT @FechaNacimiento=fecna FROM temple WHERE numem=@NumEmpleado --Calcular la edad RETURNS @Edad END --
FUNCIONES DE USUARIO
Funciones de tabla en lnea
Es algo parecido a una vista con parmetros. Contiene una nica instruccin SELECT pero puede usar varios parmetros para restringir la consulta. Pueden usarse en cualquier lugar en el que se admitira una tabla: En la clusula SELECT de una instruccin SELECT, como parte de una subconsulta que devuelva un nico valor (un conjunto de resultados con una sola fila y una sola columna). En la clusula SET de una instruccin UPDATE como una subconsulta que provea un nico valor para un campo de una tabla que queremos modificar. En la clusula FROM de cualquier instruccin DML.
FUNCIONES DE USUARIO
Funciones de tabla en lnea
En las clusulas WHERE o HAVING de cualquier instruccin DML como parte de una subconsulta que devuelva un nico valor para compararlo con un campo o variable. En la clusula WHERE de cualquier instruccin DML, como parte de una subconsulta que empiece con EXISTS o con NOT EXISTS. En las clusulas WHERE o HAVING de cualquier instruccin DML, como parte de una subconsulta con los operadores IN o NOT IN, siempre que la subconsulta devuelva una sola columna.
FUNCIONES DE USUARIO
Creacin de funciones de tabla en lnea
Sintaxis
CREATE FUNCTION [Propietario.]NombreFuncin ( @Param1 tipodatos [=default], @ParamN tipodatos) RETURNS TABLE AS RETURN ( Sentencia SELECT)
Ejemplo de ejecucin
SELECT * FROM [Propietario.]dbo.NombreFuncin(ValorParam1,ValorParam2)
FUNCIONES DE USUARIO
Creacin de funciones de tabla en lnea
Utilizamos la base de datos Northwind
USE Northwind
FUNCIONES DE USUARIO
Creacin de funciones de tabla en lnea
Una funcin que devuelve los pedidos de una fecha determinada
CREATE FUNCTION dbo.PedidosDelDia(@Fecha datetime) RETURNS TABLE AS RETURN ( SELECT * FROM Orders WHERE DATEDIFF(day, OrderDate, @fecha) =0 )
Ejecutamos la funcin para ver los pedidos del 06/05/1998. Solo mostramos los campos OrderID, CustomerID, EmployeeID, OrderDate y ordenamos la salida por el campo CustomerID. Formateamos el campo OrderDate para mostrar la fecha con el formato dia/mes/ao
SELECT OrderID, CustomerID, EmployeeID, CONVERT(varchar(10), OrderDate, 103) FROM dbo.PedidosDelDia(06/05/1998') ORDER BY CustomerID
FUNCIONES DE USUARIO
CREATE FUNCTION LibrosDistribuidora ( @IDDistribuidora smallint) RETURNS @Tabla table (Distribuidora varchar(50), Editorial varchar(50), Titulo varchar(50)) AS BEGIN INSERT INTO @Tabla SELECT Distribuidora.Nombre AS Distribuidora, Editoriales.Nombre AS Editorial, Libros.Titulo FROM Libros INNER JOIN Editoriales ON Libros.Editorial=Editoriales.IDEditorial INNER JOIN DistribucionEditorial ON Editoriales.IDEditorial= DibribucionEditorial.IDEditorial INNER JOIN Distribuidoras ON DistribuicionEditorial.IDDistribuidora=Distribuidoras.IDDistribuidora WHERE Distribuidoras.IDDistribuidora=@ RETURN END -- Funcin para obtener los libros de una distribuidora. --Al ser una funcin la podemos utilizar directamente en una SELECT --USE Librerias --SELECT Editorial, Titulo FROM LibrosDistribuidora(1)
FUNCIONES DE USUARIO
Funciones tabulares
Las funciones tabulares de varias instrucciones se parecen a las funciones en lnea. De echo se pueden usar en las mismas situaciones pero no estamos restringidos a definirlas con una nica instruccin SELECT. Devuelve un nico conjunto de resultados: el contenido de una variable de tabla con un formato predefinido indicado en la declaracin de la funcin. Estas funciones se parecen a los procedimientos almacenados, pero devuelven un nico conjunto de resultados. Se pueden definir parmetros de entrada pero no se pueden definir parmetros de salida.
FUNCIONES DE USUARIO
Creacin de funciones tabulares
Sintaxis
CREATE FUNCTION [Propietario.]NombreFuncin ( @Param1 tipodatos [=default], @ParamN tipodatos) RETURNS @NombreTabla TABLE (Columna1 tipodatos, ColumnaN tiposdatos) AS BEGIN <cuerpo de la funcin> RETURN END
FUNCIONES DE USUARIO
Creacin de funciones tabulares
CREATE FUNCTION dbo.ClientesDelPais (@pais varchar(15)) RETURNS @Lista TABLE (CustomerID nchar(5), CompanyName nvarchar(40), Country nvarchar(15)) AS BEGIN INSERT INTO @Lista SELECT CustomerID, CompanyName, Country FROM Customers WHERE Country = @pais RETURN END
Cursores
Administracin
Herramientas de administracin
DBA
Administrador de la base de datos Administra el servidor
Otros servicios
Coordinador de transacciones distribuidas: MSDTC Agente de SQL Server: SQLServerAgent Elegidos en la instalacin:
Servicio de Informes (Reporting services) Servicio de Integracin Servicio de anlisis Full-text Filter Server Browser
Asistentes
Herramientas grficas de administracin Simplifican tareas (creacin de una bd, ndice, vista, , copia de seguridad, )
Asistentes o plantillas
Ver / Explorador de plantillas
Asistentes o plantillas
Ver / Explorador de plantillas
Administracin
Creacin de una estructura de grupos
Si slo se va a trabajar con un servidor no hace falta crear grupos Gran empresa con mltiples servidores Grupos Ver / Servidores registrados Elegir: Local Server groups / Botn derecho / Nuevo grupo de servidores / Nombre y descripcin
Amrica ( mxico, argentina, usa), Europa (espaa, alemania, italia)
Administracin
Registro de servidores
Grupos
No tienen utilidad prctica Alojan enlaces con servidores
Conexiones: Instancia local de SQL Server (por defecto), otras instancias de SQL Server, servidores remotos Los servidores hay que registrarlos para poder acceder a ellos Registrar servidor
Seleccionar grupo / Botn derecho / Nuevo registro de servidor: nombre del servidor o ip (o buscar servidores), mtodo de autentificacin (windows, mixto), nombre alternativo del servidor (adecuado en lugar de la ip), Probar
Administracin
Registro de servidores
Grupos
No tienen utilidad prctica Alojan enlaces con servidores
Conexiones: Instancia local de SQL Server (por defecto), otras instancias de SQL Server, servidores remotos Los servidores hay que registrarlos para poder acceder a ellos Registrar servidor
Seleccionar grupo / Botn derecho / Nuevo registro de servidor: nombre del servidor o ip (o buscar servidores), mtodo de autentificacin (windows, mixto), nombre alternativo del servidor (adecuado en lugar de la ip), Probar Ver / Servidores registrados / Botn derecho / Aadir al explorador de objetos Otra opcin: Conectar / motor de base de datos
Administracin
Actuar sobre un servidor
Managament Studio ms completo que Configuratio Manager Seleccionar servidor / Botn derecho
Puede ser local o remoto Iniciar, pausar, reanudar, detener, reiniciar Conectar / Desconectar (cerrar conexin, liberando el canal y recursos o restablecerla)
Administracin
Seguridad
Limitar el acceso indiscriminado a informacin (importante) Qu personas pueden trabajar y qu pueden hacer Autentificacin: Windows, mixta
Autentificacin, comprobar si tiene acceso sobre la bd, conocer operaciones que le estn permitidas
Administracin
Seguridad: Usuarios y grupos de Windows
El servidor dispone de una bd con informacin de todas las cuentas de usuarios Cada usuario tiene una configuracin Forma parte de grupos Grupos: Permitir que mltiples usuarios compartan atributos sin necesidad de definirlos individualmente Crear usuarios y grupos
Herramienta Administracin de Equipos (Windows) / / Herramientas del sistema / Usuarios y grupos Locales Herramienta Usuarios y Equipos de Active Directory (Windows) Asociar usuarios a grupos
Administracin
Seguridad: Inicios de sesin en SQL Server
Crear en la carpeta Seguridad de SQL Server los inicios de sesin correspondientes a los usuarios y grupos a los que permitiremos acceder al servidor de datos No todos los usuarios de Windows podrn acceder al SQL Server
Slo los que tienen definido un inicio de sesin en SQL Server Managament Studio / Seguridad / Inicios de sesin:
Predefinidos: Administradores de Windows, sa Botn derecho / Nuevo inicio de sesin / Autentificacin de Windows / Elegir un grupo de usuarios de Windows / Elegir una bd predeterminada Grupos: administradores, comerciales, contables, jefes, informticos,
Administracin
Seguridad: Funciones de servidor
El grupo elegido ya puede iniciar sesin en SQL Server No tiene privilegios (no puede operar sobre bases de datos, ni realizar otras tareas) Cada bd mantiene una lista de los inicios de sesin que pueden actuar sobre ella
Seleccionar inicios de sesin / grupo creado / botn derecho / Propiedades / Asignacin de usuarios Aparecen dos listas
Superior: Bases de datos Inferior: Funciones definidas para ellas en caso de que ste inicio de sesin pueda utilizarlas
Administracin
Seguridad: Funciones de servidor
El grupo elegido ya puede iniciar sesin en SQL Server No tiene privilegios (no puede operar sobre bases de datos, ni realizar otras tareas) Cada bd mantiene una lista de los inicios de sesin que pueden actuar sobre ella
Seleccionar inicios de sesin / grupo creado / botn derecho / Propiedades / Asignacin de usuarios Aparecen dos listas
Superior: Bases de datos Inferior: Funciones definidas para ellas en caso de que ste inicio de sesin pueda utilizarlas
Administracin
Seguridad: Funciones de servidor
Funciones de bd
Marcar la bd y lo que el usuario puede realizar sobre ella (funciones permitidas a los usuarios) Estndar y definidas por el usuario
Funciones de servidor
Funciones globales: Se aplican a todas las operaciones sobre el servidor en su conjunto y no a una bd concreta Estn predefinidas y son fijas (no se pueden modificar) Se pueden aadir cuentas o inicios de sesin (usuarios o grupos) a la funcin que queramos Administrador del sistema: Funcin sysadmin (cualquier operacin sobre el servidor y cualquier bd)
Administracin
Seguridad: Funciones de servidor
Funcin bulkadmin dbcreator diskadmin processadmin securityadmin serveradmin setupadmin sysadmin Acciones permitidas Insercin masiva de datos Creacin y modificacin de bases de datos Administracin de los archivos en disco Gestin de los procesos asociados a SQL Server Definicin de cuentas de inicio de sesin Configuracin de opciones para el RDBMS Configuracin de registro de servidores Administrador del sistema. Puede efectuar cualquier funcin
Administracin
Seguridad: Definir usuarios
Cuando se crea una bd hereda propiedades de las bd master y model Luego se pueden modificar La bd cuenta ya con un conjunto de tablas, vistas, sp, un usuario dbo, dbo: tiene permisos completos sobre la bd creada Se deben crear otros usuarios que requieran acceso a la bd (leer, escribir, etc.) Carpeta usuarios: Nombre_BD / Seguridad / Usuarios Carpeta: Bases de datos / Seguridad / Inicios de sesin (es otra, a nivel del servidor y no de la BD) Carpeta usuarios: Pueden ser usuarios de Windows, grupos de Windows, inicios de sesin de SQL Server
Administracin
Seguridad: Definir usuarios
Nuevo usuario: Nombre_BD / Seguridad / Usuarios / Botn derecho / Nuevo usuario
Nombre_servidor\Nombre_usuario Nombre_servidor\Nombre_grupo Nombre_servidor\Nombre_inicio_sesin
Aparece lista con las funciones de bd existentes (estndar y definidas por el usuario)
Establecen privilegios que el nuevo usuario tendr sobre la bd public: aparece por defecto db_datareader, db_datawriter: Leer y escribir informacin en la bd
Administracin
Seguridad: Definir usuarios (funciones bd)
Funcin public db_datareader db_datawriter db_denydatareader db_denydatawriter db_accessadmin db_backupoperator db_ddladmin Acciones permitidas Cualquier usuario de la bd tendr los mismos privilegios que si ha accedido de forma pblica Leer informacin de la bd Escribir informacin de la bd
Administracin
Seguridad: Funciones definidas por el usuario
Las funciones estndar de la bd no siempre se ajustan a las necesidades de todas las bd Se pueden crear funciones de seguridad definidas por el usuario Nombre_BD / Seguridad / Funciones / Botn derecho / Nueva funcin de bd
Nombre de la funcin, integrantes (usuarios o grupos) de la funcin, Elementos que pueden protegerse
Aadir todos los objetos existentes en la bd (tablas, vistas, sp, ndices, triggers, funciones, ) sobre los que queramos establecer algn tipo de permiso Limitamos con un gran control, las operaciones que un usuario o grupo pueden efectuar Seleccionar objeto, permitir o denegar tarea Conceder o denegar, select, insercin, modificacin sobre elementos concretos
Administracin
Permisos de las tablas
Seleccionar tabla / Botn derecho / Propiedades Permisos
Limitar para cada tabla las acciones que pueden efectuar los usuarios o los inicios de sesin
Administracin
GRANT
GRANT { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n ] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ WITH GRANT OPTION ] [ AS principal ]
ALL: Casi todos los permisos permission: Nombre de un permiso column: Nombre de una columna de la tabla a la que se le va a conceder permiso class: Especifica la clase del elemento que puede protegerse en el que se va a conceder el permiso securable: Especifica el elemento que puede protegerse en el que se va a conceder el permiso WITH GRANT OPTION: Indica que el receptor tambin podr conceder el permiso especificado a otras entidades de seguridad
Administracin
Permisos http://msdn.microsoft.com/eses/library/ms187965.aspx
Administracin
REVOKE
REVOKE [ GRANT OPTION FOR ] { [ ALL [ PRIVILEGES ] ] | permission [ ( column [ ,...n ] ) ] [ ,...n ] } [ ON [ class :: ] securable ] { TO | FROM } principal [ ,...n ] [ CASCADE] [ AS principal ]
GRANT OPTION FOR: se revocar la capacidad de conceder el permiso especificado ALL: Casi todos los permisos permission: Nombre de un permiso column: Nombre de una columna de la tabla a la que se le va a conceder permiso class: Especifica la clase del elemento que puede protegerse en el que se va a conceder el permiso securable: Especifica el elemento que puede protegerse en el que se va a conceder el permiso CASCADE: el permiso que se va a revocar tambin se revocar de otras entidades de seguridad a las que se han concedido permisos por esta entidad de seguridad
Administracin
DENY
DENY { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n ] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ CASCADE] [ AS principal ]
ALL: Casi todos los permisos permission: Nombre de un permiso column: Nombre de una columna de la tabla a la que se le va a conceder permiso class: Especifica la clase del elemento que puede protegerse en el que se va a conceder el permiso securable: Especifica el elemento que puede protegerse en el que se va a conceder el permiso CASCADE: el permiso que se va a revocar tambin se revocar de otras entidades de seguridad a las que se han concedido permisos por esta entidad de seguridad
Administracin
Mantenimiento
Despus de disear y crear la bd:
Poner en explotacin Plan de mantenimiento Copias de seguridad
Diseo e implementacin
Se efecta en un entorno de desarrollo (no en el entorno de explotacin habitual de la empresa)
Puesta en explotacin
Trasladar toda la bd al servidor definitivo con el que se conectarn clientes que puedan existir (usuarios y aplicaciones) Se se copian los archivos Hay que definir los inicios de sesin y permisos de nuevo Mejor hacer copia de seguridad
Administracin
Asistente para copias de bases de datos
Seleccionar BD / Botn derecho / Tareas / Copiar Base de Datos
Seleccionar servidor de origen (donde est la bd) Seleccionar el modo de autentificacin Seleccionar servidor de destino
2.
Administracin
Asistente para copias de bases de datos
1. 2. Seleccionar una o varias bd a mover
Una marca nos indicar si existe algn conflicto (espacio insuficiente en destino, etc.)
La transferencia: Se detendr si encuentra en el destino los mismos archivos O se reescribir en ellos la nueva informacin Una bd no slo est compuesta por los ficheros de datos y transacciones Puede tener dependencias de otros objetos del servidor de origen
Inicios de sesin Procedimientos almacenados compartidos por varias bd (almacenados en master) Mensajes de error definidos por el usuario, Seleccionar los objetos adicionales a transferir Algunos de estos objetos deben tener dependencias en el destino
Inicios de sesin hacen referencia a usuarios o grupos que deben estar en el servidor de destino
Administracin
Asistente para copias de bases de datos
En cada elemento seleccionado: inicios de sesin, procedimientos almacenados, etc. se puede elegir pasarlos todos al destino o elegirlos individualmente Dar nombre al trabajo que se est realizando Programar la operacin
Ejecutar una sola vez, de manera inmediata Programarse para ejecutarse en un momento dado Programacin peridica (si se tienen dos servidores paralelos con la misma bd, de tal manera que ante un fallo del primario se pasase el control al secundario)
Administracin
Agente de SQL Server
Programacin para la ejecucin peridica de trabajos Almacena trabajos en:
Agente de SQL Server / Trabajos
Los trabajos se pueden poner en marcha, detenerlo, obtener un historial de uso, ver propiedades Se pueden generar desde asistentes
Copia de bases de datos
Administracin
Agente de SQL Server: Programacin de un trabajo
Agente de SQL Server / Trabajos / Seleccionar trabajo / Botn derecho / Propiedades / Programacin Lista de ejecuciones programadas
Periodicidad, la hora, la duracin del proceso
Administracin
Copias de seguridad
Preservar la seguridad de la informacin frente a problemas Se puede hacer con la bd en funcionamiento
Baja el rendimiento
Dispositivos de copia
Donde se van a almacenar las copias de seguridad Fichero en disco (otro disco), cinta (muy habitual), DVD, CD, Unidad de red (provoca mucha carga) NAS: Network Attached Storage (hardware de almacenamiento en red)
Administracin
Copias de seguridad
Dispositivos de copia
Objetos de servidor / Dispositivos de copia de seguridad / Botn derecho / Nuevo dispositivo Nombre del dispositivo, cinta o directorio
Administracin
Copias de seguridad: Crear
Determinar frecuencia y mtodo (acorde al volumen de datos y la importancia La bd sigue activa, pero rendimiento baja Poca informacin y poca actualizaciones: 1 semana Muchas actualizaciones y volumen: copia semanal y copia diferencial diaria, y copia de registro de transacciones Objetos de servidor / Dispositivos de copia de seguridad / Dispositivo de copia creado
Administracin
Copias de seguridad: Crear
Copia completa
Primera vez Con soporte nuevo (nuevo directorio o DVD, ) General:
Seleccionar bd, poner un nombre y un descripcin El conjunto de copia de seguridad expira: Tiempo hasta la nueva copia de seguridad
Opciones:
Sobrescribir todos los conjuntos de copia de seguridad existentes Comprobar copia de seguridad al concluir
Administracin
Copias de seguridad: Crear
Copia diferencial
Base de datos grande, pero pocos movimientos dia Se copian los datos nuevos y las modificaciones de la bd Menor tiempo General:
Tipo: Diferencial Si es el mismo soporte: Anexar al conjunto de copia de seguridad existente Soporte nuevo: Sobrescribir todos los conjuntos de copia de seguridad existentes
Opciones:
Comprobar copia de seguridad al finalizar
Administracin
Copias de seguridad: Crear
Copia registro transacciones
BD: Fichero de datos + Fichero de transacciones Cada vez que se realiza una copia de seguridad completa o diferencia, el registro de transacciones se inicializa A partir de ese momento se inicia un nuevo registro de las operaciones que vayan realizndose sobre la bd Registro de transacciones: Fichero independiente de los datos. Si se estropea el fichero de datos, se puede recuperar la informacin con las copias de seguridad y el archivo de registro de transacciones Si el registro de transacciones estuviera en una unidad separada, ms seguridad Se puede realizar copias de registro de transacciones con ms frecuencia (tamao menor)
Administracin
Copias de seguridad: Recuperar
Si tenemos copias completa de bd, slo podemos recuperar la ltima de esas copias (la ms reciente) Servidor / Botn derecho / Tareas / Restaurar / Base de datos
Seleccionar la bd desde donde se recuperar la copia Se le puede poner un nuevo nombre
La recuperacin no afecte al estado actual de las bd existentes en el servidor
Fecha a que se desea efectuar la recuperacin: la ms reciente posible u otra (dejamos la bd como estaba en ese momento)
Administracin
Copias de seguridad: Recuperar
La recuperacin se realizar automticamente
Primero copia completa, luego diferencial y luego transacciones (si existen en la copia) Dependiendo de lo que tengamos recuperaremos toda la informacin o parte Tras la restauracin el estado de la bd ser el que tena en algn momento anterior al fallo, pero no el que tena en el instante del fallo (si no tenemos las transacciones) Si hay un fallo, primero hacer copia del registro de transacciones y luego recuperarlo todo Con esto se devolver la bd al estado que tena cuando se produjo el fallo, si bien las transacciones sin confirmar sern descartadas
Administracin
Mantenimiento de las bases de datos
A medida que se trabaja con una bd, va creciendo La organizacin de datos e ndices puede no ser la ms optima (espacio inutilizado) Hacer compactacin Mantenimiento Crear plan de mantenimiento
Copias de seguridad Compactacin Comprobar integridad
Administracin
Mantenimiento de las bases de datos
Servidor / Administracin / Planes de mantenimiento / Botn derecho / Nuevo plan Asistente para planes de mantenimiento para la bd elegida
Asignar un nombre al plan, indicar si se utilizar una programacin independiente para cada tarea o una global para todas ellas, lista de tareas de mantenimiento
Administracin
Mantenimiento de las bases de datos
Reducir ocupacin de la bd y mejorar el rendimiento
Reduccin del tamao de la bd Reorganizacin de ndices Limpieza del historial
Orden en que se ejecutarn las tareas elegidas Programacin a utilizar y propiedades de cada tarea
Administracin
Mantenimiento de las bases de datos
Modificar plan de mantenimiento
Servidor / Administracin / Planes de mantenimiento / Seleccionar plan / Botn derecho / Propiedades
Administracin
Trabajos del agente SQL Server
Al definir un plan de mantenimiento Se definen uno o varios trabajos que el Agente SQL tendr que poner en marcha Agente SQL
Habilita las tareas programadas Aparecern las copias de seguridad programadas, los planes de mantenimiento programados Servidor / Agente SQL Server / Seleccionar trabajo / Botn derecho / Propiedades Iniciar, detener, deshabilitar (para que no se vuelva a ejecutar), eliminar trabajo Los trabajos se pueden crear desde aqu, pero es ms fcil crearlos con planes de mantenimiento Una vez creado, es ms fcil modificarlos desde el agente SQL