Sei sulla pagina 1di 240

Lic. Marco A. Treviño Rdz.

U.A.M.Reynosa-Rodhe

1
Introducción
 Nombre
 Compañía
 Título / Funcion
 Responsabilidades
 Experiencia en Bases de Datos
 Experiencia en Sql Server
 Expectativas del curso

2
Temario
 Módulo 1: Panorama general de SQL Server

 Módulo 2: Introducción a SQL y Transact SQL

 Módulo 3: Creación y Manejo de Bases de Datos.

 Módulo 4: Consulta de Datos.

 Módulo 5: Modificación de Datos.

3
Temario

 Módulo 7: Implementación de Reglas de Integridad

 Módulo 8: Implementación de Vistas

 Módulo 9: Implementación de Stored Procedures

 Módulo 10: Implementación de Triggers

4
Logística
 Horario
 Breaks
 Teléfonos
 Estacionamiento
 Baños
 Fumadores

5
6
Temario
 Qué es SQL Server?
 Conceptos Básicos
 Arquitectura de SQL Server
 Bases de Datos de SQL Server

7
Conceptos Básicos
 Manejador de bases de datos relacional
 Basado en la arquitectura cliente-servidor
 Soporta:
- Grandes volúmenes de transacciones en línea
- Operaciones Concurrentes
- Procesos con gran volúmen de información
- Conexiones simultáneas
 Garantiza la Integridad de los datos

8
Conceptos Básicos
 Garantiza la realización o no de una
transacción completa
 Recuperación de datos en un estado
consistente en caso de fallas
 Lenguaje Transact SQL para programación
(Apegado a ANSI SQL-92, 95)
 Administración Centralizada de servidores
distribuidos

9
Plataformas de SQL Server
 Servidor
 Windows 2000, 2003, 2012, NT , XP
 Windows 98
 Cliente
 Windows 2000, NT y XP
 Windows 95 y 98
 MS-DOS, Windows 3.x
 Exploradores de Internet
 Otros Fabricantes

10
Integración de SQL Server con
Windows NT
 Sistema de Seguridad
 Capacidad de Multiprocesamiento
 Mensaje en el Event Viewer
 Servicios de NT o 2000
 Performance Monitor
 Microsoft Cluster Server

11
Servicios de SQL Server
 MSSQLServer
 Administración e Integridad de datos, consultas y manejo
de transacciones.
 SQLServerAgent
 Alertas, Operadores y Trabajos

 Microsoft Distributed Transaction


Coordinator
 Administración de Transacciones Distribuidas

 Microsoft Search
 Catálogos e índices de texto

12
Seguridad de SQL Server
 Autenticación de SQL Server
 Cuenta propia de SQL Server
 SQL Verifica el password
 El usuario debe especificar cuenta y password al
conectarse a SQL

 Autenticación de Windows NT o 2000


 Usuario o grupo de NT o 2000
 Windows NT o 2000 verifica el password
 El usuario no proporciona cuenta ni password al
conectarse a SQL

13
Seguridad de SQL Server
 Modo de Autenticación
 De Windows NT
○ Solo Autenticación de Windows NT
 Modo Mixto
○ Autenticación de Windows NT o autenticación de SQL
Server

14
Bases de Datos SQL Server
 Tipos de bases de datos
 Objetos en la base de datos
 Tablas del sistema
 Obtención de metadata

15
Tipos de bases de datos
 Bases de datos del sistema
 Master
 Model
 Tempdb
 Msdb
 Distribution

 Bases de datos del usuario


 Pubs
 Northwind
 Clientes
 alumnos

16
Tipos de bases de datos
Bases de Datos del Sistema

master
model tempdb msdb distribution

pubs northwind User1

Bases de Datos de Usuario

17
Objetos en la Base de Datos
 Tablas
 Tipos de Datos
 Restricciones (Constraints)
 Reglas
 Defaults
 Indices
 Vistas
 Stored Procedures
 Triggers

18
Tablas del sistema
 Almacenan información necesaria acerca del sistema y los
objetos de la base de datos

 Catálogo de la base de datos: almacena metadatos de una


base de datos específica

 Catálogo del sistema: almacena metadatos de todo el


sistema y todas las demás bases de datos.

 Comienzan con el prefijo sys

 Ejemplo: sysobjects, sysdatabases, syslogins, sysusers

19
Obtención de Metadata
 Stored Procedures del sistema
sp_help, sp_helpdb, sp_helpindex, etc

 Funciones del Sistema


DB_ID, USER_NAME, COL_LENGTH, DATALENGTH, etc

 Vistas de información de esquema


INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.COLUMNS
INFORMATION_SCHEMA.TABLES_PRIVILEGES

20
Repaso
 Qué es SQL Server?
 Conceptos Básicos
 Arquitectura de SQL Server
 Bases de Datos de SQL Server

21
22
Temario
 Herramientas de Programación
 Lenguaje de programación Transact-SQL
 Elementos de Transact-SQL
 Reglas de Identificadores
 Ejecución de comandos de Transact-SQL
 Procesamiento de Queries

23
Herramientas de Programación
 SQL Server Query Analyzer
 Identificación por colores de elementos de sintaxis
 Múltiples ventanas de consulta
 Forma personalizada para ver los resultados
 Vista Gráfica de planes de ejecución
 Capacidad de ejecutar selectivamente partes de un script

 Utilería osql
 Se comunica con el servidor mediante ODBC
 Se ejecuta desde una ventana de Command Prompt
 Los parámetros de la instrucción osql distinguen
mayúsculas de minúsculas

24
Transact-SQL
 Utilizado por SQL Server como lenguaje de consulta y
programación de sus bases de datos
 Transact-SQL es una versión del lenguaje de consulta
estructurado (SQL, Structured Query Language)
 Transact-SQL acepta el estándar SQL de ISO ANSI SQL-
92
 Se agregan elementos adicionales al lenguaje para
brindar mayor funcionalidad
 Puede ser ejecutado desde cualquier producto
compatible con ANSI-SQL

25
Elementos de Transact-SQL
 Lenguaje de control de datos
(DCL, Data Control Languaje)

 Lenguaje de definición de datos


(DDL, Data Definition Languaje)

 Lenguaje de manipulación de datos


(DML, Data Manipulation Languaje)

 Elementos adicionales

26
Lenguaje de Control de Datos (DCL)

 Quien puede ver y modificar los datos


- GRANT
- DENY
- REVOKE

 Los integrantes de sysadmin, dbcreator,


db_owner o db_securityadmin pueden
ejecutar instrucciones de DCL

27
Lenguaje de Definición de Datos (DDL)

 Define los objetos de la base de datos


- CREATE nombre_del_objeto
- ALTER nombre_del_objeto
- DROP nombre_del_objeto

 Los integrantes de sysadmin, dbcreator,


db_owner o db_ddladmin pueden
ejecutar instrucciones de DDL

28
Lenguaje de Manipulación de Datos (DML)

 Consulta y Actualización de Datos


- SELECT
- INSERT
- UPDATE
- DELETE

 Los integrantes de sysadmin, dbcreator,


db_owner o db_datawriter pueden ejecutar
instrucciones de DML

29
Elementos Adicionales
 Variables Locales
- Definidas en el DECLARE
- Se les asigna valor usando el SET o SELECT

 Operadores
- Aritméticos ( +, -, *, /, % )
- De Comparación ( =, <, >, >=, <=, <>, !>, !<, !=)
- De Concatenación de caracteres ( + )
- Lógicos ( AND, OR, NOT )

 Funciones
- De conjunto de filas (OPENQUERY, OPENROWSET, etc.)
- De agregado (AVG, SUM, COUNT, etc.)
- Escalares (CONVERT, GETDATE, USER_NAME, etc.)

30
Elementos Adicionales
 Instrucciones para control de flujo
- BEGIN … END
- IF … END
- WHILE …
- CASE …

 Comentarios
- De linea
- Se usan dos guiones ( -- )
- De bloque
- Se usan caracteres ( /* ) para iniciar el comentario y ( */ ) para
terminarlo

31
Reglas de Identificadores
 Los identificadores pueden tener de 1 a 128
caracteres
 Los identificadores para tablas temporales no
pueden ser de más de 116 caracteres
 Hay dos clases de identificadores
 Identificadores regulares
 Identificadores delimitados

32
Reglas de Identificadores
 Identificadores Regulares
 El primer carácter puede ser una letra o un símbolo:
○ a-z, A-Z, _, @, #
 Los demás caracteres pueden ser letras, números,
simbolos
 El identificador no debe ser una palabra reservada de
SQL
 No se permiten espacios en blanco

 Identificadores Delimitados
 Se encierran entre corchetes ( [ ] ) o comillas ( “ “ )
 Pueden incluir palabras reservadas
 Pueden incluir espacios en blanco y caracteres como:
○ @, $, #, _, ., &, {, \, etc.

33
Ejecución de comandos de
Transact-SQL
 Construcción dinámica de clausulas
 Uso de EXECUTE con variables o constantes string
 Uso de ‘Batches’
 Uno o más clausulas enviados juntos, delimitados por la
clausulaGO
 Uso de ‘Scripts’
 Uno o más batches
 Uso de transacciones
 Garantizan la integridad de los datos
 Se delimitan por las instrucciones BEGIN
TRANSACTION, COMMIT / ROLLBACK TRANSACTION

34
Procesamiento de queries

35
Repaso

 Herramientas de Programación
 Lenguaje de programación Transact-SQL
 Elementos de Transact-SQL
 Reglas de Identificadores
 Ejecución de comandos de Transact-SQL
 Procesamiento de Queries

36
37
Temario
 SQL Enterprise Manager
 Cómo se almacenan los datos
 Creación de Bases de Datos
 Opciones de una Base de Datos
 Modificación de Bases de Datos
 Tipos de Datos
 Creación de Tablas

38
SQL Enterprise Manager
 Herramienta para Administrar SQL Server
 Permite la Admon. Y Monitoreo de
Servidores Remotos
 Todas las tareas administrativas se pueden
realizar desde esta herramienta o a través
de comandos
 Lo pueden usar: DBA´s, Operadores,
Desarrolladores

39
Como se almacenan los Datos

Base de Datos

Datos Log
( .mdf ) ( .ldf )

Tablas, Extent
Indices (8 páginas de 8KB)

Datos Pagina de 8KB

Tamaño máximo de renglón = 8060 bytes


40
Creación de Bases de Datos
 Elementos necesarios para crear una base de
datos:
 Nombre de la Base de Datos
 Tamaño de la Base de Datos
 Archivos y su Ubicación

 Es posible crear una base de datos desde el SQL


Enterprise Manager o con el Wizard de creación
de BD o mediante la clausulaCREATE DATABASE

 En master..sysdatabases se almacena
