You are on page 1of 327

SQL

Sistemas Gestores de Bases de Datos


3 CAS IES El Rincn
Agustn Jimnez Guerra

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

Agrupamiento de filas: GROUP BY, HAVING Consultas sobre varias tablas

Instruccin INSERT Instruccin DELETE Instruccin UPDATE

ndice
Creacin de bases de datos Tablas
Relaciones entre tablas Constrains

Vistas Composicin de consultas


Union Intersect Minus o Except

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

Componentes SGBD Relacional

U S U A R I O S

Programa ------------------------SQL ---------------

S.G.B.D
CATLOGO
B.D.

HARDWARE

Componentes SGBD Relacional


SGBD
Programa encargado de manejar y gestionar los datos almacenados en la BD Permiten acceder a los datos de forma lgica, sin atender a como estn stos organizados fsicamente en la BD No se tiene que tener en cuenta el uso de punteros sobre los datos, donde se graban, superficie libre del disco, etc. Programas independiente de la organizacin fsica de los ficheros. Modelo externo de datos: Estructuras de datos que ven los usuarios (Tablas) Modelo interno de datos: Estructuras fsicas que soportan los datos (punteros, ficheros, etc.)

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)

Componentes SGBD Relacional


Catlogo
Tambin llamado diccionario de datos Es un componente del SGBD que posee unas tablas donde se guarda informacin de todas las tablas de la BD (nombres de tablas, campos que tienen, caractersticas de los campos, tipo, tamao, etc.) La informacin se actualiza cada vez que se aade una tabla a la BD Con SQL tambin se puede consultar tablas del catlogo

Componentes SGBD Relacional


SYSTABLES
Tablas y vistas de la base de datos (Tabla, propietario, nmero de campos, ...)

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

Componentes SGBD Relacional


Estas tablas se pueden consultar con el SQL y por ejemplo, conocer:
Que tablas contienen el campo NOMBRE: SELECT TBNAME FROM SYSCOLUMNS WHERE NAME = NOMBRE Que campos tiene la tabla EMPLEADOS: SELECT NAME FROM SYSCOLUMNS WHERE TBNAME = EMPLEADOS Cuantas tablas posee el usuario USER1: SELECT COUNT (*) FROM SYSTABLES WHERE CREATOR = USER1

Con esto se puede ver la estructura de la base de datos. Las tablas que posee, los campos de cada tablas, etc.

Componentes SGBD Relacional


El catlogo se puede consultar con un SELECT No se puede actualizar con: INSERT, UPDATE y DELETE (podra ser peligroso) Para modificar la estructura de tablas, ndices, vistas, etc. se usa: CREATE TABLE, CREATE INDEX, CREATE VIEW, ALTER TABLE, DROP TABLE, DROP INDEX y DROP VIEW.

Aplicaciones del SQL


Consulta y actualizaciones de datos almacenados en tablas relacionales Describir o crear nuevas tablas (definir tablas) y vistas
Generalmente lo realiza el Administrador de la Base de Datos (ABD o DBA)

Gestin de autorizaciones de acceso


Para poder consultar o actualizar una tabla se debe estar autorizado (mediante sentencias SQL)

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

Nombres de tablas o campos


se asignan al crear la BD

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

Tipos de sentencias SQL


Sentencias de manipulacin de datos
DML: Data Manipulation Language Permiten realizar consultas y mantenimientos de datos

Sentencias de definicin de datos


DDL: Data Definition Language Permiten crear objetos nuevos, alterar o destruir objetos existentes (tablas, ndices, vistas, etc.)

Sentencias de control de datos


DCL: Data Control Language Permiten el control de permisos, etc.

Tipos de sentencias SQL


Sentencias de manipulacin de datos
DML: Data Manipulation Language) Permiten realizar consultas y mantenimientos de datos.

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

Tipos de sentencias SQL


Sentencias de definicin de datos
DDL: Data Definition Language Permiten crear objetos nuevos, alterar o destruir objetos existentes (tablas, ndices, vistas, etc.)

CREATE
Crear nuevas tablas, ndices o vistas

DROP
Destruir tablas, ndices o vistas

ALTER
Alterar tablas

Tipos de sentencias SQL


Sentencias de control de datos
DCL: Data Control Language Permiten el control de varios aspectos

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

SELECT: Orden en que se ejecutan las instrucciones


Siempre que se ejecuta un SELECT se obtiene por resultado una tablas que puede tener una fila, varias o ninguna (vaca) 1. FROM Selecciona la tabla de entre todas las tablas de la BD Por ahora es la tabla resultante de la sentencia (la resultante es igual a la tabla original) 2. WHERE Elimina de la tabla resultante los registros que no cumplen la condicin 3. GROUP BY Se forman grupos con las filas de la tabla resultante que tengan valores iguales en las columnas de agrupamiento 4. HAVING Descarta los grupos que no satisfagan la condicin 5. SELECT Se evalan las expresiones de la SELECT para cada grupo; produciendo por cada uno una fila en la tabla resultante final; con tantos valores como expresiones o campos se hayan seleccionado Si los registros no estn agrupados selecciona en cada registro los campos que estn en el SELECT, descartando los dems 6. ORDER BY Presenta la tabla resultante final, clasificada (ordenada) por los campos indicados 7. DISTINCT/ALL Se eliminan los valores de la tabla resultante que sean repetidos o iguales (si se elige DISTINCT). Por defecto es ALL

