Está en la página 1de 68

1

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)

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









2

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)

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

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

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.

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.

3

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)

Componentes de una sentencia SQL





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.

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.

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

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

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

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
Seleccionar datos de una tabla
Se eligen los campos a ser seleccionados Puede ser una columna, varias o todas
Tambin se admiten expresiones
5

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

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

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)


[WHERE condicin]
Consultas con predicado sencillas
[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
[WHERE Col1 IS [NOT] NULL]

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

[WHERE expresin1 [NOT] BETWEEN expresin2 AND expresin3]

[WHERE Col1 [NOT] LIKE cte_alfanumrica]

Consultas con predicado complejas

[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

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
7

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

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>=V2) AND (V1<=V3)
V1 NOT BETWEEN V2 AND 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

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
TIPOS DE DATOS
INTEGER: -2147483647, +2147483647
8

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



http://office.microsoft.com/es- es/access/HA012315043082.aspx
http://office.microsoft.com/es- es/access/CH010499573082.aspx

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

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 de tratamiento de cadenas
LENGHT: Obtiene la longitud de un valor
LENGHT (expresin)
El tamao del dato ser:
Tipo argumento Longitud
Alfanumrico Tamao
Entero corto 2
Entero largo 4
Decimal p
Flotante 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

10

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 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)
TIMESTAMP: Convierte una cadena de caracteres a: yyyy/mm/dd/hh/mm/ss/mmmmmm
TIMESTAMP (expresin)
Los formatos que pueden tener los datos son:

Formato Fecha Formato Hora

Tipo
aaaa-mm-dd hh.mm.ss ISO
mm/dd/aaaa hh.mm AM hh.mm PM


USA
dd.mm.aaaa hh.mm.ss EUR
aaaa-mm-dd hh:mm:ss JIS

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

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)

11

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

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

COUNT: Halla cuantos valores hay en una coleccin
COUNT (expresin)
12

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

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

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

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

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

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


















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)








14

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

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

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
















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

15

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)

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

OUTER JOIN

Supongamos lo siguiente:









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





16

dnde est la tuerca?

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

Si realizamos la siguiente consulta:

SELECT * FROM Piezas LEFT OUTER JOIN Fabricantes
ON Piezas.Fabricante = Fabricantes.Codigo

El resultado ser:







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.

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
17

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 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 FROM Tabla [Nombre_Local] [WHEREcondicin]

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

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

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

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 este cdigo utilizaremos el Analizador de consultas (Query Analyzer)

ON (ARCHIVO BD)
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
PRIMARY
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
19

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.

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

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'',
21

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

Copiar el registro de transacciones.

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.

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.






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

Esta tarea queda guardad en la opcin del Agente de SQL Server trabajos.

Si se pueden hacer copias de seguridad lo lgico es que
estas copias se puedan restaurar. Para restaurar una
copia de seguridad tenemos que seleccionar la base de
datos deseada y con el botn derecho pulsamos en la
opcin Todas las tareas -> Restaurar base de datos.






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

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

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
24

Si se escribe entre comillas se puede usar tanto letras maysculas como minsculas (se
especifica tal y como se pone)

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
Propietario
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)
Tabla:
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)
Campo
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)
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
Col1, Col2, ...:
Nombres asignados a los campos.
Tipo1,Tipo2, ...:
Tipo de datos del campo

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 Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2
Tipo2 [NOT NULL] [CHECK restricciones de columna]]


25

NOT NULL
No se admite el valor nulo como dato en ese campo (hay que poner algo)

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

[ 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 ) }

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

Se recomienda utilizar una columna pequea de tipo entero como clave
principal
Todas las tablas tienen que tener una clave principal
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
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
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.





27

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

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 en SQL SERVER 2008
ALTER TABLE tabla
DROP COLUMN col1 (Borrar columna)
ALTER COLUMN col1 (Modificar columna)
ADD col2 tipo (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
28

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)

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

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

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

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

UTILIDAD DE LAS VISTAS 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
30

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

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