información acerca de las bases de datos

41
Creación de Bases de Datos…
 Sintaxis
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ]

42
Creación de Bases de Datos…
 PRIMARY: Define el grupo de archivos que forman el
archivo principal de la base de datos. Solamente puede
existir un archivo principal por base de datos. La extensión
recomendada para estos archivos es .mdf
 FILENAME: es el nombre y ruta del archivo del sistema
operativo
 SIZE: Especifica el tamaño de los archivos (de datos o log)
puede estar en MB o en KB. El tamaño minimo es de
512KB.
 MAXSIZE: Indica el tamaño máximo hasta el que puede
crecer el archivo. Si no se especifica el tamaño, el archivo
crece según la capacidad del disco
 FILEGROWTH: Indica el incremento del crecimiento del
archivo. Un valor 0 indica no crecimiento. El valor puede ser
indicado en MB, KB o como un porcentaje

43
Creación de Bases de Datos…
 Ejemplo
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )

44
Creación de Bases de Datos…
 Ejemplo de hacer un attach de una base existente

CREATE DATABASE Archive


ON PRIMARY
(FILENAME = 'c:\program files\microsoft sql
server\mssql\data\archdat1.mdf')
FOR ATTACH

 Ejemplo de hacer un attach de una base existente

CREATE DATABASE Products2


ON
( NAME = prods2_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods2.mdf'
)

45
Opciones de una Base de Datos

46
Opciones de una base de datos
 Opciones más frecuentes
 Detallar algunas de las opciones.
(Pendientes)

47
Opciones de una base de datos
 Sintaxis
EXEC sp_option ‘base_de_datos’
‘opcion’, TRUE | FALSE

 Si se desea que las opciones se pasen a cada


base de datos, se deben encender las opciones
en la base de datos de model

48
Modificación de Bases de Datos
 Expandir una Base de Datos
 Ya no cabe más información en la base de
datos
 Se llenó el log de transacciones y no se desea
borrarlo

 Reducir una Base de Datos


 Existe espacio desperdiciado en el disco
 Necesito espacio para otras bases de datos

 Eliminar una Base de Datos

49
Modificación de Bases de Datos
 Sintaxis
ALTER DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property |
NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}
Archivo =
( NAME = logical_file_name
[ , NEWNAME = new_logical_name ]
[ , FILENAME = 'os_file_name' ]
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] )

50
Modificación de Bases de Datos
 Ejemplo para agregar un archivo
ALTER DATABASE Test1
ADD FILE (
NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB, MAXSIZE = 100MB,
FILEGROWTH = 5MB )

51
Expandir una Bases de Datos
 Ejemplo para incrementar el tamaño de un
archivo
ALTER DATABASE Test1
MODIFY FILE (NAME = test1dat3,
SIZE = 20MB)

52
Modificación de Base de Datos
 Es posible aumentar el tamaño de los archivos de datos
o de log
 El tamaño de la base de datos se puede controlar
mediante:
 La configuración automática del crecimiento de los archivos
 La configuración manual del crecimiento de los archivos
 El agregado manual de archivos secundarios
 Para expandir una base de datos se puede utilizar:
 El SQL Enterprise Manager
 La instrucción ALTER DATABASE

53
Reducir una Base de Datos
 Reducción de toda la base de datos
 Mediante el Enterprise Manager o DBCC SHRINKDATABASE
 Reduce el tamaño de todos los archivos de la base de datos
○ DBCC SHRINKDATABASE (Ventas, 10)  Porcentaje

 Reducción de un archivo especifico


 Mediante el Enterprise Manager o DBCC SHRINKDATABASE
 Reduce el tamaño de todos los archivos de la base de datos
○ DBCC SHRINKDATABASE (VentasData2, 3)  Nvo. Tamaño

 Reducción automática de una base de datos


 Encender la opción Auto Shrink

54
Reducir una Base de Datos
 Puntos importantes a considerar
 La base de datos resultante no puede ser menor que Model
 DBCC SHRINKDATABASE: no puede reducir un archivo un
tamaño menor al especificado al crear la base de datos
 DBCC SHRINKFILE: si permite reducir el tamaño del archivo por
debajo del tamaño especificado cuando se creó
 El tamaño al cual se reduce un archivo nunca podrá se menor al
tamaño ocupado por sus datos
 DBCC SHRINKDATABASE y SHRINKFILE se ejecutan de
manera diferida

55
Eliminar una Base de Datos
 Toda la información de la base de datos se pierde, se
borran los archivos físicos.
 No se permite borrar las bases de datos del sistema:
master, model y tempdb
 Para borrar una base de datos se puede utilizar:
 El Enterprise Manager (una base de datos a la vez)
 La instrucción DROP DATABASE (varias bases de datos a la vez)
○ Ejemplo: Drop database Ventas, Alumnos

56
Eliminar una Base de Datos
 Restricciones al borra una base de datos:
 Cuando está en proceso de restauración
 Cuando están usuarios conectados a ella
 Cuando está siendo publicada alguna de sus tablas en un
proceso de replicación
 SQL Server permite eliminar la base de datos de msdb
pero esto no se recomienda si se piensa utilizar
 Los servicios de replicación
 Los servicios de transformación de datos (DTS)
 El agente de SQL Server
 El asistente de WEB

57
Tipos de Datos
 Tipos de datos del sistema
 Binarios
 Caracteres
 Caracteres Unicode
 Fecha y Hora
 Numéricos

 Tipos de datos definidos por el usuario

58
Tipos de Datos
 Binarios binary[(n)], varbinary[(n)]
 Caracteres char[(n)], varchar[(n)]
 Carac. Unicode nchar[(n)], nvarchar[(n)]
 Fecha y Hora datetime, smalldatetime
 Numericos:
 Numerico Exacto decimal[p[,s]], numeric[p[,s]]
 Numerico Aprox. real, float[(n)]
 Entero int, smallint, tinyint

 Moneda money, smallmoney

59
Tipos de Datos
 Numericos (Continuacion):
 Especial bit, timestamp, cursor,
sysname
 Identif. Global uniqueidentifier
 Texto e imagen text, image
 Texto Unicode ntext

60
Tipos de Datos
 Tipos de datos definidos por el usuario
 El usuario los construye
 Están basados en los datos que provee SQL
Server
 Sintaxis para agregar:
 EXEC sp_addtype nombre_tipoDato,
‘tipoDato_SQL’
 Sintaxis para eliminar:
 EXEC sp_droptype nombre_tipoDato
 Ejemplo:
 EXEC sp_addtype Matricula, ‘char(6)’
 EXEC sp_droptype Matricula

61
Creación de Tablas
 Tabla.- Unidad de almacenamiento de
información. Agrupa datos comunes a un
tema en especial dentro de la base de
datos. Contiene Atributos (campos) y
Registros (filas). Ej. Clientes, artículos, etc.
Atributos

No. Artículo Nombre de Artículo

109377 Gasolina Premium

29777 Gasolina Magna Registros


170000 Aceite Transmision

62
Creación de Tablas
 Al crear una tabla debemos de conocer al
menos los siguiente:
 La estructura que tendrá la tabla (atributos)
 Tipos de datos que aplicarán para cada atributo

No. Artículo Nombre de Artículo

109377 Gasolina Premium


Números Caracteres
29777 Gasolina Magna

170000 Aceite Transmision

63
Creación de Tablas
 Se pueden crear 2 billones de tablas por
base de datos
 Una tabla puede contener:
 Hasta 1024 columnas ó
 8092 bytes por registro (sumando la longitud de
los tipos de datos de cada atributo)
 El nombre de una tabla debe de ser único
por base de datos
 Los nombres de las columnas deben ser
únicos por tabla

64
Creación de Tablas
 Cada columna debe de tener su
correspondiente tipo de dato (definido por
el usuario o propio de SQL)
 Una columna es NOT NULL por default a
menos que se tenga la opción “Columns
NULL by default” encendida

65
Creación de Tablas
 Sintaxis Parcial

CREATE TABLE
[ database_name.[ owner ] . | owner. ] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]
< column_definition > ::= { column_name data_type }
[ COLLATE < collation_name > ]
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ]
]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]

66
Modificación de Tablas
 Agregar columnas
 ALTER TABLE … ADD
 Si la columna es NOT NULL, debe de tener asociado un
DEFAULT
 Borrar Columnas
 ALTER TABLE … DROP COLUMN
 Antes de borrar la columna, se deben eliminar los indices
y/o constraints asociados
 Cambiar el tipo de dato o nulabilidad de una
columna
 ALTER TABLE … ALTER COLUMN …
 Si la columna se cambia a NOT NULL, debe tener
asociado un DEFAULT

67
Modificación de Tablas
 Sintaxis Parcial