SELECT CON PREDICADO


Condicin del WHERE Distintos tipos:
Sencillos Complejos
Condiciones de bsqueda en una operacin pueden ser muy complejas

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)

SELECT CON PREDICADO

[WHERE condicin]

Consultas con predicado sencillas

SELECT CON PREDICADO


[WHERE subselect] [WHERE SELECT Col1 [, Col2] [[AS] Alias] FROM Tabla [[AS] Alias] ]

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

Consultas con predicado complejas

SELECT CON PREDICADO


[WHERE Col1 IS [NOT] NULL] [WHERE [ALL] SOME ANY (SELECT Col1 [, Col2] ... FROM Tabla .... ])]

[WHERE expresin1 [NOT] BETWEEN expresin2 AND expresin3]

[WHERE Col1 [NOT] LIKE cte_alfanumrica]

Consultas con predicado complejas

SELECT CON PREDICADO


[WHERE expresin [NOT] IN constante1 [, constante2] ...]

[WHERE expresin [NOT] IN (SELECT Col1 [, Col2] ... FROM Tabla .......)]

[WHERE [NOT] EXIST (SELECT Col1 [, Col2] ... FROM Tabla ... )]

Consultas con predicado complejas

SELECT CON PREDICADO


PREDICADOS SIMPLES: WHERE condicin.
Selecciona las filas en que la condicin es Verdadera

Un operando puede ser una expresin u otra sentencia SELECT (Subselect)


sta debe ir entre parntesis, y producir como resultado un valor nico (tabla de una columna y una fila o ninguna fila) Si se utiliza SELECT no se puede utilizar ORDER BY

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

SELECT CON PREDICADO


BETWEEN
Sirve para hallar si un valor est comprendido entre otros dos, o si no lo est El resultado es Verdadero si el valor de expresin 1 est comprendido entre el de expresin2 y expresin3, ambos inclusive Si expresin1, expresin2 o expresin3 es NULL, el resultado es Desconocido Expresin2 debe ser menor o igual que expresin3
V1 BETWEEN V2 AND V3 V1 NOT BETWEEN V2 AND V3 (V1>=V2) AND (V1<=V3) (V1<V2) OR (V1>V3)

LIKE
Sirve para buscar combinaciones de caracteres que cumplan ciertas condiciones En la constante alfanumrica se pueden utilizar mscaras

_ Sustituye a un carcter cualquiera % Sustituye a una cadena de caracteres cualquiera


Si el valor de nombre_columna est comprendido en la constante alfanumrica el resultado es V Si nombre_columna es NULL, el resultado es D Si nombre_columna y constante alfanumrica son Null, el resultado es V

SELECT CON PREDICADO


IN Sirve para preguntar si el resultado de una expresin est incluido en una lista de valores La lista de valores se puede especificar uno a uno, o se puede poner una sentencia Select subordinada que de una tabla de una columna, de donde se cogen los valores a comparar

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)

Longitud variable (los datos tienen una longitud mnima y mxima):


VARCHAR(n): n es la longitud (entre 9 y 32704).

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)

Las funciones pueden ser


Escalares
El resultado se obtiene a partir de un valor nico Dentro de las funciones escalares se distinguen tres grupos: Convertir valores, Funciones de tratamiento de cadenas y funciones de tratamiento de fechas

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:

Tipo argumento Alfanumrico Entero corto Entero largo Decimal Flotante

Longitud Tamao 2 4 p 8

SUBSTR: Extrae caracteres de una cadena.


SUBSTR (expresin1, expresin2 [, expresin3]) expresin1 es la cadena desde la que se va a extraer. expresin2 es la posicin a partir de la cual se va a extraer. expresin3 es el nmero de caracteres a extraer

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

TIME: Convierte una cadena de caracteres a: hh:mm:ss


TIME (expresin)

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

Para inicializar una variable fecha, se inicializa como si fuera alfanumrica

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)

MONTH: Obtener el valor mes de una fecha


MONTH (expresin)

DAY: Obtener el valor da de una fecha


DAY (expresin)

HOUR: Obtener el valor hora de una hora


HOUR (expresin)

MINUTE: Obtener el valor minuto de una hora


MINUTE (expresin)

SECOND: Obtener el valor segundo de una hora


SECOND (expresin)

MICROSECOND: Obtener el valor microsegundo de una hora


MICROSECOND (expresin)

DAYS: Das transcurridos desde el 1/1/0001 hasta la fecha actual


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

Operaciones con horas


Se pueden realizar las siguientes operaciones: Hora1 Hora2 Hora1 + duracin Hora1 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.

MAX: Halla el mximo entre los valores de un campo


MAX (expresin) El resultado es del mismo tipo que la expresin

MIN: Halla el mnimo entre los valores de un campo


MIN (expresin) El resultado es del mismo tipo que la expresin

SUM: Calcula la suma de los valores de un campo