INTERSECT
SELECT ____________ INTERSECT
SELECT __________
Halla los registros comunes a dos tablas
Similar al operador AND

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
Mecanismo para acelerar las bsquedas
ndice
31

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)

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

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




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



32

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

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.
WITH CHECK OPTION
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

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

Ejemplo: Crear un ndice no agrupado sencillo

CREATE INDEX
IX_ProductVendor_VendorID ON
Purchasing.ProductVendor (VendorID);



33

Ejemplo: Crear un ndice compuesto no agrupado

CREATE NONCLUSTERED INDEX
IX_SalesPerson_SalesQuota_SalesYTD
ON Sales.SalesPerson (SalesQuota, SalesYTD);

Ejemplo: Crear un ndice no agrupado nico

CREATE UNIQUE INDEX
AK_UnitMeasure_Name ON
Production.UnitMeasure(Name);

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

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

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 cmo 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)
34

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
Procedimientos almacenados
Desencadenadores
Funciones de usuario
Ejecutar un proceso
Desde un cliente hacer llamadas al servidor de base de datos
NO se puede hacer
o Disear una interfaz de usuario
o Solicitar de forma directa informacin al usuario
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
35

Transact SQL: Tipos de datos

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

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

No se pueden usar en columnas de una tabla pero s en variables
o Cursor
Almacena un cursor de datos asociado a una consulta o una vista
Permite acceso a los datos fila a fila
o 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:
o Los datos se almacenan en una tabla de la bd
o Permanecen all hasta que se recuperan
Transact SQL (para lgica de proceso)
o Se puede necesitar trabajar con datos temporales (variable)
o No se almacenan en la bd
o Variable: Identificador, nombre asociado a una posicin de memoria
o Almacenar valor (asignacin), recuperarlo (lectura)

Antes de utilizar Declarar
DECLARE @nombre tipo
36

@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

Programa 1
USE temple

DECLARE @suma int
SELECT @suma = COUNT (numem) FROM temple
PRINT @suma

Expresiones
o Variables, constantes, resultado de funciones pueden ser operandos formando parte de
expresiones
o Expresin: Operandos + operadores Resultado
o Aritmticas (clculos, con resultado) y Lgicas (relaciones v, f t,f)
o Aritmticas (+ - * / %)
o Lgicas (= <> < <= > >= !< !>)

Programa 2
USE temple

DECLARE @suma int DECLARE @resultado int
SELECT @suma = COUNT(numem) FROM temple
SELECT @resultado = @suma * AVG(salar)
PRINT @resultado

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

Transact SQL: Control de flujo

Transact SQL
o Se puede desviar el flujo secuencial de ejecucin segn queramos
37

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

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

Variable recin creada no tiene valor asignacin
Asignacin de valores simples
o SELECT @suma = 10
o SET @suma = 10
Otras asignaciones
o SELECT @suma = AVG(salar) FROM temple
o Consulta de la cual se obtiene el resultado a asignar a la variable
o SET no se puede utilizar

Variables predefinidas
o Aparte de las variables que podamos declarar, podremos utilizar otras ya predefinidas
o Globales: Disponibles siempre (no hay que definirlas ni asignarles valor)
o @@nombre

Variables predefinidas: Algunas
o @@CONNECTIONS
N de conexiones efectuadas desde que se inici SQL Server
o @@CURSOR_ROWS
N de filas del ltimo cursor abierto
o @@FETCH_STATURS
Estado tras la ltima recuperacin de fila a travs de un cursor
o @@IDENTITY
Valor asignado a la ltima columna de identidad que se haya insertado
o @@ ROWCOUNT
N de filas afectadas por la ltima sentencia que se haya ejecutado
o @@SERVERNAME
Nombre del servidor
o @@SERVICENAME
Nombre del servicio
38

o @@VERSION
Informacin de versin del servidor

El valor de las variables predefinidas se obtiene con SELECT
o SELECT @@SERVERNAME
o PRINT @@SERVERNAME
o SELECT @@SERVERVERSION AS Versin de SQL
Server, @@SERVERNAME AS Servidor