ALTER TABLE nombre_tabla
{| [ALTER COLUMN nombre_columna]
|{ ADD
{ nombre_columna tipo_dato
{ [NULL|NOT NULL]
| DROP COLUMN nombre_columna } [,…n]

 Ejemplo
ALTER TABLE Alumni
ADD correoelectronico varchar(30) NULL

68
Modificación de Tablas
 Cambio de nombre de un objeto de la base
de datos:
EXEC sp_rename
Nombre_anterior, Nombre_nuevo
[, COLUMN | INDEX | OBJECT | USERDATATYPE]

 OBJECT
Cualquier objeto que se almacene en sysobjects:
tablas, stored procedures, vistas, triggers,
constraints, rules.

69
Repaso
 SQL Enterprise Manager
 Cómo se almacenan los datos
 Creación de Bases de Datos
 Opciones de una Base de Datos
 Modificación de Bases de Datos
 Tipos de Datos
 Creación de Tablas

70
71
Temario
 Clausula SELECT
 Consulta de Varias tablas
 Tópicos avanzados de Consulta de
datos

72
Clausula SELECT
 Introducción al SELECT
 Selección de columnas
 Funciones matemáticas
 Funciones de caracteres
 Funciones de fechas
 Funciones del sistema
 Selección de registros

73
Clausula SELECT
 Permite la extracción (consulta) de
información de una o varias tablas de la
base de datos
SELECT (columnas a extraer)
FROM (Tablas donde están los datos)
WHERE (Condiciones de la consulta)

 Para mostrar todas las columnas en una


extracción sobre una tabla sería:

SELECT * FROM nombre_tabla

74
Clausula SELECT
 En un SELECT se especifican los campos
que se desean ver en el resultado.
 Si se escribe DISTINCT previo a los
campos de la consulta es para indicar que
no queremos que se incluyan valores de
registros duplicados
“Todas los nombres de las personas”

Select Nombre
From Personas “Todas los nombre de las personas”
(Sin duplicados)

Select destinct Nombre


From Personas

75
Clausula SELECT
 En la cláusula FROM se especifican la o
las tablas de donde se obtendrán los
datos. Las tablas pueden ser identificadas
por Alias
Select *
From Materias M
Where M.MateriaId = 2293

Select *
From Materias as M
Where M.MateriaId = 2293
76
Clausula SELECT
 El orden de las columnas en el SELECT es en el
orden que apareceran en la salida. No
corresponde con el orden en la tabla
 Se pueden escribir encabezados para asignar o
cambiar el nombre de una columna en el
resultado
SELECT NumMateria = MateriaID,
‘Nombre Materia’ = NomMateria
NomMaestro as Maestro
FROM Materias
 Se pueden poner literales dentro del SELECT
como valores prestablecidos
SELECT ‘Cve_escuela’ = ‘RODHE’, MatriculaID, AlumnoNom
FROM Alumnos

77
Clausula SELECT
 Al seleccionar columnas numéricas, es
pósible realizar operaciones de:
 Suma operador +
 Resta operador -
 Multiplicación operador *
 División operador /
 Módulo operador % (enteros)

SELECT CostoMateria, ‘Costo con IVA’ = CostoMateria *


1.10
FROM Materias

78
Funciones Matemáticas
 Las funciones matemáticas realizan
operaciones con datos numéricos
 Funciones comúnes:
ABS(número) Absoluto
EXP(float) Exponencial
LOG(float) Logaritmo Natural
PI() Valor de PI
ROUND(número, cantidad) Redondeo
SIGN(número) (-), (+), 0
SQRT(float) Raíz Cuadrada
SQUARE(float) El cuadrado de
POWER(número, elevado a) Número elevado a

79
Funciones Matemáticas
FLOOR(número) Entero mayor <= numero
CEILING(número) Entero menor <= numero
SIN(float) Seno
COS(float) Coseno
TAN(float) Tangente
COT(float) Cotangente
DEGREES(número) Conversión de Radianes a °
RADIANS(número) Conversion de ° a Radianes
RAND(semilla) Random(float) entre 0 y 1
LOG10(float) Logaritmo base 10

80
Funciones de Caracteres
•Estas funciones realizan operaciones sobre datos binarios y
caracteres de strings o expresiones
•Funciones más comunes:

ASCII(char) Concatenación
CHAR(entero) Valor Asccii del más izquierdo
CHARINDEX(‘p’, string) Posición de inicio de ‘p’ en el string
LOWER(string) Convierte a minúsculas
UPPER(string) Convierte a mayúsculas
LTRIM(string) Quita espacios de la izquierda
RTRIM(string) Quita espacios de la derecha
REPLICATE(string, n) Repite ‘n’ veces el string

81
Funciones de Caracteres
SPACE(n) Repíte ‘n’ veces un espacio
SUBSTRING(string, ini, long) Regresa la parte del string
desde la posición de ‘inicio’ con
una longitud ‘long’
REVERSE(string) Regresa el string al revés
RIGHT(string, n) Regresa los últimos ‘n’
caracteres

82
Funciones de Fechas
 Las funciones de Fechas, manejan los tipos de
datos de fecha y sus componentes
 Funciones
○ DATEADD(datepart, número, fecha)
○ DATEDIFF(datepart, fecha1, fecha2)
○ DATENAME(datepart, fecha)
○ DATEPART(datepart, fecha)
○ GETDATE()
 EJEMPLO
SELECT ‘Dif. En Meses’ = DATEDIFF(mm, Fecha1, Fecha2)
‘Hoy m[as 15 Días’ = DATEADD(dd, 15, GETDATE())
‘El mes actual es’ = DATENAME(mm, GETDATE())
‘El año actual es’ = DATEPART(yy, GETDATE())
FROM Fechas

83
Funciones de Fechas
 DateParts

DatePart Abreviación Valores


Year yy,yyyy 1753-9999
Quarter qq, q 1-4
Month mm, m 1-12
Day of year dy, y 1-366
Day dd, d 1-31
Week wk, ww 0-51
Weekday dw 1-7
Hour hh 0-23
Minute mi, n 0-59
Second ss, s 0-59
Millisecond ms 0-999

84
Funciones de Fechas
 Mediante la clausulaCONVERT, podemos formatear los
tipos de datos fecha a un estilo determinado
 Ejemplo
SELECT ‘Hoy es:’ = CONVERT(Char(8), GETDATE(), 1)
 Algunos de los estilos que provee SQL Server son:

Estilo (yy) Estilo (yyyy) Formato


1 101 Mm/dd/yy
3 103 Dd/mm/yy
5 105 Dd-mm-yy
8 108 Hh:mi:ss
13 113 Dd mes yy
hh:mi:ss:ms (24Hrs)

85
Funciones del Sistema
 Estas funciones nos regresan información especial de la
Base de Datos
 Obtención de valores de la conexión
APP_NAME( ), HOST_NAME( ), HOST_ID( ),
USER, USER_NAME( ), USER_ID( )
SUSER_ID( ), SUSER_NAME( )
DB_NAME( ), DB_ID( )
 Validaciones
ISDATE(string), ISNUMERIC(string)

86
Funciones del Sistema
 Objetos de la base de datos
COL_NAME ( tabla, id_de_la_columna )
COL_LENGTH ( tabla, columna )
INDEX_COL ( tabla, id_indice, id_llave )
OBJECT_ID ( objeto )
OBJECT_NAME ( id_del_objeto )
STATS_NAME ( tabla.indice ) = fecha de la última actualización de
las estadísticas de un índice
 Propiedad IDENTITY
IDENT_INCR ( tabla )
IDENT_SEED ( tabla )

87
Funciones del Sistema
 De Caracteres
DATALENGTH ( string )

 Condicionales
ISNULL ( expresion, valor )
NULLIF ( expresion1, expresion2 )
COALESCE ( expresion1, expresion2, expresion3, etc.)

88
Selección de Registros
 En la cláusula WHERE definimos los criterios de
busqueda de una consulta y esta puede incluir:
 Comparaciones =, >, <, <=, >=, <>, !=, !>, !<
 Rangos BETWEEN, NOT BETWEEN
 Listas IN, NOT IN
 Datos Null IS NULL, IS NOT NULL
 Porciones de caracteres LIKE
 Lógicos AND, OR
 Negación NOT
 Para hacer más rápida la ejecución de las consultas, se
recomienda usar lo menos posible las negaciones.

89
Selección de Registros
 Comparaciones
“Alumnos que se dieron de alta el día de hoy”
Select * from Alumno
Where AltaFecha = CONVERT(char(8), GETDATE(),1)

 Rangos
“Alumnos con matricula entre el 100 y 200”
Select * from Alumno
Where MatriculaID BETWEEN 100 and 200

90
Selección de Registros
 Listas
“Alumnos que se dieron de alta el 9 o 10 de Ene.
2003”
Select * from Alumno
Where AltaFecha IN ( ’01/08/03’, ’01/08/03 )

 Datos NULL
“Alumnos sin fecha de alta”
Select * from Alumno
Where AltaFecha IS NULL

91
Selección de Registros
 Porciones de caracteres. Utilizan comodines
(wildcards) para hacer comparaciones
 % Cualquier string de cero o más caracteres
 _ Cualquier caracter (una posicion)
 [] Cualquier carcater dentro del rango
descrito
 [^] Cualquier caracter fuera del rango
Select MatriculaId, ApellidoPaterno, NomAlumno FROM Alumnos Where
NomAlumno LIKE ‘Mar%’ Las 3 primeras letras del nombre sean “Mar”
NomAlumno LIKE ‘_arla’ El nomre sea de 5 caracteres y termine en
“arla”
NomAlumno LIKE ‘[A-C]%’ La primer letra del nombre sea A, B o C
NomAlumno LIKE ‘[^R]%’ El nombre no empiece con “R”

92
Selección de Registros
 Lógicos
“Alumnos con matricula > a 200, que entraron un
día especifico y que sean de primer semestre
Select * from Alumno
Where MatriculaId > 200 AND AltaFecha = ’08/10/2002’ AND
Semestre = 1

 Negación
“Alumnos que no estén en 1 o 3 semestre[
Select * from Alumno
Where Semestre NOT IN (1,3)

93
Consultas a varias tablas
 Introducción el uso de JOINS
 Tipos de JOINS
 JOINS de más de dos tablas
 JOINS de una tabla consigo misma
 Union de varios conjuntos de resultados
 Creación de tablas a partir de resultados

94
Introducción al uso de Joins
 Es posible utilizar cualquiera de las sintaxis
que brinda SQL
 NO estándar
○ Las tablas del JOIN se especifican en el FROM,
separadas por comas y en el WHERE se indican las
condiciones del JOIN.
 Estandar ANSI SQL-92
○ Las tablas del JOIN se especifican en el FROM,
indicando el tipo de JOIN mediante ciertas claves, y en
el ON se indican las condiciones del JOIN
Select * from tabla CROSS JOIN tabla | tabla [Clave_JOIN] JOIN tabla
ON Condiciones
(Claves: INNER, LEFT (OUTER), RIGHT (OUTER), FULL OUTER)

95
Tipos de Joins
 Joins Internos ( inner joins )
 Operación típica de join. Utiliza operadores
como el =, <>, etc. para comparar columnas
comunes a ambas tablas
SELECT a.MatriculaID, AlumnoNom, MateriaCve
FROM Alumno a, AlumnoMateria m
Where a.MatriculaId = m.MatriculaId

SELECT a.MatriculaID, AlumnoNom, MateriaCve


FROM Alumno a INNER JOIN AlumnoMateria m
ON a.MatriculaId = m.MatriculaId

96
Tipos de Joins
 Joins Internos ( inner joins )
 Operación típica de join. Utiliza operadores
como el =, <>, etc. para comparar columnas
comunes a ambas tablas
SELECT a.MatriculaID, a.AlumnoNom, m.MateriaCve
FROM Alumno a, AlumnoMateria m
Where a.MatriculaId = m.MatriculaId

SELECT a.MatriculaID, a.AlumnoNom, m.MateriaCve


FROM Alumno a INNER JOIN AlumnoMateria m
ON a.MatriculaId = m.MatriculaId

97
Tipos de Joins
 Joins cruzados ( cross joins )
 Producto cartesiano. Regresa todas las
combinaciones de los registros de la tabla
izquierda con los registros de la tabla derecha

SELECT a.MatriculaID, a.AlumnoNom, m.MateriaCve


FROM Alumno a, AlumnoMateria m

SELECT MatriculaID, AlumnoNom, MateriaCve


FROM Alumno CROSS JOIN AlumnoMateria

98
Tipos de Joins
 Joins Externos ( outer joins )
 Cuando un regsitro en la tabla X no tiene un registro
correspondiente en la tabla Y, el resultado de ese
renglón tendrá valores NULOS para los campos que
provengan de la tabla Y
 Left Outer Join: *= incluye todos los registros de la
tabla izquierda. Donde: X=izquierda y Y=derecha
 Right Outer Join: =* incluye todos los registros de la
tabla derecha. Donde: X=derecha y Y=izquierda
 Full Outer Join: incluye todos los registros de ambas
tablas, izquierda y derecha, colocando nulos en
donde no exista información

99
Tipos de Joins
 Ejemplo de Left Outer Join
“Ver todos los alumnos (con o sin materias
inscritas), y para los alumnos inscritos la clave
las materias que inscribieron”

SELECT a.MatriculaID, a.AlumnoNom, m.MateriaCve


FROM Alumno a, AlumnoMateria m
WHERE a.MatriculaId *= m.MatriculaId

SELECT a.MatriculaID, a.AlumnoNom, m.MateriaCve


FROM Alumno a LETF OUTER JOIN AlumnoMateria m
ON a.MatriculaId = m. MatriculaId

100
Joins de dos o más tablas
 Cualquier tabla a la que se haga referencia en una
operación de Join, se puede combinar con otra
tabla mediante un campo común.
“Seleccionar la matrícula, nombre del alumno, y nombre
de las materias que cursa un alumno”
SELECT a.MatriculaID, a.AlumnoNom, m.MateriaNom
FROM Alumno a, AlumnoMateria am, Materia m
WHERE a.MatriculaId = am.MatriculaId AND
am.MateriaCve = m.MateriaCve

SELECT a.MatriculaID, a.AlumnoNom, m.MateriaNom


FROM Alumno a JOIN AlumnoMateria am
ON a.MatriculaId = am.MatriuculaId
JOIN Materia m
ON am.MateriaCve = m.MateriaCve

101
Joins de una tabla consigo misma
SELECT MateriaCve, SemestreNo,
CostoMto
FROM Materia a, Materia b
WHERE a.MateriaCve =
b.MateriaCve AND
a.CostoMto <
Materia a b.CostoMto Materia b
MateriCve SemestreNo CostoMto MateriCve SemestreNo CostoMto
CL0402 1 500 CL0402 1 500

AL1524 1 400 AL1524 1 400

MA0327 1 300 MA0327 1 300

RU2031 2 300 RU2031 2 300

CL0402 2 800 CL0402 2 800

MA0327 2 150 MA0327 2 150

MateriCve SemestreNo CostoMto


CL0402 1 500
Resultado
MA0327 2 400
102
Unión de varios conjuntos de Resultados

 Se utiliza el operador UNION


 Combina los resultados de 2 o más queries en
uno solo
 Cada consta debe de tener
 El mismo número de columnas
 Tipos de datos similares en las columnas
 El mismo orden de columnas en la lista de selección

SELECT MatriculaId, AlumnoNom FROM Alumno


WHERE AlumnoId = 3
UNION
SELECT MatriculaId, AlumnoNom FROM Alumno
WHERE AlumnoId = 2

103
Creación de tablas a partir de resultados

 Utilizar la instrucción SELECT INTO


 Caracteristicas
 Crea una nueva tabla con la misma definición que la original
 La tabla puede ser temporalp o permanente y no debe de
exisitir
 Debe esta encendida la opción SELECT INTO/BulkCopy
para crear una tabla permanente
 Asignar un nombre a las columnas en caso de que éstas
provengan de operaciones

SELECT MateriaCve, MateriaNom, CostoMto, CostoIVA = CostoMto *


1.15
INTO #MateriaTemp
From Materia

104
Laboratorio

105
Topicos Avanzados de
Consulta de Datos
 Uso de SubQueries
 Funciones agregadas
 ORDER BY
 GROUP BY
 Presentación de los ‘n’ primeros valores

106
Uso de Subqueries
 Para dividir una consulta compleja en varios
pasos lógicos
 Utiles cuando una consulta depende de los
resultados de otra consulta
 Se pueden tener subqueries anidados o
correlativos
 Consideraciones:
 Simpe van entre parentesis
 No hay límite en el nivel de anidamiento
 Si se utilizan comparaciones de un solo valor, el resultado
del subquery debe regresar un solo renglón
 No se pueden utilizar en columnas con tipos de datos text
o image
 En algunos casos es posible sustituir los subqueries
usando joins (esto resulta más rápido que los subqueries)

107
Subqueries Anidados
 Regresando un valor único
 El subquery sustituye una expresión en la lista del select
o en una cláusula WHERE usando un operador de
comparación
“Todos los alumnos que se dieron de alta el último día”
Select MatriculaID, AlumnoNom, AltaFecha
From Alumno
Where AltaFecha = (Select Max(AltaFecha) From Alumno)
 Regresando una lista de valores
 El subquery sustituye a una expresión en una cláusula
WHERE que lleva la palabra IN
“Todos los alumnos que lleven al menos una materia”
Select MatriculaID, AlumnoNom
From Alumno
Where MatriuclaId IN (Select MatriulaId From AlumnoMateria)

108
Exists y Not Exists
 Regresan TRUE si existen datos en una lista de
valores y FALSE si no existen
 Si se cumple la condición de la consulta interna
entonces se regresan los datos de la consulta
externa
 Su utilización puede ser similar a la del IN / NOT
IN

“Todos los alumnos que lleven al menos una materia”


SELECT MatriculaID, AlumnoNom
From Alumno a
Where EXISTS ( Select * From AlumnoMateria m
Where m.MatriculaId = a.MatriculaId )

109
Funciones Agregadas

Función Descripción
AVG([ALL|DISTINCT] expresion) Valor Promedio
COUNT([ALL|DISTINCT] expresion) Número de valores

COUNT(*) Número de registros

MAX(expresion) Valor Máximo

MIN(expresion) Valor Mínimo

SUM([ALL|DISTINCT] expresion) Sumatoria

STDEV(expresion) Desviación estándar de todos los valores

STDDEVP(expresion) Desviación estándar de la población

VAR(expresion) Varianza estadística de todos los valores

VARP(expresion) Varianza estadística de la población

110
Funciones Agregadas
 Se pueden utilizar en la instrucción select o en
combinación con el GROUP BY
 Todas las funciones de agregados excepto el
COUNT(*) devuelven NULL si nungún renglón
cumple con la cláusula WHERE
 El COUNT(*) regresa un valor de cero si ningún
renglón cumple con la cláusula WHERE
 Es recomendable que las columnas utilizadas con
funciones agregadas estén indexadas
“Número total de Alumnos” “Costo total de las materias del primer semestre”
SELECT COUNT(*) SELECT SUM(CostoMto)
FROM Alumno FROM Materia
WHERE SemestreNo = 1
111
ORDER BY
 Utilizado para indicar el ordenamiento de los resultados
 La columna (o columnas) sobre la cual se va a hacer un
GROUP BY, se puede especificar por su nombre, alias o
posición que ocupa en la lista del SELECT
 La posición de las columnas en el ORDER BY define el
orden de los resultados
 Si se utiliza el DISTINCT o UNION, todas las columnas que
aparecen en el ORDER BY deben estar en la lista del
SELECT
 Con la clave DESC, los datos se ordenan
descendentemente, si no se especifica SQL los ordena de
manera Ascendente (ASC)
“Todos los alumnos ordenados por carrera, matrícula, y fecha de alta
(descendente)”

SELECT CarreraId, MatriculaId


FROM Alumno
ORDER BY CarreraId, MatriculaId, AltaFecha DESC
112
GROUP BY
 Consideracione al utilizar GROUP BY
 SQL Produce una columna de valores por cada grupo
definido
 Las columnas que aparecen en el GROUP BY deben
estar incluidas en el SELECT
 EN columnas que tienen valores nulos éstos son
procesados como otro grupo
 Si la consulta lleva una cláusula WHERE solo se
agruparán los registros que cumplan con las condiciones
del WHERE
 Cuando se utiliza el GROUP BY ALL, SQL regresa como
resultado todos los grupos, incluso aquellos que no
cumplan con la condición del WHERE (regresa valores de
null para aquellos que no cumplen)

113
GROUP BY y HAVING
 Consideracione al utilizar HAVING
 El HAVING establece condiciones para el GROUP BY de
manera similar a la forma en que el WHERE establece
condiciones para el SELECT
 El uso del HAVING sin su respectivo GROUP BY no tiene
sentido (se comportaría como un WHERE)
 Se pueden referenciar cualquiera de las columnas que
aparezcan en el SELECT
 Es posible tener hasta 128 condiciones (combinadas con
operadores lógicos AND, OR, NOT)
 Si se utiliza HAVING con GROUP BY ALL, la cláusula
HAVING pasa por alto la palabra ALL y solo devuelve los
grupos que cumplen con el HAVING

114
GROUP BY y HAVING
“Cuantos Alumnos existen por Carrera
Select CarreraID, Count(*)
From Alumno
Group By CarreraID

“Cuantos alumnos existen en las carreras de ISC y LCA


Select CarreraID, Count(*)
From Alumno
Where CarreraID in (‘ISC’, ‘LCA’)
Group By CarreraID

“Cuantos alumnos existen por carrera y que tengan mas


De 100 alumnos
Select CarreraID, Count(*)
From Alumno
Group By CarreraID
HAVING COUNT(*) > 100
115
Presentación de los primeros N valores

 Se especifica en la cláusula del SELECT con la palabra


TOP
 TOP n, regresa los primeros n registros del resultado
 TOP n PERCENT, regresa el n porciento de renglones del
resultado (primeros)
 Utilizar la cláusula ORDER BY para ordenar los datos
 Si se utiliza la cláusula WITH TIES, se devuelven los
registros con valores iguales al último renglón incluido
(sin importar el número de renglones indicado en el TOP
n)
 Sintaxis parcial:
SELECT [ TOP n [PERCENT] [WITH TIES] ]
< lista de columnas >

116
Presentación de los primeros N valores
Primeros 5 alumnos Inscritos 198800 ‘Aug 9 2002’
Select Top 5 MatriculaID, AltaFecha 198801 ‘Aug 9 2002’
From Alumno 198802 ‘Aug 9 2002’
Order By AltaFecha 198803 ‘Aug 9 2002’
198804 ‘Aug 10 2002’

198800 ‘Aug 9 2002’


198801 ‘Aug 9 2002’
198802 ‘Aug 9 2002’ Primeros 5 alumnos Inscritos
198803 ‘Aug 9 2002’ Select Top 5 WITH TIES MatriculaID, AltaFecha
From Alumno
198804 ‘Aug 10 2002’
Order By AltaFecha
198805 ‘Aug 10 2002’
…etc (todos los alumnos
que se dieron de alta el
10 de agosto del 2002

117
Laboratorio Avanzado
de Consultas

118
119
Temario
 Inserción de Registros
 Actualización de Registros
 Eliminación de Registros

120
Inserción de Registros
 Inserción Simple.- Se inserta un registro
solamente por instrucción ejecutada
 Inserción Masiva.- Se inserta más de un
renglón por instrucción ejecutada

121
Inserción Simple
 Es necesario ejecutar un comando o
instrucción por registro que se desea
insetar en la tabla.
 Sólo es posible insertar en una tabla a la
vez
 Nombres de las columnas:
 Si no especifican, los valores enviados deben
estar en el orden de la definición de la tabla y se
deben incluir todas las columnas
 Si se especifican, los valores enviados pueden
estar en desorden y pueden no incluirse todas
las columnas (en caso de que así lo permita la
definición de la tabla)

122
Inserción Simple
 Si no se especifica el nombre de las
columnas
INSERT [INTO] tabla
VALUES ( col1, col2, … coln)
Insert Materia
Values(‘CB-001’, ‘Computacion’, 1, 150)

 Especificando el nombre de las columnas


INSERT [INTO] tabla ( col1, col2, … coln)
VALUES ( col1, col2, … coln)
Insert Materia (MateriaCve, CostoMto, SemestreNo, MateriaNom)
Values(‘CB-001’, 150, 1, ‘Computacion’,)

123
Inserción Masiva
 Hacer uso del comando SELECT para seleccionar
datos de una tabla e insertarlos en otra
 Nombres de las columnas: Aplican los mismos
criterios que cuando es una inserción simple
 Los tipos de datos deben ser compatibles con las
columnas arrojadas por el SELECT

INSERT [INTO] tabla ( col1, col2, … coln)


SELECT ( col1, col2, … coln)
FROM TABLA
Insert Materia
WHERE Condicion Select Clave, Nombre, Semestre, Costo
From TemporalMaterias
Where Costo > 350

124
Columnas con Default
 Si todas las columnas tienen valores DEFAULT es
posible escribir la cláusula DEFAULT VALUES en
lugar de los valores de las columnas
INSERT [INTO] nombre_tabla
DEFAULT VALUES
 Si sólo algunas columnas tienen valores
DEFAULT, solamente se especifica la palabra
DEFAULT en lugar del valor de la columna
INSERT [INTO] nombre_tabla (col1, col2, … coln)
VALUES (valor1, DEFAULT, … valorN)

125
Columnas no listadas
 Si el nombre de la columna no se especifica en el
comando INSERT debe:
 Permitir NULL la columna
 Ser una columna con tipo de dato TIMESTAMP
 Ser una columna con propiedad IDENTITY
 Tener asociado un DEFAULT
 Importante
 Las columnas con propiedad IDENTITY no se
deberán listar en el INSERT (tanto el nombre de
la columna como su valor)

126
Columnas EXECUTE
 Es posible ejecuitar stored procedures que
regresen un resultado con SELECT e insertarlo en
una tabla
 El procedimiento a ejecutar puede ser
 System Stored Procedure
 Stored Procedure realizado por el usuario
 Extended Stored Procedure
 Stored Procedure Remoto
 Comando DBCC

127
Insert EXECUTE
 Sintaxis
INSERT INTO {tabla|vista} [(columns)]
{DEFAULT VALUES | valores | select | EXEC}

 El resultado del procedimiento debe


 Tener la misma cantidad de columnas que las
citadas en el INSERT, regresadas en el mismo
orden y deben de corresponder a los tipos de datos

INSERT INTO Alumno


EXEC Rodhe.Inscripciones.dbo.spSelAlumno

128
Actualización de Registros
 la clausulaUPDATE actrualiza los atributos
y registros que se especifican
 Solamente se puede hacer UPDATE sobre
una tabla a la vez
 Pero es posible realizar un UPDATE sobre
una tabla consultando los valores de otra
 Si al realizar la actualización SQL Server
detecta que no se cumple alguna de las
restricciones de la tabla, el UPDATE no se
realiza

129
Actualización de Registros
 Actualización Simple

UPDATE tabla_a_actualizar
SET columna1 = {DEFAULT | NULL | VALOR},
columna2 = {DEFAULT | NULL | VALOR}
WHERE Condicion

 La Cláusula WHERE puede contener lo


mismo que el WHERE del SELECT

130
Actualización de Registros
 En la cláusula FROM se definen las tablas de
las cuales se pueden realizar comparaciones
para realizar una operación de UPDATE
UPDATE Tabla
SET Col1 = (Select Sum(col2) from Tabla2)
Where Col1 = xxxx

Update Tabla1 Update Tabla1


Set Col1 = xxx Set Col1 = xxx
Where Tabla1.Col1 IN From Tabla2
(Select Col1 From Tabla2 Where Tabla1.Col1 = Tabla2.Col1
Where Condicion)

131
Actualización de Registros
 Un UPDATE nunca actualiza un renglón más de
una vez, esto se diseño para minimizar la
cantidad de actualzaciones que se registran en
el LOG de transacciones

132
Eliminación de Registros
 Es posible eliminar uno o más renglones
de una tabla
 Solamente se pueden eliminar renglones
de una tabla a la vez
 El renglón se elimina físicamente de la
tabla
 Se puede especificar la cláusula WHERE
para especificar criterios de eliminación. Si
no se especifica WHERE se elimina toda la
tabla

133
Eliminación de Registros
 Elimina toda la tabla
DELETE [FROM] tabla_a_borrar

 Elimina ciertos registros


DELETE Tabla
WHERE Columna1 > 100
And Columna2 = ‘NY’

DELETE Tabla1 DELETE From Tabla1


WHERE COL1 IN FROM Tabla2
(Select Col1 from tabla2 Where Tabla1.Col1 =
Tabla2.Col1
Where Condicion)
134
Repaso
 Inserción de Registros

 Actualización de Registros

 Eliminación de Regsitros

135
136
Temario
 Integridad de Datos
 Métodos de integridad de datos
 IDENTITY
 DEFAULTS
 Reglas
 CONSTRAINTS
 Comparación de los métodos

137
Integridad de datos
 Tipos de Integridad
 De Entidad
○ Todos los renglones tienen un identificador único (PK)
 De Dominio
○ Conjunto de valores que puede tomar una columna
(tipo de dato, formato, valores nulos o no)
 Referencial
○ Asegura que los valores que tome una llave foránea de
una tabla X existan en una llave primaria de una tabla
Y
 Definida por el usuario
○ Reglas especificas del negocio

138
Métodos de Integridad de datos
 Implementación de Integridad Declarativa
 Se declara como parte de la definición de la base de
datos
 Es asegurada de manera automática por SQL
Server
 Usando constraints, defaults y rules
 Implementación de Integridad Procedimental
 Los criterios se definen en un script
 Es asegurada mediante la secuencia de comandos
del script
 Usando triggers y stored procedures

139
IDENTITY
 Esta propiedad ayuda en la implementación de la
integridad de la entidad, con la generación
automática de números secuenciales
 Sólo una columna IDENTITY por tabla
 No permite valores NULL
 Puede ser usada con los siguientes tipos de datos
 Tinyint, smallint, int
 Numeric, decimal (especificando 0 en la escala)
 La variable global @@IDENTITY regresa el último
valor identity insertado

140
IDENTITY
 Se utiliza en el CREATE TABLE, ALTER TABLE
 Si se realiza un SELECT INTO la columna de la
nueva tabla hereda esta propiedad
 Especificar la semilla (a partir de que valor va a
generar los números) y el incremento (para
generar el siguiente valor)
Create Table Alumno
(Alumno int NOT NULL IDENTITY
Nombre char(20) NOT NULL)
Alter Table Maestro
Add
MaestroId tinyint NOT NULL IDENTITY(5,10)

141
IDENTITY
 Con IDENTITYCOL no es necesario recordar el
nombre de la columna IDENTITY
 Si se hace un DELETE de todos los renglones el
valor de IDENTITY continua en el que se quedó
 Se se hace un TRUNCATE TABLE el valor vuelve
a iniciar en la semilla
Update Alumno
Set Nombre = ‘Carlos Perales’
Select IDENTITYCOL, Nombre Where IDENTITYCOL=10
From Alumno

Delete Alumno
Where IDENTITYCOL between 10 and 20

142
IDENTITY
 El valor de las columnas IDENTITY no se
puede actualizar de manera directa
 Se puede explicitamente dar un valor a
una columna IDENTITY realizando:
 SET IDENTITY_INSERT tabla ON
 Para checar y/o corregir el valor actual de
una columna IDENTITY:
 DBCC CHECKIDENT (table)

143
DEFAULTS
 Util para implementar integridad de dominio
 Definen el valor que una columna tomará si no se
especifica la columna en la clausulaINSERT

Create Default defTelefono


As ‘(000)000-0000’

 Puede ser reutilizado en múltiples columnas


Definición de la Sin Valor Sin Valor Valor NULL Nalor NULL
Columna No Default Default No Default Default
NULL NULL default NULL NULL
NOT NULL error default error error

144
Reglas
 Util para implementar la integridad de dominio
 Definen el rango de valores posibles para una
columna
 Es verificadocada vez que se inserta o actualiza una
columna
 Puede ser reutilizada para múltiples columnas
Create Rule Alumno_Clave
As @Clave = 10 and @Clave = 20

Create Rule Alumno_Rango


As @Rango between 1000 and 20000

Create Rule Nombres_Permitidos


As @Nom in (‘MX’, ‘US’, ‘LA’)
145
Asignación de Reglas y Defaults
 Primero se debe de crear la regla o default
 Ligarla a una columna o tipo de dato definido
por el usuario
Ligar un DEFAULT: Ligar una REGLA:

EXEC sp_bindefault EXEC sp_bindrule


Nombre_Default Nombre_Regla
Columna_o_tipodato Columna_o_tipodato

Ejemplo: Ejemplo:

EXEC sp_bindefault EXEC sp_bindrule


defTelefono, ‘Alumno.Telefono’ Alumno_Rango, TipoDato_Alumno

146
Borrar Reglas y Defaults
 Es necesario primero desligar los defraults o reglas
antes de borrarlos
 Una vez desligados es posible borrarlos
 Desligar:
EXEC sp_unbindefault Nombre_Default, Nombre_Objeto
EXEC sp_unbindrule Nombre_Default, Nombre_Objeto

 Borrar
DROP DEFAULT Nombre_Default, Nombre_Default, etc
DROP RULE Nombre_Regla, Nombre_Regla, etc

147
Constraints
 Ayudan a conservar la integridad de los
datos
 Dominio ( DEFAULT, CHECK)
 De Entidad ( PRIMARY KEY, UNIQUE )
 Referencial ( FOREIGN KEY, CHECK )

 Limitaciones:
 Mensajes de Error
 No pueden ser reutilizados entre múltiples tablas

148
Constraints
 Se definen durante la creación de la tabla o
mediante el comando ALTER TABLE
 Con ALTER TABLE pueden agregarse o
eliminarse
 Se pueden aplicar a una columna (restricción de
columna) o a varias columnas (restricción de
tabla)
 Se almacenan en syscomments, sysreferences y
sysconstraints
 Al borrar la tabla, se eliminan todos sus
constraints

149
Constraints
 Si no se cumple una restricción la
clausulatermina, pero no termina la
transacción
 Los triggers son ejecutados después de
que los constraints son evaluados
 Para obtener información de contraints se
pueden usar los Store Proceduresdel
sistema, sp_helpconstraint, sp_help o
mediante las vistas del esquema de
información como check_constraints,
referential_constraints, y table_constraints

150
Constraints
 PRIMARY KEY
 Conjunto de columnas que identifican de forma
única a cada renglón de una tabla
 UNIQUE
 Conjunto de columnas que no pueden repetir su
valor entre más de un renglón de la misma tabla
 FOREIGN KEY
 El valor de una columna de una tabla debe
existir (como clave primaria) en otra tabla

151
Constraints
 DEFAULT
 Si el usuario no incluye la columna en la
clausulaINSERT, la columna toma el valor dado
en el DEFAULT
 CHECK
 Especifica el dominio de valores que pueden
ser insertados en una columna

152
Constraint PRIMARY KEY
 Solo puede haber una definición de
Primary Key por tabla
 No se permiten valores nulos en los datos
(definir las columnas como not null
 Se pueden definir en una o varias
columnas
 La información de las columnas debe ser
única

153
Constraint PRIMARY KEY
 Crea un índice clustered o nonclustered (si
no se especifica el tipo lo crea como
clustered)
 El índice creado para esta restricción no
puede eliminarse con el DROP INDEX (se
elimina al quitar la restricción)
 Si se desea replicar la información es
necesario que exista el Primary Key

154
Constraint PRIMARY KEY
 Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
PRIMARY KEY [CLUSTERED |
NONCLUSTERED]
{ (columna [,…n] ) }
 Ejemplo
Alter Table Alumno
Add
Constraint pkAlumno
PRIMARY KEY CLUSTERED (AlumnoID)

155
Constraint UNIQUE
 Semejante a PRIMARY KEY, con la
diferencia de que si permite valores nulos
 Se puede aplicar una restricción UNIQUE
a las columnas que deban tener valores
exclusivos y que no sean la llave principal
de la tabla
 No puede existir más de un renglón con el
valor de NULL (en caso de que las
columnas permitan nulos)
 Se puede definir en una o varias columnas

156
Constraint UNIQUE
 Puede existir más de una declaración
UNIQUE por tabla
 Crea de manera automática un índice
único (clustered o nonclustered)
 Se se crea en una tabla con datos, no
pueden existir valores duplicados en más
de un renglón

157
Constraint FOREIGN KEY
 Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
UNIQUE [CLUSTERED | NONCLUSTERED]
{ (columna [,…n] ) }
 Ejemplo
Alter Table Empleado
Add
Constraint uEmpleado_Licencia
UNIQUE NONCLUSTERED
(LicenciaConductor)

158
Constraint FOREIGN KEY
 Valida la existencia de una clave primaria
para la clave foránea que se está
insertando
 El número de columnas, el orden y tipos de
datos especificados deben ser iguales en
ambas tablas
 Debe referenciar a un constraint UNIQUE
o PRIMARY KEY de otra tabla
 No crea índices automáticamente

159
Constraint FOREIGN KEY
 Los usuarios deben tener permiso de
SELECT o REFERENCES sobre las tablas
referenciadas
 Si se especifica WITH NOCHECK no se
verifican los valores existentes en la tabla
 Se verifican antes que los triggers

160
Constraint UNIQUE
 Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
FOREIGN KEY { (columna [,…n] ) }
REFERENCES tabla_referencia { (columna
[,…n] ) }
 Ejemplo despues de creada la tabla
Alter Table Estado WITH NO CHECK
Add
Constraint fkEstadoPais
FOREIGN KEY (PaisId)
REFERENCES Pais (PaisId)

161
Constraint DEFAULT
 Equivalente al CREATE DEFAULT
 No es necesario realizar un bind a las
columnas
 Sólo se puede crear un default por
columna
 No puede usarse en columnas con la
propiedad IDENTITY, o con el tipo de dato
timespamp

162
Constraint DEFAULT
 Sólo se aplica a las instrucciones INSERT
 Permite incluir en el valor del default
algunos valores proporcionados por el
sistema, como:
 USER
 CURRENT_USER
 SESSION_USER
 SYSTEM_USER
 CURRENT_TIMESTAMP

163
Constraint DEFAULT
 Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
DEFAULT expresionConstante
[FOR columna]
 Ejemplo despues de creada la tabla
Alter Table Alumno
Add
Constraint dfNacionalidad
DEFAULT ‘Mexicano’
FOR NacionalidadID

164
Constraint CHECK
 Equivalente al CREATE RULE
 No puede contener subqueries
 No es necesario realizar un bind a las
columnas
 Si se especifica WITH NOCHECK no se
verifican los valores existentes

165
Constraint CHECK
 Es utilizada con las intrucciones de
INSERT y UPDATE
 Puede hacer referencia a otras columnas
de la misma tabla (a diferencia de la reglas
creadas con el CREATE RULE)
 No pueden usarse en columnas con la
propiedad IDENTITY,ocon los tipos de
datos timespamp o uniqueidentifier

166
Constraint CHECK
 Sintaxis Parcial
[ CONSTRAINT nombre_constraint ]
CHECK ( expresion_logica )

 Ejemplo despues de creada la tabla


Alter Table Alumno
Add
Constraint chkTelefono CHECK
(Telefono like ‘([0-9] [0-9] [0-9]) [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]
[0-9]’)

167
Borrando un CONSTRAINT
 Especificar el nombre del constraint para
eliminarlo de una tabla
 Se puede borrar más de un constraint a la
vez
 Sintaxis Parcial
Alter Table Nombre_tabla
Drop Constraint nombre_constraint
 Ejemplo
Alter Table Alumno
Drop Constraint chktelefono, dfnacionalidad

168
Constraints VS Otras Implementaciones

Tipo de Constraint Otras Implementaciones

PRIMARY KEY Create Unique Index

UNIQUE Create Unique Index

FOREIGN KEY / Create Trigger o


REFERENCE Create Proc
DEFAULT Create Default

CHECK Create Rule

169
Comparación de Métodos
Performance

CONSTRAINTS,
Tipos de Datos Triggers,
Reglas,
(Sistema, definidos Stored
Defaults
por el usuario), Procedures
Null / Not Null

Funcionalidad
170
Repaso
 Integridad de datos
 Métodos de integridad de datos
 IDENTITY
 DEFAULTS
 Reglas
 CONSTRAINTS
 Comparación de los métodos

171
172
Temario
 Introducción a las Vistas
 Ventajas de las Vistas
 Creación de Vistas
 Restricciones del Uso de Vistas
 Modificación y Elimnación de Vistas
 Obtención de Información de Vistas
 Modificación de Datos mediante Vistas

173
Introducción a las Vistas
 Una vista es una forma de ver los datos de
una o más tablas
 Se guardan como objetos de la base de
datos
 Algunos ejemplos de vistas incluyen:
 Un subconjunto de renglones y columnas de
una tabla
 Un join entre dos o más tablas
 Una unión de dos o más tablas
 Un subconjunto de otra vista
 Una combinación de vistas y tablas

174
Ventajas de las Vistas
 Se centra la atención solo sobre aquellos
datos que le interesan al usuario
 Simplifican el esquema de permisos sobre
los objetos
 Se limita el acceso a datos específicos,
ocultando el resto
 Ocultan la complejidad de las consultas
sobre los datos
 Los Usuarios pueden modificar los datos a
través de las vistas

175
Creación de Vistas
 Para poder crear una vista, es necesario tener
alguna de las siguientes funciones: sysadmin,
db_owner, db_ddladmin, o tener permiso de
CREATE VIEW
 Es necesario tenerl el permiso de SELECT sobre
todas las tablas o vistas a las que haga referencia
 Sintaxis
CREATE VIEW propietario.nombreVista [(columna[, n…])]
[WITH ENCRYPTION]
AS
Instruccion SELECT
[WITH CHECK OPTION]

176
Creación de Vistas
 Al crear una vista, se debe especificar el nopmbre
de las columnas cuando:
 La columna se deriva de alguna expresión aritmética,
función integrada o de una constante
 Existen columnas con el mismo nombre en las tablas que
están involucradas en el select
 Antes de crear la vista, es recomendable verificar
que el SELECT regrese los resultados esperados
 WITH ENCRYPTION: encripta la definición de la
vista
 WITH CHECK OPTION: verifica que los cambios
que se hacen a los datos de la vista cumplan con
la condición del WHERE definido al crear la vista

177
Ejemplos de Vistas
Vista informativa no actualizable
CREATE VIEW VistaInformativa
AS
Select GETDATE() as FechaActual,
Vista con JOINS entre tablas
Current_User as UsuarioActual
CREATE VIEW VistaAlumnoMateria
AS
Select a.MatriculiaId, m.MateriaCve
Vista con UNION de dos tablas FROM Alumno a, AlumnoMateria m
CREATE VIEW VistaAlumnos WHERE a.MatriculaId = m.MatriculaId
AS
Select * from AlumnoCampusMty
UNION
Select * from AlumnoCampusMex
UNION
Select * from AlumnoCampusGdl

178
Restricciones del Uso de Vistas
 La instrucción SELECT de la vista no
puede incluir las cláusulas ORDER BY,
COMPUTE, COMPUTE BY
 No es posible usar el INTO para crear una
tabla en una vista
 No se pueden referenciar tablas
temporales
 Se pueden incluir hasta 1,024 columnas

179
Modificación y Eliminación de Vistas

 Usar el ALTER VIEW para modificar una


vista, con lo cual se permite mantener los
permisos asignados
 Si al crear la vista se usan las opciones WITH
CHECK OPTION o WITH ENCRYPTION, al
modificar la vista deberán incluirse también
estas opciones para manteener su
funcionalidad
 Para Borrar una vista se debe usar la
instrucción DROP VIEW

180
Ejemplos de Modificación y Borrado
Vistas

Modificación
Alter View VistaAlumno
As
Select MatriculaId, PaternoApellido,
Nacionalidad
From Alumno

Borrado
DROP VIEW VistaAlumno

181
Obtención de Información de Vistas
 Utilizar el SQL Enterprise Manager o alguno de los
siguientes objetos:

INFORMATION_SCHEMA.TABLES / sysobjects Nombre de Vistas

INFORMATION_SCHEMA.VIEW_TABLE_USAGE / Nombre de objetos base


sysdepends
INFORMATION_SCHEMA.VIEWS / comments Definición de Vistas

INFORMATION_SCHEMA.VIEW_COLUMN_USAGE / Columnas definidas en una


syscolumns vista

 También puede utilizarse el sp_helptext NombreVista

182
Obtención de Información de Vistas
 Si al crear la vista se utilizó la opción WITH
ENCRYPTION la información sobre la definición
de la vista no estará disponible
 Para descifrar el texto de una vista encriptada
deberá borrarla y volverla a crear, o usar el ALTER
VIEW utilizando la sintaxis original
 Para obtener información de las tablas o vistas de
las que depende una vista, y de los objetos que
depeneden de una vista determinada, se puede
utilizar sql SQL Enterprise Manager o ejecutar el
sp:
○ sp_depends nombreVista

183
Modificación de Datos mediante
Vistas
 Al modificar los datos de una vista se está
modificando la información en la tabla base
 Las modificaciones de datos a través de vistas:
 Solo pueden afectar a una tabla
 No pueden afectar a ciertas columnas (por ejemplo,las
que son resultado de un cálculo)
 Pueden generar erores si afectan columnas no incluidas
en la definición de la vista (por ejemplo, si se hace
referencia a columnas no incluidas en la vista y que en la
definición de la tabla no aceptan valores NULL ni tienen
valores por DEFAULT)
 Se comprueba que la actualización sea valida, cuando se
usa la opción WITH CHECK OPTION

184
Repaso
 Introducción a las Vistas
 Ventajas de las Vistas
 Creación de Vistas
 Restricciones del Uso de Vistas
 Modificación y Elimnación de Vistas
 Obtención de Información de Vistas
 Modificación de Datos mediante Vistas

185
186
Temario
 Stored Procedures
 Sintaxis
 Parámetros
 Valores Regresados
 Stored Procedures de Sistema
 Startup Stored Procedures
 Programación
 Declaración de Variables
 Clausulas de control
 Ciclos

187
Stored Procedures
 Un stored procedure es un procedimiento
que es llamado por el usuario o por otro
procedimiento y realiza una función
especifica
 Es posible definir permisos de ejecución
sobre los stored procedures, por lo que no
es necesario que los usuarios tengan
acceso directo a las tablas
 Acepta parametros de entrada

188
Stored Procedures
 Dentro de ellos se pueden realizar
operaciones de búsquedas y regresar un
resultado en uno o más selects (result set),
operaciones de modificación de
información o ambas.
 Hay 5 tipos de stored procedures
 Del Sistema
 Locales
 Temporales
 Remotos
 Extendidos

189
Procesamiento de Stored Procedures

 Procesamiento Inicial
 Creación y ejecución del SP por primera vez, se coloca su
plan de ejecución en la caché de procedimientos
(procedure caché, que es donde se encuentran los planes
de ejecución de los SP´s mpas importantes, los cuales
son los utilizados con mayor frecuencia y/o los que
requieren mayor tiempo para compilar)

 Procesamientos posteriores
 Es más rápido que el procesamiento inicial porque SQL
Server utiliza el plan de ejecución que está en procedure
caché

190
Procesamiento Inicial
 Creación
 Se verifica que las instrucciones que hay en el SP sean
correctas semánticamente. SQL Server registra el nombre
del SP en la tabla sysobjects y el texto en syscomments
 En caso de que haya error en la sintaxis, el SP no se crea
y se envía un mensaje de error
 Es posible hacer referencia a objetos que no existen al
momento de crear el SP (esto es conocido como
resolución diferida de nombres); sin embargo, al momento
de la ejecución todos los objetos referenciados deben
existir

191
Procesamiento Inicial
 Ejecución (Por primera vez o
recompilación)
 La primera vez que se ejecuta un SP o cuando
éste se debe volver a compilar, SQL Server
realiza un proceso llamado resolución
○ Optimización
 SQL Server crea un plan que contiene el método
más rapido para accesar a los datos
○ Compilación
 Este proceso consiste en analizar el SP y crear un
plan de ejecución que será colocado en procedure
cache

192
Procesamientos Posteriores
 SQL Server reutiliza el plan de ejecución
que se encuentra en procedure cache si:
 El entorno en que se compiló el plan es el mismo al actual
(configuraciones del servidor, de la base de datos y de la
conexión)
 Los objetos a los que se hace referencia dentro del SP no
requieren el proceso de resolución de nombres (este
proceso se realiuza cuando hay objetos con el mismo
nombre pero que pertencen a diferentes usuarios)
 SQL Server retira de procedure cache los
planes más antiguos y sin usar cuando
necesita espacio

193
Ventajas de los Stored Procedures
 Procedimientos reutilizables
 Restringe el acceso directo a las tablas
 Facilita el esquema de permisos
 Menjor rendimiento de ejecución
 Reduce el tráfico por la red

194
Sintaxis de los Stored Procedures
Create Procedure [owner.]nombre
[;number]
[lista de parametros]
[with
{ RECOMPILE | ENCRYPTION | RECOMPILE ,
ENCRYPTION } ]
[FOR REPLICATION]
AS
[BEGIN]
clausulas
[END]

195
Sintaxis de los Stored Procedures
 ;number
 Para agrupar SP´s con el mismo nombre de forma que
puedan ser borrados con un solo DROP PROCEDURE
 WITH RECOMPILE
 Cada vez que se ejecuta el stored procedure se vuelve a
recompilar y a crear su plan de ejecución
 WITH ENCRYPTION
 El código del stored procedure se encripta, no puede ser
visto con sp_helptext
 FOR REPLICATION
 Utilizado por el replicador

196
Restricciones y Reglas
 No se pueden hacer uso de CREATE VIEW,
CREATE TRIGGER, CREATE DEFAULT, CREATE
PROCEDURE y CREATE RULE dentro del stored
procedure
 Se pueden tener hasta 1,024 parámetros
definidos
 El número máximo de variables locales está
limitado por la memoria disponible
 Se pueden tener hasta 32 niveles de anidamiento
de SP’s

197
Restricciones y Reglas
 El tamaño máximo de un SP es de 128MB
 Al declarar variables y parámetros se permite
utilizar tipos de datos definidos por el usuario
 Se pueden crear tablas temporales locales que
son destruidas al salir de él. Tablas temporales
globales se pueden usar aún y cuando se hayan
creado fuera de él
 El número de transacciones debe ser igual al
inicio y al final del stored procedure

198
Parámetros
 Es posible definir valores defaults para los
parámetros
 Estos valores se sustituirán en caso de que no
sea enviado algún valor en ese parámetro
 Los valores que pueden asignarse como default
debe ser constantes o NULL

Create Procedure spInsAlumno


@Nacionalidad tinyint = 1,
@Carrera char(4) = Null,
@AlumnoNom Nombre,
@PaternoApellido Apellido,
@MaternoApellido Apellido OUTPUT,

199
Parámetros
 Tipos de parámetros

 Por valor: el valor del parámetro puede cambiar,


pero su valor se perderá al salir del stored
procedure (comportamiento default)

 Por referencia: el valor del parámetro puede


cambiar y su valor no se perderá al salir del
stored procedure (es necesario definir la
palabra OUTPUT en la declaración del
parámetro y al llamar al stored procedure)

200
Ejecución
 Se ejecután con la clausulaEXECute
 Es posible pasar los valores de los
parámetros directamente:

Exec spInsAlumno 1,’ISC’,@AlumnoNom, ‘Limon’, ‘Peña’

 Los parámetros deben estar en el orden declarado


 Es posible omitir valores de los parámetros 4 y 5 para que
tomen su valor default (en caso de que lo tuvieran)
únicamente si son ambos. No es posible omitir el
parámetro 1 únicamente

201
Ejecución
 Nombrar los parámetros antes de enviar su
valor (recomendable)
Exec spInsAlumno
@Nacionalidad = 1,
@Carrera = ’ISC’,
@AlumnoNom = @AlumnoNom,
@PaternoApellido = ‘Limon’,
@MaternoApellido = ‘Peña’
 Los parámetros pueden estar en desorden
 El nombre del parámetro debe corresponder con la
definición del Stored Procedure
 Se puede omitir cualquier parámetro para que tome su
default

202
RETURN
Create Procedure spInsAlumno
 Utilizado @Nacionalidad tinyint = 1,
generalmente para @Carrera
@AlumnoNom
char(4) = Nu
Nombre,
regresar si el stored @PaternoApellido Apellido,
@MaternoApellido Apellido OU
procedure terminó As
BEGIN
con errores o Insert into Alumno
correctamente (NacionalidadId, CarreraID, …)
Values (@Nacionalidad, @Carre
 Variable tipo int IF @@rowcount = 0
RETURN 1
RETURN 0
END

203
Stored Procedures del Sistema
 Se instalan al instalar SQL Server
 Inician con sp_
 Se encuentran en master
 Pueden ser ejecutadas desde cualquier base
de datos
 Ejemplos
sp_help sp_lock
sp_addlogin sp_adduser
sp_message sp_addalias
sp_helptext sp_rename
sp_addserver

204
Startup Stored Procedures
 Son ejecutados automáticamente cuando arranca
SQL Server
 Inician cuando la última base de datos es
recuperada
 Deben ser creados por el sa y esta en master
 No hay limite de startup stored procedures
 Cada stored procedure ejecutado consume una
conexión
 Usar el comando sp_procoption para marcar los
startup stored procedures

205
Programación
 Batch
 Conjunto de clausulas que se compilan todos juntos
 Denotado por la palabra GO
 Se pueden realizar batches en DOS y ejecutarlos en
ISQL
 Si ocurre un error, no se ejecuta ningún comando
del batch
 Script
 Conjunto de batches enviados al servidor uno detrás
de otro, si ocurre un error en uno, el programa que
los envía tiene la decisión de enviar o no el siguiente

206
Declaración de Variables
 DECLARE
 Se asigna un valor con SELECT
@variable=valor
 Variables globales ya definidas
@@Connections @@SPID
@@Cursors_Rows @@DBTS
@@Error @@Fetch_Status
@@Identity @@Max_Connections
@@Version @@RowCount
@@NestLevel @@ProcID
@@ServerName @@ServiceName
@@TranCount

207
Mensaje de Error
 RAISERROR
 Mensajes de usuario tienen que ser mayores a
50000
 Se pueden insertar en el Event Viewer
 Se pueden definir e insertar en sysmessages
con:
sp_addmessage o sp_dropmessage

RAISERROR ({ Mensaje_Id | Mensaje_Str },


severidad, state, [arg1, [arg2..]])
[WITH LOG]

208
Clausulas Print y Case
 PRINT
 Se puede imprimir un string o variable
PRINT { “String” | @var_local | @@var_global }

 CASE
CASE expresion
WHEN expresion1 then expresion1
[WHEN] expresion2 then expresion2…
[ELSE expresion]
END

209
Clausulas de Control
 BEGIN … END
 Denotan Inicio y Fin de un bloque

 IF … ELSE
 Clausula Condicional
IF EXISTS ( Select MatriculaId from alumno
Where MatriculaId = @MatriculaId )
BEGIN
Delete AlumnoMateria
Where MatriculaId = @MatriculaId
END
ELSE
PRINT “No Existe”

210
Ciclos
 WHILE
 Repetición mientras la condición se cumple
 BREAK … CONTINUE
 Utilizado en el WHILE
 Se termina el ciclo BREAK
 Se regresa al inicio del ciclo CONTINUE
WHILE @MatriculaID IS NOT NULL
BEGIN
Clausulas
If @matriculaId = 1
Continue
Else
Clausulas
END

211
Clausula EXEC
 EXEC
 Ejecuta un stored procedure, system stored procedure,
extended stored procedure o un string
DECLARE @BasedeDatos Varchar(30)
Select @BasedeDatos = ‘Ventas’
EXEC(@BasedeDatos + ‘..spSelVentasDelMes’)

EXEC(‘Select * from Cliente’)

212
Cursores
 Mas rapidos que el utilizar WHILE
 Procesan un rengl[on a la vez
 La información se almacena en tempdb
 Para crear un cursor
DECLARE CURSOR nombre
[INSENSITIVE][SCROLL] CURSOR
FOR clausula_Select
[FOR {READ ONLY | UPDATE [OF columnas] } ]

213
Cursores
 Para abrir un cursor
 OPEN nombre_cursor

 Para Solicitar datos del cursor


FETCH [ [NEXT | PRIOR | FIRST | LAST |
ABSOLUTE n | RELATIVE n ]
FROM ] nombre_cursor
[INTO variables]

214
Cursores
 Para cerrar el cursor
CLOSE nombre_cursor

 Para destruir el cursor


DEALLOCATE nombre_cursor

215
Repaso
 Stored Procedures
 Sintaxis
 Parámetros
 Valores Regresados
 Stored Procedures de Sistema
 Startup Stored Procedures
 Programación
 Declaración de Variables
 Clausulas de control
 Ciclos

216
217
Temario
 Introducción a los Triggers
 Creación de Triggers
 Modificación y Eliminación de Triggers
 Triggers anidados
 Triggers Recursivos

218
Introducción a los Triggers
 ¿Qué es un Trigger?
 Caracteristicas de los Triggers

219
¿Qué es un Trigger?
 Es una clase especial de stored procedure
que se ejecuta de manera automática cada
vez que se modifican los datos de la tabla
a la cual está asociado

220
Caracteristicas de los Triggers
 Los triggers se definen para una tabla específica
(no puede ser tabla temporal ni vista)
 No pueden ser ejecutados directamente (se
ejecutan de manera automática)
 No aceptan parámetros
 Los triggers pueden ser utilizados para reforzar la
integridad de los datos de una forma más
compleja que con el uso de CONSTRAINTS

221
Caracteristicas de los Triggers
 Permiten realizar cambios en cascada sobre
tablas relacionadas
 Pueden enviarse mensajes de error
personalizados (predefinidos o construidos
dinámicamente mediante el RAISERROR)
 Utilizados para reforzar las reglas del negocio
 Se pueden comparar los datos antes y después
de que sean modificados

222
Caracteristicas de los Triggers
 Si la tabla tiene un CONSTRAINT se ejecuta primero y
si ocurre un error el trigger no es disparado ( los
triggers son reactivos, las restricciones son proactivas
)
 Las tablas pueden tener varios triggers asociados de la
misma acción (insert, update, delete)
 Si la tabla es borrada, sus triggers asociados son
eliminados automáticamente
 Se recomienda no regresar resultados (con select)
 Un trigger siempre está dentro de una transacción
implicita (clausula)
 Un Rollback dentro del trigger destruye la transacción
implicita y la transacción de mayor jerarquía.

223
Creación de Triggers
 Sintaxis
 Tipos de Triggers
 Comandos no permitidos
 Consideraciones

224
Sintaxis
CREATE TRIGGER [owner.]nombre_trigger
ON [owner.]nombre_tabla
[ WITH ENCRYPTION ]
{ FOR { INSERT | UDATE | DELETE }
AS
[ IF UPDATE (nombre_columna)…]
[ { AND | OR } UPDATE (nombre_columna)…]
instruccionesSQL }

225
Sintaxis
 WITH ENCRYPTION
 El código del trigger se encripta, no puede ser
visto con sp_helptext
 FOR INSERT | UPDATE | DELETE
 Define el tipo de trigger. La acción que lo va a
activar
 IF UPDATE
 Aplica sólo para triggers de UPDATE, para
verificar si hubo cambio en una columna

226
Tipos de Triggers
 Trigger de INSERT

 Trigger de DELETE

 Trigger de UPDATE

227
Trigger de Insert
 Se inserta el renglón en la tabla final (origen)
 Se crea una tabla de paso llamada inserted
que es destruida al terminar el trigger
 En esta tabla se almacenan los renglones
insertados y con ellos se pueden realizar
validaciones
 Si las validaciones que se tienen en el trigger
no se cumplen es necesario realizar un
ROLLBACK TRANSACTION para que los
renglones no sean insertados en la tabla final

228
Trigger de Insert
 Ejemplo:
“Validar que al dar de alta un Alumno, la Nacionalidad sea
válida”
CREATE TRIGGER trInsAlumno
ON Alumno
FOR INSERT
AS
IF @@ROWCOUNT <> 1
RETURN
IF NOT EXISTS ( Select n.* from Inserted I, Nacionalidad n
Where i.NacionalidadId = n.NacionalidadID )
BEGIN
RAISERROR 50000 “La Clave de nacionalidad no es valida”
ROLLBACK TRANSACTION
RETURN
END

229
Trigger de Delete
 Se elimina el renglón de la tabla final
 Se crea una tabla de paso llamada deleted que es
destruida al terminar el trigger
 En esta tabla se almacenan los renglones
eliminados y con ellos se pueden realizar
validaciones
 No se realiza para el TRUNCATE TABLE
 Si las validaciones que se tienen en el trigger no se
cumplen es necesario realizar un ROLLBACK
TRANSACTION para que los renglones no sean
eliminados de la tabla final

230
Trigger de Insert
 Ejemplo:
“Validar que al dar de baja una materia, no esté asignada a un alumno”
CREATE TRIGGER trDelMateria
ON Materia
FOR DELETE
AS
IF @@ROWCOUNT <> 1
RETURN
IF EXISTS ( Select * from deleted
Where MateriaCve IN
( Select MateriaCve from AlumnoMateria )
BEGIN
RAISERROR 50000 “No es posible borrar la materia, esta asignada”
ROLLBACK TRANSACTION
RETURN
END

231
Trigger de Update
 Se crean dos tablas de paso, inserted y
deleted
 Inserted: tiene los renglones con las
modificaciones
 Deleted: tiene los renglones antes de ser
modificados
 Si las validaciones que se tienen en el trigger
no se cumplen es necesario realizar un
ROLLBACK TRANSACTION para que los
renglones no sean modificados
 Es posible utilizar la
clausulaUPDATE(columna)

232
Trigger de Update
 Ejemplo:
“Si hacen un cambio en el costo de la materia, registrarlo en una
bitácora”
CREATE TRIGGER trUpdMateria
ON Materia
FOR UPDATE
AS
DECLARE @CostoOld money,
@CostoNew money,
@MateriaCve char(6)
IF @@ROWCOUNT <> 1
RETURN
IF UPDATE(CostoMto)
BEGIN
Select @MateriaCve = MateriaCve, CostoNew = CostoMto
From Inserted
Select @CostoOld = CostoMto from Deleted
INSERT TablaBitacora
VALUES(@MateriaCve, @CostoOld, @CostoNew, GETDATE(), HOST_NAME,USER_NAME() )
END

233
Comandos No Permitidos
 Dentro de la definición del trigger no es
posible utilizar:
 Instrucciones CREATE (Database, Schema, Table, Index,
Procedure, Rule, Trigger, View)
 Instrucciones DROP
 ALTER (Table, Database, Procedure, View, Trigger)
 TRUNCATE TABLE
 GRANT, REVOKE, DENY
 UPDATE STATISTICS
 RECONFIGURE
 LOAD DATABASE y LOG, RESTORE DATABASE y LOG

234
Consideraciones
 Las tablas inserted y deleted están
siempre en memoria caché
 El tiempo de ejecución del trigger está
determinado por el número de tablas
referenciadas y el número de renglones
afectados
 Las acciones contenidas en un trigger
forman parte de una transacción

235
Modificación y Eliminación de Triggers

 Modificación de un Trigger
 Cambios en la definición sin quitar el trigger
ALTER TRIGGER nombre_trigger
ON tabla
[ WITH ENCRYPTION ]
{ FOR { [,] [DELETE] [,] [UPDATE] [,] [INSERT] } }
AS
INSTRUCCIONES SQL

236
Modificación y Eliminación de Triggers

 Deshabilitar / Habilitar un trigger


ALTER TABLE tabla
ON tabla
{ ENABLE | DISABLE } TRIGGER
{ALL | nombre_trigger [,…n]}

 Eliminación de un Trigger
DROP TRIGGER nombre_trigger

237
Triggers Anidados
 Se pueden tener hasta 32 niveles de
anidamiento
 La variable @@NESTLEVEL permite ver el
nivel actual de anidamiento
 Es posible deshabilitar la opción de
anidamiento usando: sp_configure ‘nested
triggers’, 0
 Si un trigger es una cadena de anidamiento
provoca un conflicto infinito, el nivel de
anidamiento se superará terminado el trigger y
deshaciendo la transacción

238
Triggers Recursivos
 Cuando la opción de triggers recursivos
está habilitada, un trigger puede activarse
de nuevo a si mismo. Para dehabilitar esta
opción usar:
 Sp_dboption nombreBD, ‘recursive triggers’, True
 Si la opción de triggers anidados está desactivada
la de triggers recursivos también los estará (sin
importar la configuración que esta última tenga en
la BD)
 Las tablas inserted y deleted solo tendrán los
datos correspondientes a la instrucción insert,
update, o delete que lo invocó la última vez.

239
Repaso
 Introducción a los Triggers
 Creación de Triggers
 Modificación y Eliminación de Triggers
 Triggers anidados
 Triggers Recursivos

240

Potrebbero piacerti anche