SUM (expresin) SUM([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]

Consultas con agrupamiento de filas

SELECT SOBRE VARIAS TABLAS


Se pueden manejar varias tablas en una sola sentencia SELECT Si interviene ms de una tabla es una instruccin SQL, para referirse a un campo de una tabla (puesto que pueden haber campos con el mismo nombre en varias tablas) se indica a que tabla pertenece

Propietario.Tabla.Columna
Esta operacin tambin se denomina JOIN

SELECT SOBRE VARIAS TABLAS


FROM

Se especifican las distintas tablas


WHERE

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

SELECT SOBRE VARIAS TABLAS


Despus de formar el producto cartesiano de las dos tablas, lo normal es quedarse slo con las filas que cumplen unas determinadas condiciones

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

SELECT SOBRE VARIAS TABLAS

Con la sentencia SELECT podemos seleccionar de dos o ms tablas

SELECT columnas FROM tabla1, tabla2, ... tablaN

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

SELECT SOBRE VARIAS TABLAS

SELECT SOBRE VARIAS TABLAS


Si existe una relacin de 1 a N entre las tablas, lo que nos interesa es que, por cada fila de la tabla del lado N (PIEZAS) aparezca la fila relacionada en la tabla del lado 1 (FABRICANTES)

Queremos que en el resultado slo aparezcan las filas sombreadas cmo podemos hacer esto?

SELECT SOBRE VARIAS TABLAS

SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo

A esto se le llama la condicin de emparejamiento de tablas

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

SELECT SOBRE VARIAS TABLAS

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

SELECT SOBRE VARIAS TABLAS


En el SELECT se pueden especificar nombres de columnas de cualquiera de las tablas especificadas en la clusula FROM

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

SELECT SOBRE VARIAS TABLAS

SELECT SOBRE VARIAS TABLAS


INNER JOIN
Existe otra manera de realizar los emparejamiento. En lugar de utilizar una condicin de emparejamiento podemos utilizar la clusula INNER JOIN.
SELECT columnas FROM tabla1 INNER JOIN tabla 2 ON condicin_emparejamiento SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo EQUIVALENTES SELECT * FROM Piezas INNER JOIN Fabricantes ON Piezas.Fabricante = Fabricantes.Codigo

SELECT SOBRE VARIAS TABLAS


La sentencia JOIN permite combinar registros de dos o ms tablas en una base de datos relacional. Tipos de JOIN:

Interno Externo Cruzado Self-join (una tabla puede unirse consigo misma en casos especiales)

SELECT SOBRE VARIAS TABLAS


Inner join (interno)

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

Forma explcita Forma implcita

SELECT SOBRE VARIAS TABLAS


Inner join (interno) explcito
SELECT * FROM Empleado INNER JOIN Departamento ON Empleado.IDDepartamento=Departamento.IDDepartamento

Inner join (interno) implcito


SELECT * FROM Empleado, Departamento WHERE Empleado.IDDepartamento=Departamento.IDDepartamento

SELECT SOBRE VARIAS TABLAS


Inner join (interno). Otra clasificacin

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

Los columnas con el mismo valor se muestran slo 1 vez


SELECT * FROM Empleado NATURAL JOIN Departamento

Cruzadas
Producto cartesiano de todos los registros de las 2 tablas
SELECT * FROM Empleado CROSS JOIN Departamento SELECT * FROM Empleado, Departamento

SELECT SOBRE VARIAS TABLAS


OUTER JOIN
Supongamos lo siguiente:

SELECT SOBRE VARIAS TABLAS


OUTER JOIN
Si juntamos las dos tablas de la siguiente manera:
SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo

El resultado ser:

dnde est la tuerca?

SELECT SOBRE VARIAS TABLAS


OUTER JOIN
El registro de la tuerca no aparece porque no cumple la condicin de emparejamiento (Fabricante es NULL). Qu hacemos si queremos que aparezcan todos los registros de una tabla, a pesar de que no cumplan la condicin de emparejamiento? OUTER JOIN.
SELECT columnas FROM tabla1 LEFT OUTER JOIN tabla 2 ON condicin_emparejamiento SELECT columnas FROM tabla1 RIGHT OUTER JOIN tabla 2 ON condicin_emparejamiento

SELECT SOBRE VARIAS TABLAS


OUTER JOIN
Si realizamos la siguiente consulta:
SELECT * FROM Piezas LEFT OUTER JOIN Fabricantes ON Piezas.Fabricante = Fabricantes.Codigo

El resultado ser:

SELECT SOBRE VARIAS TABLAS


OUTER JOIN
La consulta coge todas las filas de la tabla de la izquierda (Piezas) y las junta con la otra tabla. Por cada fila de la tabla izquierda: Si la fila cumple la condicin de emparejamiento, las dos filas se juntan como si fuese una INNER JOIN. Si la fila no cumple la condicin de emparejamiento, se ponen los datos de la fila correspondiente a la tabla de la izquierda y el resto de los datos se dejan a NULL. La RIGHT OUTER JOIN es igual, pero con la tabla de la derecha. Tambin existe un FULL OUTER JOIN, que coge todas las filas de ambas tablas.

SELECT SOBRE VARIAS TABLAS


OUTER JOIN Pueden abreviarse:
LEFT OUTER JOIN -> LEFT JOIN RIGHT OUTER JOIN -> RIGHT JOIN FULL OUTER JOIN -> FULL JOIN

INSERT
Aadir Registros

Aadir una o ms filas completas a una tabla.


Una fila INSERT INTO Tabla [(Col1, Col2, ...)] VALUES (Valor1, Valor2, ...)

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

Varias filas INSERT INTO Tabla[(Col1, Col2, ...)] SELECT .....

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

INSERT INTO Tabla[(Col1, Col2, ...)] SELECT .....

Insertado de registros

DELETE
Borrar Registros

Borrar filas de una tabla (la fila completa no parcialmente)


DELETE FROM Tabla [Nombre_Local] [WHERE condicin]

Si no se pone la clusula WHERE se borran todos los registros de la tabla (no la tabla)

DELETE

DELETE FROM Tabla [Nombre_Local] [WHERE condicin]

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

UPDATE Tabla [Nombre_Local] SET Col1=expresin1 [,Col2=expresin2]... [WHERE condicin]

Modificacin de registros

Administrar Bases de Datos


La base de trabajo es donde se organiza toda la informacin en SQL Server. sta es una agrupacin de tablas, vistas, procedimientos almacenados, funciones, etc., un servidor SQL Server puede contener multitud de bases de datos y cada una de ellas millones de objetos.

Crear nueva base de datos


Las bases de datos las podemos crear de diferentes formas, lo ms normal es que utilicemos el administrador corporativo (SQL 2000-2005), managament console (SQL 2008) para crearlas pero se pueden crear desde Transact-SQL o desde un programa realizado en VB con SQL-DMO. Todas las bases de datos que creamos en SQL Server se crean a partir de un modelo que es la base de datos Model que instala SQL Server, esta base de datos le sirve a SQL Server como ejemplo y modelo para crear las nuevas bases de datos.

Crear nueva base de datos


1. Desde el rbol de la izquierda, abrimos los nodos y nos posicionamos encima del nodo bases de datos, con el botn derecho del ratn seleccionamos Nueva base de datos. 2. En esta primera pantalla ponemos el nombre de la base de datos y el orden de intercalacin si queremos cambiarlo para hacerla compatible la base de datos con otras bases de datos existentes en otros servidores. Por defecto deja el orden de intercalacin del SQL Server especificado en el proceso de instalacin. 3. Pulsamos la siguiente opcin, Archivo de datos para seleccionar la ruta donde estar alojado el fichero fsico de datos, por defecto estar en el directorio de instalacin de SQL Server en MSSQL\Data. En esta opcin tambin le daremos el tamao del fichero fsico o si queremos que se auto incremente a medida que la base de datos crezca. 4. La siguiente opcin, Registro de transacciones es similar al punto 3 solo que en lugar de especificar las opciones para el fichero de datos lo hacemos para el fichero de transacciones (fichero de registro o log).

Crear nueva base de datos


USE master GO CREATE DATABASE Pruebas ON ( NAME = Pruebas_data, FILENAME = 'c:\program files\microsoft sql server\mssql\data\pruebas_data.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Pruebas_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\pruebas_log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )

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.

Crear nueva base de datos


Sintaxis: NAME = Nombre_del_archivo_lgico, FILENAME = Nombre_del_archivo_en_el_sistema (path completo) SIZE = TAMAO (inicial) MAXSIZE = (tamao_mximo | UNLIMITED)
(Tamao mximo que puede tener la base de datos, UNLIMITED = tamao ilimitado)

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

ARCHIVOS BASE DE DATOS


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.

ARCHIVOS BASE DE DATOS

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

LOG ON (ARCHIVO LOG)

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

Crear una base de datos sin especificar archivos

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

Configurar la Base de Datos

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.

Mnica Frey Grimm

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.

Copia de Seguridad utilizando Transact-SQL


USE master EXEC sp_addumpdevice 'disk', 'pruebas_1', 'G:\microsoft sql server espanol\MSSQL$TORMENTA\BACKUP\BACKUP.dat' -- Backup de la base de datos BACKUP DATABASE PRUEBAS TO Pruebas_1

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.

Restaurar copias de seguridad

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.

Restaurar copias de seguridad


En esta pantalla, si restauramos la base de datos desde un fichero, seleccionamos desde dispositivo, pulsamos el botn dispositivo y en la siguiente pantalla pulsamos agregar y seleccionamos el fichero de copias de seguridad que queremos restaurar. Las opciones de restauracin son las mismas que las de copias, podemos restaurar la base de datos:
Completa. Diferencial. Registro de Transacciones.

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.

Restaurar copias de seguridad


Del mismo modo que podemos hacer copias de seguridad desde cdigo transact-SQL o SQL-DMO, podemos restaurar bases de datos. La instruccin a utilizar es Restore database , ste al igual que el Backup son amplios en parmetros y modos de uso por ese motivo lo ms recomendable es mirar la ayuda de SQL Server (libros en pantalla) donde se puede encontrar un apartado completo dedicado al transact-SQL (Referencia de Transact-SQL)

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

Col1, Col2, ...:

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

ALTER TABLE tabla

DROP COLUMN col1 ALTER COLUMN col1 ADD col2 tipo

(Borrar columna) (Modificar columna) (Aadir columna)

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

CONSULTAR Y ACTUALIZAR VISTA


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

UNION SELECT __________ UNION SELECT __________

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

UNION ALL. SELECT __________ UNION ALL SELECT __________

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

INTERSECT SELECT __________ INTERSECT SELECT __________

Halla los registros comunes a dos tablas Similar al operador AND

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)

Mecanismo para acelerar las bsquedas ndice

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)