Cursores
o No utilizar si no es totalmente necesario
o Ralentizan muchsimo el rendimiento de la aplicacin
o Intentar utilizar SQL complejas en lugar de cursores
o Obtener un cursor para manipular un conjunto de datos
o 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

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)

Cursores: Abrir cursor
o Despus de definir el cursor: Abrirlo antes de poder acceder a las filas del conjunto de
datos
o Desplazamiento secuencial (de la primera a la ltima)
DECLARE CursorNumem CURSOR FOR SELECT
o Desplazamiento libre (a cualquier fila)
DECLARE CursorNumem SCROLL CURSOR FOR SELECT

o Abrir el cursor
OPEN cursor (nombre del cursor o variable)

Cursores: Recuperar filas del conjunto
o FETCH fila FROM cursor INTO variables
o 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
39

Determinar si la operacin FETCH ha tenido xito (devuelve 0)

Cursores: Liberar cursor
Despus de usar el cursor, liberar los recursos utilizados
DEALLOCATE

Table
o Tabla temporal en memoria
o Las sentencias SQL actan sobre conjunto de datos
o 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.

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

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

o Estadsticas

Funciones estadsticas
o 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

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

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

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

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

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

Otras funciones:
o De fecha:
http://msdn.microsoft.com/es-es/library/ms186724.aspx
o De conjunto de filas:
41

containstable, freetexttable, opendatasource, openquery, openrowset, openxml
o De seguridad:
http://msdn.microsoft.com/es-es/library/ms186236.aspx

Funciones definidas por el usuario
o Existen funciones de carcter general
o El usuario puede crear otras funciones ms especficas
o Grupo de sentencias Transact SQL con un identificador (nombre funcin)
o 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

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

Tablas INSERTED y DELETED

La tabla INSERTED
o Las nuevas filas que se han insertado mediante la instruccin INSERT
o Los nuevos valores para las filas que se han modificado mediante la instruccin
UPDATE
La tabla DELETED
o Las filas eliminadas por una instruccin DELETE
o 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

INSERT
o Los datos insertados se guardan en la tabla inserted
o INSERT INTO hist . FROM inserted

DELETE
o Los datos borrados se guardan en la tabla deleted
o INSERT INTO hist . FROM deleted


42

UPDATE
o Los valores nuevos del registro se guardan en inserted
o Deleted guarda el registro modificado sin los cambios que se acaban de hacer
o INSERT INTO hist . FROM inserted o deleted
o Si no hay cambios:
Si c1<>deleted.c1 or c2<>deleted.c2 update
Else no grabar

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

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.

Desencadenadores INSTEAD OF

Se evita que la accin desencadenante sea ejecutada
o Se activan automticamente cuando se ejecuta la instruccin definida
o Se activa antes de la ejecucin de la accin. La tabla base an no ha sufrido
modificaciones
o Se puede acceder a las tablas Inserted y Deleted
o 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
o Dependiendo de las condiciones evaluadas podemos decidir entre hacer efectivos los
cambios solicitados o dejarlos totalmente sin efecto
o En una tabla que tenga definida una restriccin FOREIGN KEY con operaciones
CASCADE no se puede crear un trigger INSTEAD OF

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

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
43

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

Creacin y eliminacin de Triggers
Slo pueden crearse escribiendo cdigo
o Desde el Management Studio con una consulta SQL
o Desde una tabla o vista / Nuevo desencadenador
o Desde el Analizador de consultas

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

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

CREATE TRIGGER isr_Customers
ON Customers
AFTER INSERT
AS
-- Inserte sus instrucciones aqu

CREATE TRIGGER tr_Customers
ON Customers
WITH ENCRYPTION
FOR INSERT, UPDATE, DELETE AS
44

-- Inserte sus instrucciones aqu

CREATE TRIGGER tr_Customers
ON Customers
INSTEAD OF INSERT, UPDATE, DELETE AS
-- Inserte sus instrucciones aqu

CREATE TRIGGER isr_Customers
ON Customers
INSTEAD OF INSERT
AS
-- Inserte sus instrucciones aqu

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

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

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