Si la tabla tiene muchos registros esto es muy lento

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

NDICES: CREATE INDEX


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

NDICES: CREATE INDEX


CREATE [UNIQUE] INDEX ndice ON tabla (Col1 [ASC / DESC] [, Col2 [ASC/DESC] ] ...) [CLUSTERED] [WITH CHECK OPTION]

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

WITH CHECK OPTION

NDICES: CREATE INDEX


Ejemplo: CREATE TABLE t1 (a int, b int, c AS a/b); CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c); INSERT INTO t1 VALUES (1, 0);

NDICES: CREATE INDEX


Ejemplo: Crear un ndice no agrupado sencillo CREATE INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (VendorID);

NDICES: CREATE INDEX


Ejemplo: Crear un ndice compuesto no agrupado
CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD ON Sales.SalesPerson (SalesQuota, SalesYTD);

NDICES: CREATE INDEX


Ejemplo: Crear un ndice no agrupado nico CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure(Name);

NDICES: DROP INDEX

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

CUANDO USAR UN NDICE

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)

SINNIMOS: CREATE SYNONYM


Con esta orden se crea un sinnimo de una tabla CREATE SYNONYM nombre_sinnimo FOR Tabla A partir del momento de la creacin del sinnimo en cualquier sentencia SQL se puede usar indistintamente el nombre de la tabla o el nombre del sinnimo Se pueden crear sinnimos tambin para: Vistas, procedimientos almacenados, funciones,

SINNIMOS: DROP SYNONYM


Esta instruccin se usa para borrar un sinnimo de una tabla del catlogo de la base de datos DROP SYNONYM nombre_sinnimo

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

Transact SQL: Aplicaciones


Utilizacin de tipos de datos Utilizacin de variables Estructuras de control del flujo de ejecucin Funciones predefinidas No son aplicaciones ejecutables independientes, sino elementos que el servidor de datos puede ejecutar

Transact SQL: Aplicaciones


Procedimientos almacenados Desencadenadores Funciones de usuario Ejecutar un proceso Desde un cliente hacer llamadas al servidor de base de datos NO se puede hacer
Disear una interfaz de usuario Solicitar de forma directa informacin al usuario

Transact SQL: Aplicaciones


Procedimientos almacenados
Programa que se ejecuta bajo demanda

Desencadenadores, disparadores o Triggers


El cdigo se ejecuta automticamente en el momento que se produce un cierto evento

Funciones
Programa que realiza una tarea determinada bajo demanda

Transact SQL: Tipos de datos


No slo se puede trabajar con informacin alojada en columnas de tablas o vistas Datos almacenados temporalmente en variables

Transact SQL: Tipos de datos


Tinyint (entero 0, 255) Smallint (entero -32768, 32767) Int (entero positivos y negativos grandes) Bigint (entero positivos y negativos muy grandes) Smallmoney (decimal -214758,3648; 214748,3647) Money (decimal grandes) Real (decimal -3,4E+38; 3,4E+38) Float (decimal -1,79E+308; 1,79E+308) Bit (0, 1)

Transact SQL: Tipos de datos


Decimal (decimales) Char (longitud fija) Varchar (longitud variable con un mximo) Text (longitud variable sin mximo) Binary Varbinary Image Smalldatetime (fecha y hora 1/1/1900; 6/6/2079) Datetime (fecha y hora 1/1/1753; 31/12/9999)

Transact SQL: Tipos de datos


Nuevos sql server 2008
Date (fecha sin hora) Time (hora sin fecha) Datetime2 (igual a datetime pero con ms fechas) Datetimeoffset (fecha, hora y zona horaria) Hierarchyid (relaciones entre filas de una tabla) Geometry (coordenadas espaciales sobre un plano) Gegraphy (coordenadas espaciales sobre una superficie elipsoidal)

Transact SQL: Tipos de datos


No se pueden usar en columnas de una tabla pero s en variables
Cursor
Almacena un cursor de datos asociado a una consulta o una vista Permite acceso a los datos fila a fila

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 (para lgica de proceso)


Se puede necesitar trabajar con datos temporales (variable) No se almacenan en la bd Variable: Identificador, nombre asociado a una posicin de memoria Almacenar valor (asignacin), recuperarlo (lectura)

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

El valor de una variable


Puede almacenarse en una tabla Asignarlo a otra variable Ser devuelto como resultado de una funcin o sp

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: Control de flujo


SQL
Consulta o manipulacin de datos sobre una tabla, vista, varias tablas, algunas filas Se ejecuta en un solo paso de manera incondicional No se controla la operacin fila a fila La sentencia se ejecuta en el momento que se enva al servidor

Transact SQL: Control de flujo


Transact SQL
Se puede desviar el flujo secuencial de ejecucin segn queramos Alterar el flujo de ejecucin basndonos en una expresin lgica (condicional) IF/ELSE Que el flujo recorra varias veces las mismas sentencias (bucle) WHILE, WAITFOR Desviar el flujo de ejecucin a otro punto (salto) GOTO, BREAK, CONTINUE Cuando la sentencia de control afecta no solo a la siguiente sentencia, sino a un grupo: BEGIN/END