Histrico
Realizacin de un registro de los cambios que se efectan en una tabla
o Cada vez que se efecta un cambio, guardar el registro, indicar quien lo cambi,
cuando, que cambi, tipo de cambio
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
o Visual basic, php, asp
o Administrador corporativo
o Analizador de consultas
o Conexiones desde access,
Insert Insert tabla fsica, Insert tabla histrico
Delete Delete tabla fsica, Insert tabla histrico
Update Update tabla fsica, Insert tabla histrico

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
45

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

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

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'

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
46

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

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.

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





47

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

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

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

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) &
48

(POWER(2, (3-1)) + POWER(2, (4-1)) + POWER(2, (5-1))) > 0

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.

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
o Se ejecuta y se ve el resultado de forma inmedianta
Es capaz de ejecutar procedimientos almacenados
o Procedimientos escritos en Transact-SQL y almacenados en la propia BD
o 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

Caractersticas
o Se ejecuta bajo demanda
o Puede recibir y devolver parmetros
o 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

BENEFICIOS
Instrucciones precompiladas
o 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
o Se ejecutan mucho ms rpidos que una instruccin SQL (se almacenan ya
compilados)
o SQL Server no tiene ms que ejecutar el cdigo, sin necesidad de efectuar un
anlisis sintctico y una compilacin previa
49

Optimizan el trfico en la red
o 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
o 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

Programacin modular
o Todas las instrucciones que conforman el SP se ejecutarn en el servidor como un
todo
o Se puede incluir lgica condicional, mediante las instrucciones de control de flujo
(IF..ELSE,WHILE) disponibles en Transact-SQL
Pueden usar parmetros
o Tanto para recibir datos como para devolverlos a la aplicacin que los llama
o 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)
Ejecucin automtica
o Se ejecutan a peticin del usuario o las aplicaciones, aunque podemos configurarlos
para que se ejecuten automticamente al iniciarse SQL Server

PROCEDIMIENTOS ALMACENADOS: TIPOS

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

Procedimientos almacenados del sistema

USE Northwind
GO
sp_helpdb

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

o 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 definidos por el usuario

USE Northwind
CREATE PROCEDURE sp_MostrarBaseDeDatos
AS
SELECT Northwind

USE Northwind
EXEC sp_MostrarBaseDeDatos

USE master
CREATE PROCEDURE sp_MostrarBaseDeDatos
AS
SELECT Master

USE Master
EXEC sp_MostrarBaseDeDatos

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

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 extendidos
o Programas DLL escritos en C++
o Extienden capacidades de SQL Server
o Estn en la base de datos master
o Su nombre empieza por xp_
o Se utilizan para fines administrativos
o 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
o Se puede crear desde el Managament Studio o desde una consulta SQL
o Managament Studio
En la BD donde se va a crear
51

Crear Procedimiento almacenado (carpeta programacin
Escribir el contenido
Comprobar sintaxis
Asignar permisos
Guardar como plantilla

CREATE PROCEDURE HoraActual
AS
SELECT CURRENT_TIMESTAMP

Crear procedimiento almacenado

CREATE PROCEDURE NombreSP
[
@Param1 tipodatos [=valorPredeterminado] [OUTPUT],
@Param1 tipodatos [=valorPredeterminado] [OUTPUT],...
]
AS
... Cuerpo del SP ...

Crear procedimiento almacenado: recepcin y devolucin de parmetros
o Mayor utilidad cuanto ms flexible sea
o En el ejemplo siguiente:
Buscar los apellidos que empiezan por a
Buscar los apellidos que empiezan por cualquier letra que se le pasa
o 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

Crear procedimiento almacenado: recepcin y devolucin de parmetros
o Cualquier sp puede recibir parmetros si los necesita
o Irn detrs del nombre, especificando la variable y su tipo
o Si se ejecuta el sp sin parmetros error
o El error se evita ponindole al parmetro un valor por defecto
Usado si se llama al sp sin parmetro alguno
o 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

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



52

Crear procedimiento almacenado: Ejemplos
CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40)
AS Exec buscarEmpleadosPorApellido a
SELECT * FROM Employees
WHERE lastname LIKE % + @apellidoEmp + %

CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40) = a
AS Exec buscarEmpleadosPorApellido
SELECT * FROM Employees
WHERE lastname LIKE % + @apellidoEmp + %

Ejecutar el procedimiento almacenado
o EXECUTE o EXEC nombre_procedimiento

CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40)
AS Exec buscarEmpleadosPorApellido a
SELECT * FROM Employees
WHERE lastname LIKE % + @apellidoEmp + %

CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40) = a
AS Exec buscarEmpleadosPorApellido
SELECT * FROM Employees
WHERE lastname LIKE % + @apellidoEmp + %

Crear procedimiento almacenado: Instruccin RETURN
o Se usa para salir sin condiciones de un SP (desde cualquier punto del SP)
o Tiene un valor de retorno de tipo entero
o El valor de retorno predeterminado es 0
o Se puede utilizar RETURN para devolver un cdigo de error

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

CREATE PROCEDURE Totaliza
@ISBN char(13)= NULL --El parmetro es NULL por defecto
AS
BEGIN
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
53

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

CREATE PROCEDURE Totaliza
@ISBN char(13)= NULL --El parmetro es NULL por defecto
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

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

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

Crear procedimiento almacenado: Devolucin de conjunto de datos
o 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
o Simplifican la obtencin de datos de mltiples tablas
Similar a las vistas, pero con parmetros

Crear procedimiento almacenado: Manejo de errores
o La funcin del sistema @@ERROR devuelve el cdigo de error de la ltima instruccin
ejecutada
o Este valor cambia cada vez que se ejecuta una instruccin, por lo tanto hay que
controlar el error inmediatamente despus de ejecutar la instruccin
o RAISERROR
54

Se usar para generar explcitamente un error
RAISERROR (id_mensaje | texto_mensaje, gravedad, estado) WITH opcin
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

USE empleados
GO
CREATE PROCEDURE CrearBD
--@variable char(13)= NULL NO es necesario
AS
BEGIN
DECLARE @ERROR int
BEGIN TRANSACTION
CREATE TABLE temple (..)
SET @ERROR = @@ERROR --@@ERROR a partir de aqu ya tiene
otro valor
IF @ERROR = -1
BEGIN
ROLLBACK TRANSACTION
RETURN @ERROR
END
INSERT INTO temple
COMMIT TRANSACTION
RETURN 0
END

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







55

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

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

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

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

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)

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

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)



57

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

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

Ejecucin PRINT dbo.QuienFue()

Salida MEGA865\Mnica DESDE Analizador de consultas SQL


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

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.

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)

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

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

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

59

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

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

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

Administracin
Herramientas de administracin
o DBA
Administrador de la base de datos
Administra el servidor
o SQL Server Configuration Manager
Configurar los distintos servicios de SQL Server

60

o 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
o Instancias del servidor: Nombre_Servidor + Nombre_Instancia
Otros servicios
o Coordinador de transacciones distribuidas: MSDTC
o Agente de SQL Server: SQLServerAgent
o Elegidos en la instalacin:
Servicio de Informes (Reporting services)
Servicio de Integracin
Servicio de anlisis
Full-text Filter
Server Browser
Inicio / Todos los programas / SQL Server 2008 / Herramientas de configuracin / SQL
Server Configuration Manager
Se vern:
o ? Servicios instalados
o ? Estado: Ejecucin / Detenido / Pausado (Flecha verde / Cuadrado rojo / Dos rayas
rojas)
o ? Modo de inicio
o ? Otras propiedades

Servicios
o MSSQLServer (instancia por defecto)
o MSSQLServer Expres (Otra instancia instalada)
Estados de los servicios
o Iniciado: Servicio en funcionamiento (acceso de los clientes a las bd)
o Pausado: Servicio detenido temporalmente, se puede reanudar, conservando el
estado anterior
o Detenido: Se desaloja de memoria, al volver a iniciarlo toma sus valores por defecto
o Botones: Iniciar, Detener, Pausar, Reunudar, Reiniciar
Modo de inicio: Automticamente, manualmente, deshabilitado
o Botn derecho / Propiedades / Servicio / Modo de inicio
Servicio Agente de SQL Server
o Se encarga de supervisar, cuando est en marcha, el funcionamiento del motor de
SQL Server (servidor de bases de datos)
o Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en
marcha
o 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
o Completa
o Inicio / Todos los programas / Microsoft SQL Server 2008 / SQL Server Managament
Studio
o Conectar con el servidor:
Nombre del servidor / Autentificacin de windows o mixta
61

Creacin de grupos
o Podemos administrar varias instancias de SQL Server
o 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
Creacin de grupos
o 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
Creacin de grupos
o 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
o Herramientas grficas de administracin
o Simplifican tareas (creacin de una bd, ndice, vista, , copia de seguridad, )
Asistentes o plantillas
o Ver / Explorador de plantillas

Administracin
Creacin de una estructura de grupos
o Si slo se va a trabajar con un servidor no hace falta crear grupos
o Gran empresa con mltiples servidores Grupos
o Ver / Servidores registrados
o Elegir: Local Server groups / Botn derecho / Nuevo grupo de servidores / Nombre y
descripcin
Amrica ( mxico, argentina, usa), Europa (espaa, alemania, italia)
Registro de servidores
o 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
Actuar sobre un servidor
o Managament Studio ms completo que Configuratio Manager
o Seleccionar servidor / Botn derecho
Puede ser local o remoto
62

Iniciar, pausar, reanudar, detener, reiniciar
Conectar / Desconectar (cerrar conexin, liberando el canal y recursos o
restablecerla)

Seguridad
o Limitar el acceso indiscriminado a informacin (importante)
o Qu personas pueden trabajar y qu pueden hacer
o Autentificacin: Windows, mixta
Autentificacin, comprobar si tiene acceso sobre la bd, conocer operaciones que le
estn permitidas
o El proceso de autorizacin necesita saber
Funciones que puede realizar el usuario autentificado
Derechos que tiene sobre cada bd
o Usuarios y grupos de Windows + Funciones del servidor de SQL Server
Seguridad: Usuarios y grupos de Windows
o El servidor dispone de una bd con informacin de todas las cuentas de usuarios
o Cada usuario tiene una configuracin
o Forma parte de grupos
o Grupos: Permitir que mltiples usuarios compartan atributos sin necesidad de
definirlos individualmente
o 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
Seguridad: Inicios de sesin en SQL Server
o 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
o 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,
Seguridad: Funciones de servidor
o El grupo elegido ya puede iniciar sesin en SQL Server
o No tiene privilegios (no puede operar sobre bases de datos, ni realizar otras tareas)
o 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 las funciones que se desea para ese usuario o grupo
o 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
o 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
63

Administrador del sistema: Funcin sysadmin (cualquier operacin sobre el
servidor y cualquier bd)

Seguridad: Funciones de servidor

Seguridad: Definir usuarios
o Cuando se crea una bd hereda propiedades de las bd master y model
o Luego se pueden modificar
o La bd cuenta ya con un conjunto de tablas, vistas, sp, un usuario dbo,
o dbo: tiene permisos completos sobre la bd creada
o Se deben crear otros usuarios que requieran acceso a la bd (leer, escribir, etc.)
o Carpeta usuarios: Nombre_BD / Seguridad / Usuarios
o Carpeta: Bases de datos / Seguridad / Inicios de sesin (es otra, a nivel del servidor
y no de la BD)
o Carpeta usuarios: Pueden ser usuarios de Windows, grupos de Windows, inicios de
sesin de SQL Server
o Nuevo usuario: Nombre_BD / Seguridad / Usuarios / Botn derecho / Nuevo usuario
Nombre_servidor\Nombre_usuario
Nombre_servidor\Nombre_grupo
Nombre_servidor\Nombre_inicio_sesin
o 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
Seguridad: Definir usuarios (funciones bd)






64