Transact SQL:Variables
Programa 4
USE temple DECLARE @contador smallint SELECT @contador = 1 WHILE @contador !>10
mientras contador no sea mayor que 10

BEGIN PRINT @contador SELECT @contador = @contador + 1 END

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

Desplazamiento libre (a cualquier fila)


DECLARE CursorNumem SCROLL 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

Transact SQL: Funciones


Realizan tareas concretas (no hay que programarlas) Cdigo con un nombre, que para ejecutarlo hay que llamarlo y pasarle los parmetros si son necesarios Existen funciones predefinidas y globales Se pueden crear otras nuevas: funciones de usuario

Transact SQL: Funciones


Algunas es necesario pasarles parmetros Algunas devuelven un valor o un objeto Tipos
Matemticas De fecha De cadena Colectivas Estadsticas

Transact SQL: Funciones


Funciones estadsticas
Operan sobre un conjunto de datos con el fin de obtener datos estadsticos
Mximo, mnimo, suma, media, nmero de valores, varianza, desviacin tpica max, min, sum, avg, count, var, stdev SELECT FUNCION(campo) FROM tabla / vista

Transact SQL: Funciones


Programa 6
USE temple SELECT COUNT(numem), MAX(salar), MIN(salar) FROM temple DECLARE @salariomaximo money SELECT @salariomaximo = MAX(salar) FROM temple SELECT numem, nomem, salar FROM temple WHERE salar=@salariomaximo

Transact SQL: Funciones


Funciones matemticas
Operadores aritmticos Funciones bsicas coseno, seno, tangente, raz cuadrada, potencia, logaritmo, redondear nmeros, abs, acos, asin atan, atn2, ceiling, cos, cot, degrees, exp floor, log, log10, pi, power, radians, rand, round, sign, sin, sqrt, square, tan cast y convert: convertir datos numricos en cadena de caracteres

Transact SQL: Funciones


Programa 7
DECLARE @exponente smallint SELECT @exponente = 0 WHILE @exponente !> 8 BEGIN PRINT 2 elevado a + CAST(@exponente AS CHAR) + = + CAST(POWER(2, @exponente) AS CHAR) SELECT @exponente = @exponente + 1 END

Transact SQL: Funciones


Funciones de cadena
Cadena: secuencia de caracteres Obtener n caracteres, eliminar espacios sobrantes, invertir la secuencia, convertir a maysculas y minsculas, extraer caracteres o subcadenas, reemplazar caracteres ascii, char, charindex, difference, left, len, lower, ltrim, nchar, patindex, quotename, replace, replicate, reverse, right, rtrim, soundex, space, str, stuff, substring, unicode upper

Transact SQL: Funciones


Programa 8
USE temple SELECT numem, SUBSTR(nomem, PATINDEX (% %, nomem) + 1, LEN (nomem) AS Apellidos empleado Obtiene los apellidos del empleados: juan garca garca garca garca

Transact SQL: Funciones


Otras funciones:
De fecha:
http://msdn.microsoft.com/es-es/library/ms186724.aspx

De conjunto de filas:
containstable, freetexttable, opendatasource, openquery, openrowset, openxml

De seguridad:
http://msdn.microsoft.com/es-es/library/ms186236.aspx

Transact SQL: Funciones


Funciones definidas por el usuario
Existen funciones de carcter general El usuario puede crear otras funciones ms especficas Grupo de sentencias Transact SQL con un identificador (nombre funcin) Se ejecutan llamando al identificador

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

Liceo 2000 SQL Server 2000

Mnica Frey Grimm

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

Permite cancelar en forma parcial o total, una operacin INSERT


INSTEAD OF UPDATE

Brinda la posibilidad de controlar los cambios antes de que se apliquen a los datos y decidir por ltimo cuales aplicar
INSTEAD OF DELETE

Permite evitar la eliminacin de filas especficas sin necesidad de cancelar transacciones

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

Slo pueden crearse escribiendo cdigo


Desde el Management Studio con una consulta SQL Desde una tabla o vista / Nuevo desencadenador Desde el Analizador de consultas

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

Utilidad principal triggers, mantener integridad de los datos


Verificando que los datos insertados o modificados son vlidos: Validar informacin Al eliminar una fila no se rompen relaciones entre datos Esto se puede realizar tambin mediante restricciones CHECK, claves UNIQUE, referenciad de integridad entre tablas En otros caso utilizar Triggers Se lanza antes de hacer la grabacin y en el propio trigger se puede hacer que no se grabe

TRIGGERS
Actualizacin vistas

Facilita la actualizacin de una vista en la que participan mltiples tablas

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

Creamos tres trigger de prueba para modificar su orden de ejecucin


CREATE TRIGGER tr1_Customers ON Customers AFTER UPDATE AS PRINT 'Este es el desencadenador tr1' CREATE TRIGGER tr2_Customers ON Customers AFTER UPDATE AS PRINT 'Este es el desencadenador tr2'

TRIGGERS
Determinacin del orden de ejecucin
CREATE TRIGGER tr3_Customers ON Customers AFTER UPDATE AS PRINT 'Este es el desencadenador tr3'

Probamos el orden de salida con una operacin simulada


UPDATE Customers SET ContactName = ContactName

Indicamos cul ser el primer trigger y el ltimo en ejecutarse


-- Indica que el desencadenador tr3 ser el primero en ejecutarse EXEC sp_settriggerorder 'tr3_Customers', 'FIRST', 'UPDATE' -- Indica que el desencadenador tr2 ser el primero en ejecutarse EXEC sp_settriggerorder 'tr2_Customers', 'LAST', 'UPDATE'

Probamos el orden de salida con la operacin simulada Qu ocurre?


UPDATE Customers SET ContactName = ContactName

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

PROCEDIMIENTOS ALMACENADOS: BENEFICIOS


Instrucciones precompiladas
La primera vez que se ejecuta el SP, SQL Server crea y almacena en memoria un plan de ejecucin que volver a usar cada vez que se ejecute el SP Se ejecutan mucho ms rpidos que una instruccin SQL (se almacenan ya compilados) SQL Server no tiene ms que ejecutar el cdigo, sin necesidad de efectuar un anlisis sintctico y una compilacin previa

PROCEDIMIENTOS ALMACENADOS: BENEFICIOS


Optimizan el trfico en la red
Cuando ejecutamos un SP que contiene muchas instrucciones SQL hacemos una nica llamada al SQL Server indicando el nombre del procedimiento, no cada instruccin por separado

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

PROCEDIMIENTOS ALMACENADOS: BENEFICIOS


Programacin modular
Todas las instrucciones que conforman el SP se ejecutarn en el servidor como un todo Se puede incluir lgica condicional, mediante las instrucciones de control de flujo (IF..ELSE, WHILE) disponibles en Transact-SQL Tanto para recibir datos como para devolverlos a la aplicacin que los llama Un usuario puede no tener muchos conocimientos de SQL y se le puede facilitar el trabajo mediante SP (no tener que poner siempre la instruccin SQL) Se ejecutan a peticin del usuario o las aplicaciones, aunque podemos configurarlos para que se ejecuten automticamente al iniciarse SQL Server

Pueden usar parmetros

Ejecucin automtica

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados del sistema Procedimientos almacenados definidos por el usuario Procedimientos almacenados temporales Procedimientos almacenados extendidos

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados del sistema
Se crean automticamente en las bases de datos del sistema durante la instalacin Son una forma de interactuar con las tablas del sistema Para casi todas las tareas administrativas que se realizan en el SQL Server hay un SP El nombre de todos los SP de sistema globales tiene el prefijo sp_ Se pueden ejecutar desde cualquier BD

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados del sistema
USE Northwind GO sp_helpdb

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados definidos por el usuario
Para implementar la lgica de negocio Puede involucrar mltiples instrucciones y condiciones La aplicacin solo llamara al SP y no tendra que ejecutar el conjunto de resultados por separado Se crean con la instruccin CREATE PROCEDURE y se almacena en la base de datos actual Los nombres deben ser nicos Si creamos un procedimiento en la tabla master con el prefjo sp_, este SP ser accesible desde cualquier base de datos Si creamos un SP con el prefijo sp_ en nuestra base de datos y existe uno igual en la master, se ejecutar el de la base de datos y solo en caso que no existiera ejecutara el de la master

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados definidos por el usuario
USE Northwind USE Northwind

CREATE PROCEDURE sp_MostrarBaseDeDatos AS SELECT Northwind USE master

EXEC sp_MostrarBaseDeDatos

USE Master CREATE PROCEDURE sp_MostrarBaseDeDatos AS SELECT Master EXEC sp_MostrarBaseDeDatos

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados temporales
Son creados por los usuarios Se almacenan en la tempdb SQL Server los elimina automticamente al desconectar la sesin en la que han sido creados Usan el prefijo # para los locales y el prefijo ## para los globales

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados temporales
USE Northwind CREATE PROCEDURE #leerNombreBaseDeDatos AS SELECT db_name() AS nombre_bd Ejecute este cdigo y expanda la carpeta Procedimientos Almacenados de la tabla tempdb y estar nuestro SP. Cierre la ventana del Analizador de Consultas donde cre el SP y vuelve a la carpeta de la tempdb.

PROCEDIMIENTOS ALMACENADOS: TIPOS


Procedimientos almacenados extendidos
Programas DLL escritos en C++ Extienden capacidades de SQL Server Estn en la base de datos master Su nombre empieza por xp_ Se utilizan para fines administrativos El usuario puede crear SP de este tipo, programndolo en C++ y luego aadindolo a SQL Server utilizando el SP del sistema sp_addextendedproc

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

Devolver resultados desde el sp 1. Cdigo de retorno del sp RETURN(valor)


valor: constante, consulta SQL, expresin

2. Usar parmetros de salida (el sp devuelve un dato OUTPUT

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

CREATE PROCEDURE Totaliza @ISBN char(13) 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

Simplifican la obtencin de datos de mltiples tablas


Similar a las vistas, pero con parmetros

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

Una funcin sencilla para obtener un nmero elevado al cubo


CREATE FUNCTION dbo.Cubo( @fNumero float) RETURNS float AS BEGIN RETURN(@fNumero * @fNumero * @fNumero) END

Ejecutamos la funcin para calcular el cubo de 5.


SELECT dbo.Cubo(5)

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

MEGA865\Mnica DESDE Analizador de consultas SQL

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

Una funcin que devuelve los clientes de una pas determinado


CREATE FUNCTION dbo.ClientesDelPais (@pais varchar(15)) RETURNS TABLE AS RETURN ( SELECT * FROM Customers WHERE Country = @pais )

Ejecutamos la funcin para ver los clientes de Espaa


SELECT * FROM dbo.ClientesDelPais('Spain')

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

SQL Server Configuration Manager


Configurar los distintos servicios de SQL Server

SQL Managament Studio


Configuracin de servicios y muchas otras tareas

Administracin: SQL Server Configuration Manager


SQL Server se ejecuta como un servicio Se pondr en marca automticamente (al iniciar el sistema) o manualmente Inicio servicio: automticamente, manualmente, deshabilitado (no se pondr en marcha ni automtica, ni manualmente) Servicio: MSSQLServer
Instancias del servidor: Nombre_Servidor + Nombre_Instancia

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

Administracin: SQL Server Configuration Manager


Inicio / Todos los programas / SQL Server 2008 / Herramientas de configuracin / SQL Server Configuration Manager Se vern:
Servicios instalados Estado: Ejecucin / Detenido / Pausado (Flecha verde / Cuadrado rojo / Dos rayas rojas) Modo de inicio Otras propiedades

Administracin: SQL Server Configuration Manager


Servicios
MSSQLServer (instancia por defecto) MSSQLServer Expres (Otra instancia instalada)

Estados de los servicios


Iniciado: Servicio en funcionamiento (acceso de los clientes a las bd) Pausado: Servicio detenido temporalmente, se puede reanudar, conservando el estado anterior Detenido: Se desaloja de memoria, al volver a iniciarlo toma sus valores por defecto Botones: Iniciar, Detener, Pausar, Reunudar, Reiniciar

Administracin: SQL Server Configuration Manager


Modo de inicio: Automticamente, manualmente, deshabilitado
Botn derecho / Propiedades / Servicio / Modo de inicio

Servicio Agente de SQL Server


Se encarga de supervisar, cuando est en marcha, el funcionamiento del motor de SQL Server (servidor de bases de datos) Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en marcha Permite automatizar tareas
Realizar copias de seguridad a una hora dada Realizar trabajos de forma peridica

Administracin: SQL Server Configuration Manager


Modo de inicio: Automticamente, manualmente, deshabilitado
Botn derecho / Propiedades / Servicio / Modo de inicio

Servicio Agente de SQL Server


Se encarga de supervisar, cuando est en marcha, el funcionamiento del motor de SQL Server (servidor de bases de datos) Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en marcha Permite automatizar tareas
Realizar copias de seguridad a una hora dada Realizar trabajos de forma peridica

Administracin: SQL Server Managament Studio


Herramienta de administracin de SQL Server
Completa Inicio / Todos los programas / Microsoft SQL Server 2008 / SQL Server Managament Studio Conectar con el servidor:
Nombre del servidor / Autentificacin de windows o mixta

Administracin: SQL Server Managament Studio


Creacin de grupos
Podemos administrar varias instancias de SQL Server Pueden ser:
Servidor con el que se ha iniciado sesin Servidores virtuales en una misma mquina Servidores remotos Servidores registrados (Ver / Servidores registrados), con los que se ha establecido conexin

Administracin: SQL Server Managament Studio


Creacin de grupos
Servidores registrados
Los servidores con los cules se ha establecido conexin se pueden clasificar en grupos funcionales Al principio no existen grupos (los creamos) En cada grupo aparecen los nombres de los servidores Dependiendo del tamao de la empresa y nmero de servidores crear subgrupos por pas, sucursal,
Amrica, Europa (Espaa, Alemania, ..) , Asia

Administracin: SQL Server Managament Studio


Creacin de grupos
Carpetas de un servidor
Cada grupo contiene servidores Cada servidor aloja elementos clasificados en carpetas
Bases de datos, Seguridad, Objetos de servidor, Replicacin, Administracin, Agente de SQL Server Al elegir una carpeta aparece su contenido

Asistentes
Herramientas grficas de administracin Simplifican tareas (creacin de una bd, ndice, vista, , copia de seguridad, )

Asistentes o plantillas
Ver / Explorador de plantillas

Administracin: SQL Server Managament Studio


Asistentes
Herramientas grficas de administracin Simplifican tareas (creacin de una bd, ndice, vista, , copia de seguridad, )

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

El proceso de autorizacin necesita saber


Funciones que puede realizar el usuario autentificado Derechos que tiene sobre cada bd

Usuarios y grupos de Windows + Funciones del servidor de SQL Server

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

Marcar la bd y la funciones que se desea para ese usuario o grupo

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

Marcar la bd y la funciones de bd que se desea para ese usuario o grupo

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

Transferencia de datos (2 mtodos) 1. Mtodo de separar y adjuntar


Rpido, eficiente La bd debe estar sin conexin

2.

Mtodo de objeto de administracin de SQL


Ms lento Permite mantener la bd de origen en funcionamiento (sin dejar de dar servicio en ningn momento)

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)

Resumen del proceso

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

Se pueden crear nuevos trabajos


Agente de SQL Server / Trabajos / Botn derecho / Nuevo trabajo Ejecucin de una serie de instrucciones Transact-SQL Hacer una rplica de la bd

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

El Agente de SQL debe estar activo

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

You might also like