Seguridad: Funciones definidas por el usuario
o Las funciones estndar de la bd no siempre se ajustan a las necesidades de todas
las bd
o Se pueden crear funciones de seguridad definidas por el usuario
o 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
Permisos de las tablas
o Seleccionar tabla / Botn derecho / Propiedades
o Permisos
Limitar para cada tabla las acciones que pueden efectuar los usuarios o los inicios
de sesin

GRANT
o 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
Permisos
http://msdn.microsoft.com/es- es/library/ms187965.aspx

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




65

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

Mantenimiento
o Despus de disear y crear la bd:
Poner en explotacin
Plan de mantenimiento
Copias de seguridad
o Diseo e implementacin
Se efecta en un entorno de desarrollo (no en el entorno de explotacin habitual de
la empresa)
o 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

Asistente para copias de bases de datos
o 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
o 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)

Asistente para copias de bases de datos
o Seleccionar una o varias bd a mover
Una marca nos indicar si existe algn conflicto (espacio insuficiente en
destino, etc.)
o La transferencia:
1. Se detendr si encuentra en el destino los mismos archivos
2. O se reescribir en ellos la nueva informacin
o Una bd no slo est compuesta por los ficheros de datos y transacciones
o Puede tener dependencias de otros objetos del servidor de origen
Inicios de sesin
Procedimientos almacenados compartidos por varias bd (almacenados en
master)
66

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
o En cada elemento seleccionado: inicios de sesin, procedimientos almacenados, etc. se
puede elegir pasarlos todos al destino o elegirlos individualmente
o Dar nombre al trabajo que se est realizando
o 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)
o Resumen del proceso

Agente de SQL Server
o Programacin para la ejecucin peridica de trabajos
o Almacena trabajos en:
Agente de SQL Server / Trabajos
o Los trabajos se pueden poner en marcha, detenerlo, obtener un historial de uso, ver
propiedades
o Se pueden generar desde asistentes
Copia de bases de datos
o 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

Agente de SQL Server: Programacin de un trabajo
o Agente de SQL Server / Trabajos / Seleccionar trabajo / Botn derecho /
Propiedades / Programacin
o Lista de ejecuciones programadas
Periodicidad, la hora, la duracin del proceso
o El Agente de SQL debe estar activo

Copias de seguridad
o Preservar la seguridad de la informacin frente a problemas
o Se puede hacer con la bd en funcionamiento
Baja el rendimiento
o 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)
o Dispositivos de copia
Objetos de servidor / Dispositivos de copia de seguridad/ Botn derecho / Nuevo
dispositivo
Nombre del dispositivo, cinta o directorio

Copias de seguridad: Crear
o Determinar frecuencia y mtodo (acorde al volumen de datos y la importancia
o La bd sigue activa, pero rendimiento baja
o Poca informacin y poca actualizaciones: 1 semana
o Muchas actualizaciones y volumen: copia semanal y copia diferencial diaria, y copia
de registro de transacciones

67

o Objetos de servidor / Dispositivos de copia de seguridad / Dispositivo de copia
creado
o 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
o 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
o 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)

Copias de seguridad: Recuperar
o Si tenemos copias completa de bd, slo podemos recuperar la ltima de esas copias
(la ms reciente)
o 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)
o 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

68


Mantenimiento de las bases de datos
o A medida que se trabaja con una bd, va creciendo
o La organizacin de datos e ndices puede no ser la ms optima (espacio inutilizado)
Hacer compactacin
o Mantenimiento Crear plan de mantenimiento
Copias de seguridad
Compactacin
Comprobar integridad
o Servidor / Administracin / Planes de mantenimiento / Botn derecho / Nuevo plan
o 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
o Reducir ocupacin de la bd y mejorar el rendimiento
Reduccin del tamao de la bd
Reorganizacin de ndices
Limpieza del historial
o Orden en que se ejecutarn las tareas elegidas
o Programacin a utilizar y propiedades de cada tarea
o Modificar plan de mantenimiento
Servidor / Administracin / Planes de mantenimiento / Seleccionar plan / Botn
derecho / Propiedades

Trabajos del agente SQL Server
o Al definir un plan de mantenimiento Se definen uno o varios trabajos que el Agente
SQL tendr que poner en marcha
o 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

También podría gustarte