0% encontró este documento útil (0 votos)
15 vistas593 páginas

Master en SQL Server

El documento presenta una introducción al Master en SQL Server, destacando los requisitos básicos y la estructura del curso. Se abordan conceptos fundamentales sobre bases de datos, tipos de bases de datos SQL y la importancia del lenguaje SQL. Además, se menciona Microsoft SQL Server como un sistema de administración de bases de datos relacional clave en el mercado.

Cargado por

DustinTc
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas593 páginas

Master en SQL Server

El documento presenta una introducción al Master en SQL Server, destacando los requisitos básicos y la estructura del curso. Se abordan conceptos fundamentales sobre bases de datos, tipos de bases de datos SQL y la importancia del lenguaje SQL. Además, se menciona Microsoft SQL Server como un sistema de administración de bases de datos relacional clave en el mercado.

Cargado por

DustinTc
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 593

Introducción al Master en SQL Server

Requisitos

➢Conocimientos mínimos sobre base de datos.

➢Sistema Operativo Windows

➢¡Muchas ganas de aprender!


Descripción de la Sección

Que son las Bases de Datos

Tipos de Base de datos SQL

Definición de Tabla, Campo y Registro

SQL(Structured Query Language)


¿Qué son las Bases de Datos?
¿Qué son las Bases de Datos?
Banco de Datos

Producto de la necesidad humana


de almacenar la información

1 3
Guías telefónicas Bibliotecas

2 4
Archivos personales Historial médico
¿Qué son las Bases de Datos?
Banco de Datos

Electrónica
60 Computación
¿Qué son las Bases de Datos?
Banco de Datos

Son sistemas organizados para almacenar y


gestionar grandes cantidades de información

Fácil recuperación manipulación actualización

Aplicaciones Sistemas
personales empresariales
Tipos de Bases de Datos
Tipos de Bases de Datos

Bases de Datos Relacionales Bases de Datos No Relacionales

Bases de Datos SQL Bases de Datos No SQL


Tipos de Bases de Datos

Bases de Datos Relacionales

Bases de Datos SQL

Las Bases de Datos Relacionales son las más


utilizadas como tecnología para la industria.

Inventario

SQL Ventas

Finanzas
Tipos de Bases de Datos

Bases de Datos Relacionales

Bases de Datos SQL


Tipos de Bases de Datos

Bases de Datos Relacionales

Bases de Datos SQL

Ventajas Desventajas

Estructura clara y definida Escalabilidad limitada en algunos casos

Consistencia e integridad de datos Cambios de esquema y flexibilidad

Soporte maduro y establecido Costos y licencias

Capacidad de consulta avanzada Rendimiento bajo cargas masivas

Transacciones Complejidad en la gestión y mantenimiento


Tipos de Bases de Datos


Bases de Datos No Relacionales

Bases de Datos No SQL

SQL API
Las Bases de Datos No Relacionales NO son estructuradas,
es decir no tienen un estructura bien definida.
Tipos de Bases de Datos

Bases de Datos No Relacionales

Bases de Datos No SQL

Clave - Valor Grafos

Documentales Columnas
Tipos de Bases de Datos

Bases de Datos No Relacionales

Bases de Datos No SQL

Ventajas Desventajas

Escalabilidad Horizontal Falta de estandarización

Flexibilidad de esquema Madurez relativa

Rendimiento optimizado para cargas específicas Consistencia vs Disponibilidad

Gestión de Big Data Menor énfasis en la integridad de datos

Adaptabilidad a las tendencias actuales Curva de aprendizaje


Definición de Tabla, Campo y Registro
Definición de Tabla, Campo y Registro

Tabla
CLIENTES
nombre paterno materno fecha nacimiento direccion ciudad

Alberto Woods Olsson 06/08/2000 Cra 50#32-16 Medellín

Ana Williams Coria 04/01/2001 Cra 100#6819 Bogotá Fila o


Sara Borg Byron 25/11/2003 Cra 72#95-20 Cali
Tupla
... ... ... ... ... ...
Texto Texto Fecha Texto Texto

Campo o
Columna
SQL
(Structured Query Language)
SQL
(Structured Query Language)

SQL es un lenguaje de programación estándar para


interactuar con las bases de datos relacionales.

(IBM) San José - California

Donald D. Chamberlin y Raymond F. Boyce


SQL
(Structured Query Language)

SQL es un lenguaje de programación estándar para


interactuar con las bases de datos relacionales.

Structured Query Language


Lenguaje de Consulta Estructurado

SEQUEL

SQL
SQL
(Structured Query Language)

SQL es un lenguaje de programación estándar para


interactuar con las bases de datos relacionales.

(70’s)
1974 - Primer sistema de gestión de bases de datos
relacional(IBM)

System R
SQL
(Structured Query Language)

SQL es un lenguaje de programación estándar para


interactuar con las bases de datos relacionales.

IBM ⟶ SQL

1977
(Relational Software, Inc)
SQL
(Structured Query Language)

80
American National Standards Institute (ANSI)

Organization for Standardization (ISO)


1986
SQL-86, SQL-89, SQL-92
SQL:1999, SQL:2003, SQL:2006
SQL:2008, SQL:2011, SQL:2016

El estándar ANSI SQL es un lenguaje de programación maduro y estable


SQL
(Structured Query Language)

1987 – Sybase System (Microsoft)

1989 – Microsoft SQL Server 1.0

90
1995 – MySQL (PHP)

1996 – PostgreSQL
SQL
(Structured Query Language)

2000 – SQLite

2009 – Oracle compra Sun Microsystems

2009 – MariaDB
SQL
(Structured Query Language)

SQL tiene los siguientes tipos de instrucciones

DDL DML DCL TCL


Data Definition Data Manipulation Data Control Transaction
Language Language Language Control Language

Lenguaje de Lenguaje de Lenguaje de Control Lenguaje de control


Definición de Datos Manipulación de Datos de Datos de transacciones

Estos 4 grupos de instrucciones son los que forman SQL


SQL
(Structured Query Language)

DDL
Lenguaje de Definición de Datos

Para definir las estructura disponemos de tres sentencias:

CREATE: Crear Objetos


Definir las estructuras que
ALTER: Modificar Objetos almacenarán los datos.

DROP: Eliminar Objetos


SQL
(Structured Query Language)

DML
Lenguaje de Manipulación de Datos

Los elementos que se utilizan para manipular los datos,


son los siguientes:

INSERT: Insertar Datos


Realizar tareas de consultas o
UPDATE: Modificar Datos modificación de los datos

DELETE: Eliminar Datos


SQL
(Structured Query Language)

DML
Lenguaje de Manipulación de Datos

Los elementos que se utilizan para manipular los datos,


son los siguientes:

SELECT: Consultar Datos

DQL: Data Query Language


Lenguaje de Consulta de Datos
SQL
(Structured Query Language)

DCL
Lenguaje de Control de Datos

Los comandos para controlar los permisos son los


siguientes:

GRANT: Otorga Permiso Administrar el Sistema Gestor


de Base de Datos y controlar el
acceso a los objetos
REVOKE: Elimina Permiso
SQL
(Structured Query Language)

TCL
Lenguaje de control de transacciones

Los comandos para controlar los permisos son los


siguientes:

COMMIT: Confirma Transacción

ROLLBACK: Deshace Transacción


controlar las transacciones en
una base de datos
SAVEPOINT: Punto de Guardado

SET TRANSACTION: Inicializa una transacción


SQL
(Structured Query Language)

Control de Flujo
IF ELSE WHILE
SQL
(Structured Query Language)

Álgebra Relacional

SELECT col1, col2, …, coln


FROM tablaa
WHERE condicióna
SQL
(Structured Query Language)

Álgebra Relacional
SELECT col1, col2, …, coln
FROM tablaa
WHERE condicióna
UNION Unión de Conjuntos

SELECT col1, col2, …, coln


FROM tablaa
WHERE condicióna
SQL
(Structured Query Language)

Álgebra Relacional
SELECT col1, col2, …, coln
FROM tablaa
WHERE condicióna
INTERSECT Intersección de Conjuntos

SELECT col1, col2, …, coln


FROM tablaa
WHERE condicióna
SQL
(Structured Query Language)

Álgebra Relacional
SELECT col1, col2, …, coln
FROM tablaa
WHERE condicióna
EXCEPT Diferencia de Conjuntos

SELECT col1, col2, …, coln


FROM tablaa
WHERE condicióna
SQL
(Structured Query Language)

Álgebra Relacional

SELECT col1, col2, …, coln


FROM tablaa, tablab
SQL
(Structured Query Language)

Álgebra Relacional

SELECT col1a, col2a, …, col1b, col2b


FROM tablaa
JOIN
tablab
ON col1a = col1b
Dominio Común
SQL
(Structured Query Language)

Comando SQL + Comandos Propios

PL/SQL
Transact-SQL
SQL
(Structured Query Language)

Versión Año Nombre de la versión


1 1989 SQL Server 1.0
4.21 1993 SQL Server 4.21
6 1995 SQL Server 6.0
6.5 1996 SQL Server 6.5
7 1998 SQL Server 7.06
19 SQL Server 7.0
-
99 OLAP Tools
8 2000 SQL Server 20007
20 SQL Server 2000
8
03 64-bit Edition
9 2005 SQL Server 20058
10 2008 SQL Server 20089
10.25 2010 SQL Azure DB
10.5 2010 SQL Server 2008 R210​
11 2012 SQL Server 201211​
12 2015 SQL Server 201412​
13 2016 SQL Server 2016
14 2017 SQL Server 2017
15 2019 SQL Server 2019
16 2022 SQL Server 2022
Descripción de la Sección

¿Qué es Microsoft SQL Server?

Instalación de SQL Server 2022

Validar el estado del Servidor SQL Server

Instalar SQL Server Management Studio(SSMS)

Distintas formas de conectarse al Servidor

Solucionar Error al conectarse al Servidor

Bases de Datos del Sistema

Conociendo el entorno SSMS


¿Qué es Microsoft SQL Server?
¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)
¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)

T-SQL

Microsoft SQL Server es uno de los principales Sistemas de


Administración de Bases de Datos Relacional del mercado

Es ideal para almacenar toda la información deseada.


¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)
¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)

Enterprise Estándar

Siendo la edición más completa, Destinada para ofrecer a las pequeñas


está destinada para organizaciones empresas una herramienta que les brinde
con altos niveles de trabajo críticas una administración básica de datos.

Express Developer

Diseñada para aquellas personas Integra toda la funcionalidad del


principiantes que deseen disponer de una Enterprise, para entornos de prueba y no
base de datos gratuita como aprendizaje. debe utilizarse en entorno de producción.
¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)

El motor de Base de Datos SQL Server también


Azure SQL Edge
Azure SQL Database lo usan los siguientes productos y servicios

Instancia administrada
de Azure SQL
Microsoft Analytics Platform System
¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)

SQL Server Integration Master Data


Services(SSIS) Algunos componentes y tecnologías Services(MDS)
en SQL Server son:

SQL Server Analysis Data Quality


Services(SSAS) Services(DQS)

SQL Server Reporting


Services(SSRS)
¿Qué es Microsoft SQL Server?

Sistema de Administración de Bases de Datos


Relacionales (RDBMS)

SQL Server
Management
Studio (SSMS)

¿Qué es SQL Server Management Studio?

Es una interfaz gráfica de usuario que proporciona


un entorno integrado para administrar cualquier
infraestructura relacionada con SQL Server.
Descripción de la Sección

Creando nuestra Primer Base de Datos

Introducción a los Tipos de Datos

Creando nuestra Primera Tabla

¿Qué es Primary Key?

¿Qué es la Propiedad IDENTITY ?

Introducción a Foreign Key

Diagrama de Base de Datos

Tabla con Primary Key Compuesta


Introducción a los Tipos de
Datos
Introducción a los Tipos de Datos

Los Tipos de Datos son utilizados para definir el tipo de información que puede
almacenarse en una columna de una Tabla.

Cada columna en una Tabla debe tener un Tipo de Datos específico que
determine el formato y el rango de valores que puede contener.
Introducción a los Tipos de Datos

Numéricos Exactos - Entero Numéricos Exactos - Decimal

INT DECIMAL(p, s)
4 Bytes 1 al 9 → 5 Bytes 20 al 28 → 13 Bytes

DESDE -2,147,483,648 HASTA 2,147,483,647 10 al 19 → 9 Bytes 29 al 38 → 17 Bytes

Numéricos Exactos - Lógico

BIT
1 Byte
“1” o “0”
Introducción a los Tipos de Datos

Fecha y hora Cadenas de caracteres

TIME CHAR(n)
5 Bytes Longitud Fija
Formato: hh:mm:ss[.nnnnnn] Valor de n: 1 hasta 8000
Storage: n Bytes

DATE
Donde “n” especifica el tamaño de la columna
3 Bytes en “Bytes”.
Formato: yyyy-MM-dd
VARCHAR(n)
DATETIME Longitud Variable

8 Bytes Valor de n: 1 hasta 8000


Formato: yyyy-MM-dd hh:mm:ss[.nnn] Storage: n + 2 Bytes
Primeros pasos en SQL Server

Nombre del Campo Tipo de Dato


¿Qué es Primary Key?
¿Qué es Primary Key?

Una primary key (clave primaria) en bases de


datos es un campo o conjunto de campos que
identifica de manera única cada fila en una tabla.
¿Qué es Primary Key?
Una primary key (clave primaria) en bases de
datos es un campo o conjunto de campos que
identifica de manera única cada fila en una tabla.

Caracteristicas:
❖ Sólo se permite una Primary Key por tabla.

❖ Los valores dentro de la Primary Key deben ser únicos; No se


permiten duplicados.

❖ Todas las columnas de una clave primaria deben establecerse


en NOT NULL.

❖ La creación de una Primary Key también crea un índice


agrupado único en las columnas incluidas.
¿Qué es Primary Key?

Una Primary Key que consta de una sola columna


se denomina Primary Key ÚNICA.

Cuando la Primary Key consta de varias columnas,


se la conoce como Primary Key COMPUESTA.
Establecer Primary Key
Establecer Primary Key
Establecer Primary Key

nombre paterno materno fechaNacimiento domicilio telefono email

Isabel Campos Torres 01/01/2000 Jr. Las flores 520 999999999 [email protected]

Oscar Gallegos Flores 02/02/2000 Calle Balta 650 988888888 [email protected]

Isabel Guillen Morales 03/03/2000 Calle Prado 150 977777777 [email protected]


Establecer Primary Key

nombre paterno materno fechaNacimiento domicilio telefono email

Isabel Campos Torres 01/01/2000 Jr. Las flores 520 999999999 [email protected]

Oscar Gallegos Flores 02/02/2000 Calle Balta 650 988888888 [email protected]

Isabel Guillen Morales 03/03/2000 Calle Prado 150 977777777 [email protected]


Establecer Primary Key

características especiales Nombre del Campo Tipo de Dato


del campo
Establecer Primary Key

idProfesor nombre paterno materno fechaNacimiento domicilio telefono email

101 Isabel Campos Torres 01/01/2000 Jr. Las flores 520 999999999 [email protected]

520 Oscar Gallegos Flores 02/02/2000 Calle Balta 650 988888888 [email protected]

602 Isabel Guillen Morales 03/03/2000 Calle Prado 150 977777777 [email protected]
¿Qué es la Propiedad IDENTITY ?
¿Qué es la Propiedad IDENTITY ?

IDENTITY es una propiedad que se puede aplicar a una columna de una Tabla
para que el motor de base de datos genere automáticamente valores
numéricos únicos para esa columna.

valor de inicialización: 101


Incremento: 3

Valor Predeterminado:

valor de inicialización: 1
Incremento: 1
¿Qué es la Propiedad IDENTITY ?

IDENTITY es una propiedad que se puede aplicar a una columna de una Tabla
para que el motor de base de datos genere automáticamente valores
numéricos únicos para esa columna.

Valor Predeterminado:

valor de inicialización: 101 valor de inicialización: 1

Incremento: 3 Incremento: 1

idProfesor nombre paterno materno idProfesor nombre paterno materno

101 Isabel Campos Torres 101 Isabel Campos Torres

104 Oscar Gallegos Flores 102 Oscar Gallegos Flores

107 Isabel Guillen Morales 103 Isabel Guillen Morales


Introducción a Foreign Key
Introducción a Foreign Key

Una Foreign Key o Llaves Foráneas es una columna o conjunto de columnas que
nos permiten establecer un vínculo referencial entre los datos de dos tablas.

Enlace Referencial Tabla Principal

Tabla Secundaria
Introducción a Foreign Key

Una Foreign Key o Llaves Foráneas es una columna o conjunto de columnas que
nos permiten establecer un vínculo referencial entre los datos de dos tablas.

Tabla
autorreferencia

Enlace
autorreferencia
Establecer Foreign Key
Diagrama de Base de Datos

El Diseñador de Diagramas de Base de Datos es una herramienta visual que le


permite Diseñar y Visualizar una Base de Datos a la que está conectado.

Cuando diseña una base de datos, puede utilizar el Diseñador de Bases de Datos
para crear, editar o eliminar tablas, columnas, claves, índices, relaciones y
restricciones.
Diagrama de Base de Datos
Tabla con Primary Key Compuesta
Descripción de la Sección

Instrucción INSERT

Insertar Registro - Entorno Gráfico

Insertar Registro - Transact SQL

Deshabilitar la propiedad IDENTITY

Insertar Múltiples Registros - Transact SQL

Insertar Registro a una Tabla con Foreign Key

Insertar Registro a una Tabla con Primary Key


Compuesta
Instrucción INSERT
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)

Auto-Generadas NOT NULL


Calculadas NULL
PRIMARY KEY
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)

VALUES (val1, val2, val3, ... , valn);


Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)

VALUES (val1, val2, val3, ... , valn);


Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)


VALUES (val1, val2, val3, ... , valn);
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)


VALUES (val1, val2, val3, ... , valn),
(val1, val2, val3, ... , valn),
Una sola vez (val1, val2, val3, ... , valn);
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)


SELECT val1, val2, val3, ..., valn;
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis

INSERT INTO table_name (col1, col2, col3, ... , coln)


SELECT val1, val2, val3, ..., valn
FROM tabla;

Las columnas consultadas deben coincidir con las


columnas a insertar
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Sintaxis
Todas las columnas de la Tabla

INSERT INTO table_name


SELECT val1, val2, val3, ..., valn
FROM tabla;

Las columnas consultadas deben coincidir con las


columnas a insertar
Instrucción INSERT

La instrucción INSERT INTO se usa principalmente para agregar una o más filas a la Tabla

Primary Key

Foreign Key

Columnas Auto-Incrementales
Insertar Registro - Transact SQL
Insertar Registro - Transact SQL

Numéricos Exactos Cadenas de caracteres

INT → 13
CHAR(n) → 'texto'
DECIMAL → 13 o 13,5
VARCHAR(n) → 'texto'
BIT → 1 o 0

Fecha y hora
Valor NULL

TIME → '13:10:20.123'
DATE → '01-01-2024' o '2024-01-01'
'01/01/2024' o '2024/01/01'
NULL
DATETIME → '01-01-2024 13:10:20.123' ''o0
Insertar Registro a una Tabla
con Foreign Key
Insertar Registro a una Tabla con Foreign Key

Podemos insertar registros donde su valore del campo Foreign Key se encuentren
relacionado con el valor del campo Primary Key.

Productos Categorias
idProducto idCategoria nombre precio stock fechaVencimiento idCategoria nombre descripcion
1 Bebidas
1 1 Gaseosa 5.90 100 01/01/2030
2 Ropa
2 7 Laptop 1500 50 3 Tecnología
Insertar Registro a una Tabla con Foreign Key

Podemos insertar registros donde su valore del campo Foreign Key se encuentren
relacionado con el valor del campo Primary Key.

Productos Categorias
idProducto idCategoria nombre precio stock fechaVencimiento idCategoria nombre descripcion
1 Bebidas
1 1 Gaseosa 5.90 100 01/01/2030
2 Ropa
2 3 Laptop 1500 50 3 Tecnología
Tarea – Sentencias DML(Insert)

1. Insertar un registro en la Tabla Clientes.

Insertar Múltiples registros en la Tabla


2.
Clientes(Más de dos)

Recomendación: La columna "idCliente" es un campo "Identity".


Descripción de la Sección

Instrucción SELECT

Instrucción SELECT - Entorno Gráfico

Instrucción SELECT - Transact SQL

Cláusula DISTINCT

Cláusula WHERE

Cláusula ORDER BY

Cláusula TOP

Cláusula PERCENT

Cláusula WITH TIES


Instrucción SELECT
Instrucción SELECT

La instrucción SELECT es la mas utilizada para consultar registros de las Tablas

Sintaxis

Consulta todas las columnas

SELECT * FROM nombre_tabla


Instrucción SELECT

La instrucción SELECT es la mas utilizada para consultar registros de las Tablas

Sintaxis

Consulta columnas especificas

SELECT col1, col2, …, coln FROM nombre_tabla


Cláusula DISTINCT

La Cláusula DISTINCT se utiliza para devolver sólo valores distintos (diferentes).

Sintaxis

SELECT DISTINCT columna

FROM nombre_Tabla
Cláusula WHERE

La cláusula WHERE se utiliza para Filtrar las filas devueltas por una consulta

Sintaxis

SELECT lista_columna

FROM nombre_Tabla

WHERE condición;
Cláusula ORDER BY

La cláusula ORDER BY se utiliza para ordenar el conjunto de resultados en orden


ascendente o descendente.

Sintaxis

SELECT lista_columna

FROM nombre_Tabla

ORDER BY columna [ASC | DESC];

SQL Server lo utiliza ASC como orden de clasificación predeterminado


Cláusula ORDER BY

La cláusula ORDER BY se utiliza para ordenar el conjunto de resultados en orden


ascendente o descendente.

Sintaxis

SELECT lista_columna

FROM nombre_Tabla

WHERE condición;

ORDER BY columna [ASC | DESC];


Cláusula TOP

La TOP cláusula le permite limitar el número de filas devueltas en un conjunto de


resultados de consulta.

Sintaxis

SELECT TOP n lista_columna

FROM nombre_Tabla
Cláusula PERCENT

La Cláusula PERCENT es opcional y devuelve las filas superiores basadas en un porcentaje


del conjunto de resultados total.

Sintaxis

SELECT TOP n [PERCENT | WITH TIES] lista_columna

FROM nombre_Tabla
Cláusula WITH TIES

La Cláusula WITH TIES permite incluir las filas en el conjunto de resultados que coinciden
con la última fila.

Sintaxis

SELECT TOP n [PERCENT | WITH TIES] lista_columna

FROM nombre_Tabla
Tarea – Sentencias DML(Select)
Tarea – Sentencias DML(Select)

1. Mostrar todos los registros de la Tabla Películas.

2. Mostrar los distintos tiempos de duración de las Películas.

Mostrar las Películas que tengan un tiempos de duración de 165


3.
minutos.

Mostrar las Películas ordenados de manera Ascendente por la


4.
Fecha de Lanzamiento.

Mostrar las 5 mejores Películas ordenados de manera


5.
Descendente por la Calificación.

Mostrar el 50% de las Películas ordenados de manera Descendente


6.
por la Ganancia.
Descripción de la Sección

Instrucción UPDATE

Instrucción UPDATE - Entorno Gráfico

Instrucción UPDATE sin Condicional


Transact SQL

Instrucción UPDATE con Condicional


Transact SQL

Instrucción UPDATE con Foreign Key


Instrucción UPDATE
Instrucción UPDATE

La instrucción UPDATE se utiliza para actualizar registros existentes en una tabla en una
base de datos de SQL Server.

Sintaxis

UPDATE nombre_tabla
SET column1 = expresion1,
column2 = expresion2

... Podemos especificar mas


columnas

[WHERE condición]
Tarea – Sentencias DML(Update)
Tarea – Sentencias DML(Update)

Actualizar la calificación a 8.5 donde el valor del campo “idPelicula”


1.
es 110.

2. Actualizar el tiempo de duración a 140 de la película “Avatar”.

Actualizar la fecha de lanzamiento al “17/06/2010” de la película


3.
“Toy Story 3”.

4. Actualizar el nombre de todas las películas a “Desconocido”.


Descripción de la Sección

Instrucción DELETE

Instrucción DELETE - Entorno Gráfico

Instrucción DELETE sin Condicional


Transact SQL

Instrucción DELETE con Condicional


Transact SQL

Instrucción DELETE con Foreign Key


Instrucción DELETE
Instrucción DELETE

La instrucción DELETE se utiliza para eliminar registros existentes en una tabla en una
base de datos de SQL Server

Sintaxis

DELETE FROM nombre_tabla

[WHERE condición]
Tarea – Sentencias DML(Delete)
Tarea – Sentencias DML(Delete)

1. Eliminar la película donde el valor del campo “idPelicula” es igual a 114.

2. Eliminar las películas que tengan una calificación de 6.5.

3. Eliminar la película de “Frozen”.

4. Eliminar la película donde su fecha de lanzamiento es “26/11/2012”.

5. Eliminar todas las películas.


Descripción de la Sección

Descripción - Operadores de Comparación

Operador de Comparación - “Es igual a”

Operador de Comparación - “Mayor que”

Operador de Comparación - “Mayor o igual que”

Operador de Comparación - “Menor que”

Operador de Comparación - “Menor o igual que”

Operador de Comparación - “No es igual a”

Operador de Comparación - “No es menor que”

Operador de Comparación - “No es mayor que”


Operadores de Comparación
Operadores de Comparación

Los operadores de comparación son utilizados para comparar valores en una consulta y
devolver un resultado booleano (verdadero o falso) que indica si la comparación es cierta.

UPDATE nombre_tabla
SELECT lista_columna
SET column1 = expresion1,
FROM nombre_Tabla column2 = expresion2

WHERE condición; ...


[WHERE condición]

DELETE FROM nombre_tabla


[WHERE condición]
Operadores de Comparación

Los operadores de comparación son utilizados para comparar valores en una consulta y
devolver un resultado booleano (verdadero o falso) que indica si la comparación es cierta.

Operadores:

= Es igual a <> No es igual a

> Mayor que No es igual a(No es del


!= estándar ISO)

>= Mayor o igual que


No es menor que(No es del
!< estándar ISO)
< Menor que
No es mayor que(No es del
<= Menor o igual que !> estándar ISO)
Tarea – Operadores de Comparación

Utilizar la Base de Datos “pubs”

1. Mostrar los Autores que sean del estado de “UT”.

2. Mostrar los títulos donde el precio sea mayor o igual a 20.

3. Mostrar los títulos donde el precio sea menor o igual a 7.


Descripción de la Sección

Descripción - Operadores Lógicos

Operador Lógico - ”AND”

Operador Lógico - ”OR”

Operador Lógico - ”IN”

Operador Lógico - ”LIKE”

Operador Lógico - ”BETWEEN”

Operador Lógico - ”NOT”


Operadores Lógicos
Operadores Lógicos

Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.

UPDATE nombre_tabla
SELECT lista_columna
SET column1 = expresion1,
FROM nombre_Tabla column2 = expresion2

WHERE condición; ...


[WHERE condición]

DELETE FROM nombre_tabla


[WHERE condición]
Operadores Lógicos

Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.

Operadores:

AND Operador Lógico AND BETWEEN Operador Lógico BETWEEN

OR Operador Lógico OR
EXISTS Operador Lógico EXISTS

IN Operador Lógico IN

LIKE Operador Lógico LIKE NOT Operador Lógico NOT


Operadores Lógicos

Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.

AND OR NOT
E1 E2 E1 Y E2 E1 E2 E1 O E2 E NOT E

V V V V V V V F

V F F V F V F V

F V F F V V

F F F F F F
Operadores Lógicos

Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.

AND OR NOT
E1 E2 E1 Y E2 E1 E2 E1 O E2 E NOT E

V V V V V V V F

V F F V F V F V

F V F F V V

F F F F F F
Operadores Lógicos

Los operadores lógicos se utilizan para combinar múltiples condiciones en una consulta y
evaluar si se cumplen todas o algunas de ellas. Estos operadores lógicos devuelven el tipo
de datos booleano (verdadero o falso) que indica si la comparación es cierta.

AND OR NOT
E1 E2 E1 Y E2 E1 E2 E1 O E2 E NOT E

V V V V V V V F

V F F V F V F V

F V F F V V

F F F F F F
Tarea – Operadores Lógicos

Utilizar la Base de Datos “pubs”

1. Mostrar los Autores que sean del estado de “CA” y la ciudad de “Palo Alto”.

2. Mostrar los títulos donde el precio sea mayor o igual a 20 o menor o igual a 7.

3. Mostrar todos los empleados donde su nombre empiece por la letra M.

4. Mostrar los Autores que sean del estado de “MD, IN, OR”.
Descripción de la Sección

Descripción - Operadores de Conjunto

Operador - “UNION”

Operador - “UNION ALL”

Operador - “INTERSECT”

Operador - “EXCEPT”
Operadores de Conjunto
Operadores de Conjunto

Los operadores de Conjuntos se utilizan para combinar dos o más datos similares
presentes en uno, dos o más bases de datos SQL; fusionan el resultado obtenido.

SELECT lista_columna

FROM nombre_Tabla

WHERE condición;
Operadores de Conjunto

Los operadores de Conjuntos se utilizan para combinar dos o más datos similares
presentes en uno, dos o más bases de datos SQL; fusionan el resultado obtenido.

Requisitos:
➢ Cada instrucción SELECT dentro del
SELECT lista_columna operador UNION debe tener el mismo
número de columnas.

FROM nombre_Tabla ➢ Las columnas también deben tener tipos


de datos similares.
WHERE condición;
➢ Las columnas de la instrucción SELECT
deben estar en el mismo orden.
Operadores de Conjunto

Los operadores de Conjuntos se utilizan para combinar dos o más datos similares
presentes en uno, dos o más bases de datos SQL; fusionan el resultado obtenido.

Operadores:
UNION Operador de Conjunto UNION

UNION ALL Operador de Conjunto UNION ALL

INTERSECT Operador de Conjunto INTERSECT

EXCEPT Operador de Conjunto EXCEPT


Tarea – Operadores de Conjunto

Utilizar la Base de Datos “pubs”

Unir los nombres de la tabla “authors” y “employee” eliminando los valores


1.
duplicados si existen.

Unir los estados de la tabla “authors” y “publishers” conservando los valores


2.
duplicados si existen.
Descripción de la Sección

Descripción - Operadores Aritméticos

Operador - “Suma” y “Resta”

Operador - “Multiplicar” y “Dividir”

Operador - “Módulo”
Operadores Aritméticos
Operadores Aritméticos

Los operadores aritméticos se utiliza para realizar cálculos y operaciones aritméticas en los
operandos o los datos presentes en las tablas de la base de datos.

Operadores:
+ Operador Aritmético SUMA

- Operador Aritmético RESTA

* Operador Aritmético MULTIPLICAR

/ Operador Aritmético DIVIDIR

% Operador Aritmético MÓDULO


Descripción de la Sección

Descripción - Sentencias DDL

Crear de una Base de Datos

Esquemas(schema)

Utilizar las Sentencias DDL

Descripción - Foreign Key

Validar la Acción Foreign Key

Sentencia TRUNCATE
Sentencias DDL
Sentencias DDL

Las sentencias DDL (del ingles: Data Definition Language o en español: Lenguaje de Definición de
Datos) son un conjunto de comandos utilizados para definir, modificar y gestionar la estructura de
una base de datos.

Estas sentencias se utilizan para crear, modificar y eliminar objetos en la base de datos, como
tablas, índices, vistas, restricciones y otros elementos que definen la organización y la estructura de
los datos en un sistema de administración de Base de Datos Relacionales(RDBMS).

Las sentencias DDL son:

CREATE ALTER DROP TRUNCATE


Sentencias DDL

CREATE

La sentencia CREATE se utiliza para crear nuevos objetos en la base de datos. Estos objetos
pueden ser tablas, vistas, índices, procedimientos almacenados, funciones y otros elementos
que forman parte de la estructura de la base de datos.

Sintaxis:

CREATE [tipo_de_objeto] [nombre_de_objeto];

Table, Database, View, Index, etc Nombre que deseas asignar


Sentencias DDL

ALTER

La sentencia ALTER se utiliza para modificar la estructura de objetos ya existentes en la base


de datos, como agregar, eliminar o modificar columnas de una tabla, cambiar el nombre de
un objeto, etc.

Sintaxis:

ALTER [tipo_objeto] [nombre_objeto] [accion];

Table, Column, Index, etc Add, Drop, Alter, etc

Nombre del objeto a modificar


Sentencias DDL

DROP

La sentencia DROP se utiliza para eliminar objetos de la base de datos, como tablas, vistas o
índices.
Ten en cuenta que esta acción es irreversible y elimina permanentemente los datos asociados.

Sintaxis:

DROP [tipo_objeto] IF EXISTS [nombre_objeto];

Table, Index, Database, etc Nombre del objeto a eliminar

Es opcional, se utiliza para evitar que se


genere un error si el objeto no existe
Sentencias DDL

TRUNCATE

La sentencia TRUNCATE elimina todas las filas de una tabla o particiones específicas de una tabla,
sin registrar las eliminaciones de filas individuales.
TRUNCATE es similar a la declaración DELETE sin la cláusula WHERE; sin embargo, TRUNCATE es
más rápido y utiliza menos recursos del sistema y del registro de transacciones.

Sintaxis:
TRUNCATE TABLE [nombre_objeto];

Nombre del objeto a truncar


Implementar el Modelo Relacional

Persona Servicio Propiedad Persona


Esquemas(schema)
Esquemas(schema)

Tablas
Vistas
Procedimiento Almacenado
Funciones
Índices
Triggers

Un esquema es un objeto de base de datos que actúa como contenedor.

Los esquemas agrupan lógicamente objetos relacionados en un único


contenedor que los mantiene separados de otros objetos de la base de
datos en otros contenedores (esquemas).
Esquemas(schema)

SQL Server

Database
(Empresa)

Schema Schema Schema


(dbo) (RRHH) (person)

Table Table Table Table Table Table


(ErrorLog) (Country) (Employee) (Address) (Department) (Salary)
Esquemas(schema)

Esquemas predeterminados de SQL Server

Schema Schema Schema Schema


(dbo) (sys) (guest) (INFORMATION_SCHEMA)

CREATE SCHEMA NOMBRE_ESQUEMA;


Crear Esquema(Schema)

Persona Servicio Propiedad Persona


Antes de la implementación

Persona Servicio Propiedad Persona


Antes de la implementación

Persona Servicio Propiedad Persona


Crear Tabla - Parte 1

Persona Servicio Propiedad Persona


Crear Tabla - Parte 1

Persona Servicio Propiedad Persona


Crear Tabla - Parte 2

Persona Servicio Propiedad Persona


Crear Tabla - Parte 2

Persona Servicio Propiedad Persona


Foreign Key
Foreign Key

Una Foreign Key (clave foránea) es una restricción que


se utiliza para asegurar la integridad referencial entre
dos tablas. Es un campo (o conjunto de campos) en una
tabla que se referencia a la primary key (clave primaria)
en otra tabla.

La clave foránea garantiza que los valores en una


columna o conjunto de columnas coincidan con los
valores en la clave primaria de la tabla relacionada, de
manera que se mantenga la coherencia de los datos en
la base de datos.
Foreign Key

CREATE TABLE NOMBRE_TABLA


(
colum1 ...,
colum2 ...,
colum3 ...,
colum4 ...
);

ON UPDATE …
ON DELETE …

ALTER TABLE NOMBRE_TABLA ...


Foreign Key
ON UPDATE … ON DELETE …

Las cláusulas admitidas que se pueden realizar al eliminar o actualizar los valores de la “TABLA PRINCIPAL” incluyen:

Cuando las cláusulas ON UPDATE o ON DELETE se establecen en NO ACTION, la operación de actualización o


NO eliminación realizada en la “TABLA PRINCIPAL” fallará con un error.
ACTION Está son las cláusulas por “defecto” si no se establece las cláusulas ON UPDATE o ON DELETE dentro de las
instrucciones.

Al establecer las cláusulas ON UPDATE o ON DELETE en CASCADE, la misma acción realizada en los valores
referenciados de la “TABLA PRINCIPAL” se reflejará en los valores relacionados en la “TABLA SEGUNDARIA”. Por
CASCADE ejemplo, si el valor al que se hace referencia se elimina en la “TABLA PRINCIPAL”, también se eliminan todas las filas
relacionadas en la “TABLA SEGUNDARIA”.

Con esta opción de cláusulas ON UPDATE y ON DELETE, si los valores a los que se hace referencia en la “TABLA
SET NULL PRINCIPAL” se eliminan o modifican, todos los valores relacionados en la “TABLA SEGUNDARIA” se establecen en
valor NULL.

El uso de la opción SET DEFAULT de las cláusulas ON UPDATE y ON DELETE especifica que, si los valores a los que se
SET
hace referencia en la “TABLA PRINCIPAL” se actualizan o eliminan, los valores relacionados en la “TABLA
DEFAULT SEGUNDARIA” con columnas FOREIGN KEY se establecerán en su valor predeterminado.
Crear Tabla - Parte 4

Persona Servicio Propiedad Persona


Crear Tabla - Parte 4

Persona Servicio Propiedad Persona


Crear Tabla - Parte 5

Persona Servicio Propiedad Persona


Crear Tabla - Parte 5

Persona Servicio Propiedad Persona


TRUNCATE
TRUNCATE

La sentencia TRUNCATE es un comando del lenguaje de definición de datos (DDL)


la cual elimina todas las filas de una tabla.
SQL Server almacena datos de una tabla en las páginas y el comando TRUNCATE
elimina filas desasignando las páginas.

Sintaxis:

TRUNCATE TABLE [nombre_bbdd] . [nombre_esquema] .[nombre_tabla];

DELETE FROM [nombre_bbdd] . [nombre_esquema] .[nombre_tabla];


TRUNCATE
TRUNCATE TABLE [nombre_bbdd] . [nombre_esquema] .[nombre_tabla];

Al utilizar la Sentencia TRUNCATE no se puede revertir los datos eliminados ya que no


registra el registro durante la ejecución de esta operación. La ejecución de este comando
bloquea las páginas en lugar de las filas; por lo tanto, requiere menos bloqueos y recursos. .

No se puede TRUNCAR una tabla a la que hace referencia una clave externa.

Si TRUNCA una tabla, se restablecerán los contadores de cualquier columna de IDENTITY.

Antes de poder TRUNCAR una tabla, debe tener los privilegios necesarios, como ALTER TABLE.

TRUNCAR una tabla es una forma rápida de Borrar registros de una tabla
si no necesita preocuparse por revertirla.

Una recomendación, si no estas seguro de eliminar todos los registros de la Tabla te


aconsejo que hagas un respaldo de la Base de Datos antes eliminar los Datos.
TRUNCATE

TRUNCATE DELETE

Es un comando DDL. Es un comando DML.

El comando TRUNCATE elimina todas las filas de El comando DELETE es útil para eliminar todas o
una tabla. No podemos usar una cláusula Where filas específicas de una tabla especificada
en esto. mediante una cláusula Where.

El comando TRUNCATE coloca un bloqueo de El comando DELETE coloca un bloqueo en cada


tabla y página para eliminar todos los registros. fila que requiere eliminarse de una tabla.

El comando TRUNCATE no registra entradas El comando DELETE registra una entrada por
para cada fila eliminada en el registro de cada fila eliminada en el registro de
transacciones. transacciones.

Es más rápido que el comando DELETE. El comando DELETE es más lento que el
comando TRUNCATE.
Descripción de la Sección

Tipos de Datos

Casuísticas de los Tipos de Datos

Tipos de Datos - Numéricos Exactos

Tipos de Datos - Numéricos Aproximados

Tipos de Datos - Cadenas de Caracteres

Tipos de Datos - Fecha y hora

Tipos de Datos - Cadenas Binarias


Tipos de Datos
Tipos de Datos

Los tipos de datos son una parte fundamental para definir la naturaleza de la información que
puede almacenarse en una base de datos. Estos tipos de datos permiten a SQL Server gestionar y
almacenar datos de manera eficiente, garantizando la integridad y exactitud de la información.

Un tipo de datos define qué tipo de valor puede contener una columna: datos enteros, datos de
caracteres, datos monetarios, datos de fecha y hora, cadenas binarias, etc.

Se requiere que cada columna en una tabla de base de datos tenga un nombre y un tipo de datos.

Un desarrollador de SQL debe decidir qué tipo de datos se almacenarán dentro de cada columna
al crear una tabla. El tipo de datos es una guía para que SQL entienda qué tipo de datos se espera
dentro de cada columna, y también identifica cómo SQL interactuará con los datos almacenados.

Cada tipo de datos tiene su propio uso y características específicas, y la elección del tipo de datos
adecuado es crucial para optimizar el rendimiento y la integridad de las Bases de Datos.
Tipos de Datos

Valores Numéricos Exactos

Numéricos Exactos Numéricos Exactos Numéricos Exactos Numéricos Exactos


Entero Decimal Lógico Moneda

Valores Numéricos Aproximados

Cadenas de Caracteres Cadenas de Caracteres Unicode

Fecha y Hora

Cadenas Binarias

Otros Tipos de Datos


Tipos de Datos

Valores Numéricos Exactos

Numéricos Exactos Entero

tinyint smallint

Intervalo: De 0 a 255 Intervalo: De -32 768 a 32 767


Expresión de intervalo: 2^0-1 a 2^8-1 Expresión de intervalo: -2^15 a 2^15-1
Storage: 1 Byte Storage: 2 Bytes

int bigint

Intervalo: De -2.147.483.648 a Intervalo: De -9.223.372.036.854.775.808 a


2.147.483.647 9.223.372.036.854.775.807
Expresión de intervalo: -2^31 a 2^31-1 Expresión de intervalo: -2^63 a 2^63-1
Storage: 4 Bytes Storage: 8 Bytes
Tipos de Datos

Valores Numéricos Exactos

Numéricos Exactos Decimal

^38 ^38
Expresión de intervalo: -10 +1 a 10 -1
decimal(p, s)
Precisión Almacenamiento
1–9 (5 Bytes)
10 – 19 (9 Bytes)
numeric(p, s)
20 – 28 (13 Bytes)
p (precisión) 29 – 38 (17 Bytes)
El número total máximo de dígitos
decimales que se almacenarán.
s (escala)
El número de dígitos decimales que se
almacenarán a la derecha del separador decimal.

Estos Tipos de Datos son idénticos, sólo que tienen nombres diferentes.
Tipos de Datos

Valores Numéricos Exactos

Numéricos Exactos Lógico

bit

Intervalo: 1 ó 0

Storage: 1 bit
Tipos de Datos

Valores Numéricos Exactos

Numéricos Exactos Moneda

smallmoney money

Intervalo: De -214,748.3648 a 214,748.3647 Intervalo: De -922,337,203,685,477.5808 a


922,337,203,685,477.5807

Storage: 4 Bytes Storage: 8 Bytes

Decimales vs Moneda

Entonces, a opinión personal no recomiendo utilizar el Tipo de Dato


Money debido a que no es preciso; utilice mejor el Tipo de Dato Decimal.
Tipos de Datos

Valores Numéricos Aproximados

Float(n) real

Intervalo: De - 1,79E+308 a -2,23E-308, 0 y de Intervalo: De - 3,40E + 38 a -1,18E - 38, 0 y de


2,23E-308 a 1,79E+308 1,18E - 38 a 3,40E + 38

Storage: 4 Bytes (n = 1 – 24, 7 dígitos) Storage: 4 Bytes


8 Bytes (n = 25 – 53, 15 dígitos)

n ⟶ Es el número de bits que se usan para almacenar la mantisa del número de float.
Si se especifica n, debe ser un valor entre 1 y 53. El valor predeterminado de n es 53.

Decimales vs Números Aproximados


Entonces, a opinión personal no recomiendo utilizar el Tipo de Dato de
Valores Numéricos Aproximados debido a que no es preciso; utilice
mejor el tipo de dato Decimal.
Tipos de Datos

Cadenas de Caracteres

char(n) varchar(n) text

Longitud Fija Longitud Variable Longitud Variable

Valor n: 1 hasta 8000 Valor n: 1 hasta 8000 Storage: 2.147.483.647(2GB)


Storage: n Bytes Storage: n + 2 Bytes Bytes

varchar(max)
Donde “n” especifica el tamaño de la columna en “Bytes”.
Longitud Variable

Storage: 2^31-1 Bytes (2GB)


Tipos de Datos

Cadenas de Caracteres Unicode

nchar(n) nvarchar(n) ntext

Longitud Fija Longitud Variable Longitud Variable

Valor n: 1 hasta 4000 Valor n: 1 hasta 4000 Storage: 1.073.741.823(1GB)


Storage: n*2 Bytes Storage: n*2 + 2 Bytes Bytes

Donde el parámetro “n” especifica el tamaño de la nvarchar(max)


columna en “pares de Bytes”.
Longitud Variable

Storage: 2^31-1 Bytes (2GB)


Tipos de Datos

Fecha y Hora

time date smalldatetime

Formato: hh:mm:ss[.nnnnnnn] Formato: yyyy-MM-dd Formato:


yyyy-MM-dd hh:mm:ss
Storage: 5 Bytes Storage: 3 Bytes
Storage: 4 Bytes

datetime datetime2 datetimeoffset

Formato: Formato: Formato:


yyyy-MM-dd hh:mm:ss[.nnn] yyyy-MM-dd hh:mm:ss[. nnnnnnn] yyyy-MM-dd hh:mm:ss[.nnnnnnn]
[{+|-}hh:mm]
Storage: 8 Bytes Storage: 6/7/8 Bytes
Storage: 10 Bytes
Tipos de Datos

Cadenas Binarias

binary(n) varbinary(n | max) image

Longitud Fija Longitud Variable Longitud Variable

Valor n : 1 hasta 8000 Valor n : 1 hasta 8000 Storage: desde 0 hasta


Storage: n Bytes Valor max: 2^31– 1 Bytes 2^31 – 1 Bytes
Storage : n + 2 Bytes

Donde “n” especifica el tamaño de la columna en “Bytes”.


Tipos de Datos

Otros Tipos de Datos

cursor rowversion

geography Sql_variant

geometry table

hierarchyid uniqueidentifier

json xml
Tipos de Datos

COLLATE(Collation)

COLLATE representa la nomenclatura de


símbolos; es decir, es la propiedad de la base de COLLATE especificará a la base de datos tanto los
datos que proporciona la distinción entre patrones de bits que representan cada
caracteres como acentos, mayúsculas, caracter contenido en el juego de caracteres
minúsculas, otros caracteres soportados y reglas vinculados a una región, como las reglas de
de ordenación para los datos que la base de datos comparación u ordenación de datos.
es capaz de manejar.

Ñ
COLLATE viene
Cada juego de condicionado por la
región donde se vaya a
caracteres es instalar y explotar la
diferente base de datos
Tipos de Datos

COLLATE(Collation)

SELECT FirstName, LastName


FROM Employees
WHERE LastName COLLATE Modern_Spanish_CI_AS = 'Davolio';

Creación de la
Base de Datos Instalar servidor
SQL Server
Tipos de Datos

COLLATE(Collation)

SELECT FirstName, LastName


FROM Employees
WHERE LastName COLLATE Modern_Spanish_CI_AS = 'Davolio';

DD-MM-YYYY

Otro aspecto importante del


YYYY-MM-DD
COLLATE es que en
Latinoamérica la sintaxis de
consulta NO ES key sensitive
pero si se cambia el COLLATE si
se puede convertir en KEY
SENSITIVE SQL Server.
Casuísticas de los Tipos de Datos
Casuísticas de los Tipos de Datos

Valores Numéricos Exactos

tinyint decimal
Representa la edad de
Representa el valor
un cliente(18 - 90) que
numérico decimal(5,2).
solicuta un crédito.
5 Bytes
1 Byte

bit
int ⟶ 4 Bytes
Establece si su crédito
se encuentra
disponible o no.
int ⟶ 4 byte 1 bit

1 -> Disponible
char
0 -> No disponible
Verdadero /
Falso
Casuísticas de los Tipos de Datos

Fecha y Hora

date
Almacena la fecha de
registro de un paquete.
3 Bytes

datetime/datetime2
time Almacena la fecha y hora de
la fecha de envio y la fecha
Almacena la hora de de entrega del paquete.
registro de un paquete. 6/7/8 Bytes
5 Bytes
Casuísticas de los Tipos de Datos

Cadenas de Caracteres

Longitud Fija

Longitud
Variable
Casuísticas de los Tipos de Datos

Cadenas de Caracteres

Definir el tipo de dato que se ajuste los


Datos que se van a almacenar
Casuísticas de los Tipos de Datos

Cadenas de Caracteres

Definir el tipo de dato que se ajuste los


Datos que se van a almacenar

ISBN
978-3-16-148410-0
17 caracteres

char(17) ⟶ 17 bytes
varchar(17) ⟶ 19 bytes
nchar(17) ⟶ 34 bytes
nvarchar(17) ⟶ 36 bytes
Casuísticas de los Tipos de Datos

Cadenas de Caracteres

Definir el tipo de dato que se ajuste los


Datos que se van a almacenar

ISBN
9783161484100
13 caracteres

char(13) ⟶ 13 bytes
bigint ⟶ 8 bytes
Casuísticas de los Tipos de Datos

Cadenas de Caracteres

Definir el tipo de dato que se ajuste los


Datos que se van a almacenar

Longitud Variable
¿Sabemos la longitud del nombre?

varchar(9) ⟶ Muy pequeño


varchar(90) ⟶ Muy grande
varchar(30) ⟶ Ideal

varchar(255) ⟶ Muy pequeño


varchar(max) ⟶ Ideal
Casuísticas de los Tipos de Datos

Cadenas de Caracteres

Definir el tipo de dato que se ajuste los


Datos que se van a almacenar

Longitud Variable
¿Cuando utilizar Unicode?

nvarchar(30) ⟶ Ideal

Cuanto se almacena datos en


distintos idiomas

Cuando las politicas de la empresa


así lo especifiquen
Cadenas de Caracteres(Unicode
y No Unicode)
Cadenas de Caracteres(Unicode y No Unicode)

Tabla ASCII

Los Caracteres que se


encuentran dentro de la
Tabla ASCII(0-127) ocupan
solo 1 Byte para los Tipos de
Datos CHAR y VARCHAR.
Para el Tipo de Dato NCHAR
y NVARCHAR ocupa un
almacenamiento de 2 Bytes.
Cadenas de Caracteres(Unicode y No Unicode)

Para los Caracteres que son de tipo Asiáticos ocupan un


almacenamiento de 2 o 3 Bytes por carácter si se utilizar el Tipo de
Dato CHAR o VARCHAR.
Para el Tipo de Dato NCHAR o NVARCHAR ocupa un almacenamiento
de 2 Bytes.

Chinese: 你好世界

Japanese: こんにちは世界

Korean: 안녕하세요 세계
Descripción de la Sección

Fundamentos de las Variables

BATCHES o LOTES de instrucciones

Variable

Ámbito de la Variable

Variable con la instrucción SELECT

Instrucción EXECUTE
Variables
Variables

Las variables son objetos de almacenamiento temporal que pueden contener datos y se utilizan
dentro de un “Batch o Lote” de instrucciones. Las variables son esenciales para la programación en
T-SQL porque permiten almacenar datos, realizar cálculos y controlar el flujo de ejecución.

Las variables se pueden crear para diferentes tipos de datos y también se les pueden asignar
valores. Además, los valores asignados a las variables se pueden cambiar durante el período de
ejecución. El ciclo de vida de la variable comienza desde el punto en el que se declara y debe
finalizar al final del “Batch o Lote” de instrucciones.

Las variables son siempre locales dentro del “Batch o Lote” de instrucción en el que se declara.
Variables

Sintaxis:

DECLARE @NOMBRE_VARIABLE TIPO_DATO [ = VALOR ] ,…


SET @NOMBRE_VARIABLE = VALOR

[ PRINT | SET ] @NOMBRE_VARIABLE

GO
Batches(Lotes)
Batches(Lotes)

Un “Batch o Lote” de instrucción es una colección de una o más instrucciones Transact-SQL (T-
SQL) enviadas al servidor para su ejecución como una sola unidad. Los batches permiten agrupar y
enviar múltiples instrucciones SQL al servidor en una sola operación, lo cual puede mejorar la
eficiencia y la gestión del código SQL.

El “Batch o Lote” terminan con la instrucción “GO” por defecto.

Los “Batch o Lote” limitan el alcance de las Variables.


Batches(Lotes)

La instrucción “GO” fue introducido por las herramientas SELECT columna1, columna2, ... columnaN
de Microsoft como una forma de separar declaraciones
por lotes, la instrucción “GO” es compatible con las FROM nombre_tabla
herramientas de Microsoft SQL, pero formalmente no GO
forma parte de otras herramientas.

SELECT columna1, columna2, ... columnaN


No puede poner a GO en una cadena de SQL y enviarlo FROM nombre_tabla
como parte de un objeto de comando ADO.NET ya que el
propio SQL no comprende el término. GO

SELECT columna1, columna2, ... columnaN


Algo importante a aclarar es el punto y coma(;) la cual se
utiliza para indicar el final de una declaración en sí, no FROM nombre_tabla;
necesariamente de un lote completo. Además es un
estándar en SQL y ayuda a evitar ambigüedades en la
interpretación de las instrucciones. SELECT columna1, columna2, ... columnaN
FROM nombre_tabla;
Descripción de la Sección
Fundamentos de Estructuras de Control de Flujos

Bloque de Ejecución - BEGIN … END

Variables

Instrucción IF … ELSE

Instrucción CASE

Instrucción WHILE

Instrucción BREAK y CONTINUE

Instrucción RETURN

Instrucción GOTO

Iniciando con el Control de Errores - TRY…CATCH

Iniciando con la instrucción THROW


Estructuras de Control de Flujos
Estructuras de Control de Flujos

Esta sección tiene como objetivo desarrollar la lógica para


poder resolver problemas y ejercicios que se van a plantear y
van a ir aumentando la dificultad a lo largo del curso.

La estructura de control de flujo se refiere a las instrucciones y construcciones que permiten dirigir
la ejecución del código Transact-SQL de acuerdo con condiciones específicas, decisiones lógicas y
bucles.

Estas estructuras permiten controlar cómo se ejecutan las sentencias SQL y cómo se manejan las
condiciones y los errores en los scripts.
Estructuras de Control de Flujos

Esta sección tiene como objetivo desarrollar la lógica para


poder resolver problemas y ejercicios que se van a plantear y
van a ir aumentando la dificultad a lo largo del curso.

BEGIN...END IF...ELSE

CASE WHILE

BREAK y CONTINUE RETURN

GOTO TRY...CATCH
Estructuras de Control de Flujos

Las estructuras de control de flujo son esenciales para escribir scripts


Transact-SQL robustos y flexibles. Permiten realizar tareas condicionales,
tareas repetitivas, manejo de errores y mejorar la lógica de
procesamiento de datos. Estas herramientas son fundamentales para
desarrollar nuestra lógica, poder resolver problemas, ejercicios y
mediante el código Transact-SQL solucionar diversas situaciones de
manera eficiente y efectiva.
Operadores

OPERADORES DE COMPARACIÓN

• Es igual a (=)
• Mayor que (>)
• Mayor o igual que (>=) OPERADORES LÓGICOS
• Menor o igual que(<=)
• No es igual a(!= , <>) • Operador Lógico - ”AND”

• No es menor que (!<) • Operador Lógico - ”OR”


• Operador Lógico - ”IN” OPERADORES ARITMÉTICOS
• No es mayor que (!>)
• Operador Lógico - ”LIKE”
• Suma (+) y Resta (-)
• Operador Lógico -
• Multiplicar (*) y Dividir (/)
”BETWEEN”
• Módulo (%)
• Operador Lógico - ”NOT”
• Operador Lógico -
”EXISTS”
Descripción de la Sección

Fundamentos de las Funciones(Functions)

Funciones Matemáticas

Funciones Lógicas

Funciones de Cadena

Funciones de Conversión

Funciones de Fecha y Hora

Funciones del Sistema

Funciones de Agregación(Aggregate Functions)

Funciones de Clasificación

Funciones Analíticas

Funciones Definidas por el Usuario


Funciones(Functions)
Funciones(Functions)

Las funciones son programas predefinidos o definidos por el usuario


que realizan una tarea específica y devuelven un valor escalar o una
tabla. Las funciones se utilizan para realizar operaciones en los datos
almacenados en una base de datos y pueden ser invocadas en
consultas SQL o en otras funciones.
Funciones(Functions)

Existen dos tipos de Funciones dentro de SQL Server

Funciones Definidas por


Funciones del Sistema
el Usuario
Funciones(Functions)

Funciones del Sistema

Built-In Functions
(Funciones Integradas)

Aggregate Functions Analytic Functions Bit Manipulation Functions Collation Functions


(Funciones de Agregación) (Funciones Analíticas) (Funciones de Manipulación de Bits) (Funciones de Intercalación)

Configuration Functions Conversión Functions Cryptographic Functions Cursor Functions Data Type Functions
(Funciones de Configuración) (Funciones de Conversión) (Funciones de Criptográficas) (Funciones de Cursor) (Funciones de Tipos de Datos)

Date and Time Functions Graph Functions JSON Functions Mathematical Functions Logical Functions
(Funciones de Fecha y Hora) (Funciones de Grafico) (Funciones JSON) (Funciones Matemáticas) (Funciones Lógicas)

Metadata Functions Ranking Functions Replication Functions Security Functions String Functions
(Funciones de Metadatos) (Funciones de Clasificación) (Funciones de Replicación) (Funciones de Seguridad) (Funciones de Cadena)

System Functions System Statistical Functions Text and Image Functions Trigger Functions
(Funciones del Sistema) (Funciones Estadísticas del Sistema) (Funciones de Texto e Imagen) (Funciones de Desencadenador)
Funciones(Functions)

Funciones del Sistema

Built-In Functions
(Funciones Integradas)

Scalar Functions Aggregate Functions


(Funciones Escalares) (Funciones de Agregado)

Window Functions Rowset Functions


(Funciones de Ventana) (Funciones de Conjuntos de Filas)
Funciones Escalares(Scalar Functions)
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Las funciones escalares son las más parecidas a las funciones que se utilizan dentro de los
lenguajes de programación.

SELECT col1, col2


FROM tablaa
WHERE condicióna
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Las funciones escalares son las más parecidas a las funciones que se utilizan dentro de los
lenguajes de programación.

SELECT col1, col2, function(coln)


FROM tablaa
WHERE function(coln)

SET @var = function( ... ) IF @var = function( ... )


Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones Deterministas

Devuelven siempre el mismo resultado cada


vez que se llaman con un conjunto específico
de valores de entrada.
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones Deterministas

LOG10(100) = 2 SQRT(100) = 10

YEAR('01-01-2024') = 2024 POWER(5, 2) = 25

MONTH('01-01-2024') = 1 LEFT('Base de Datos', 4) = Base


Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones NO Deterministas

Nos devuelven diferentes resultados cada vez


que se les llama con un conjunto específico
de valores de entrada
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones NO Deterministas

GETDATE() CURRENT_TIMESTAMP

2024-02-19 13:54:46.333 2024-02-19 13:54:46.333

2024-02-19 14:27:42.397 2024-02-19 14:27:42.397

NEWID(), NEWSEQUENTIALID()
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

1 Valor

Transformar los datos

1 Valor

“No estamos generando cambios reales sobre la tabla original, solo en la salida”
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones Matemáticas
ABS COS LOG10 SIGN
ACOS COT PI SIN
ASIN DEGREES POWER SQRT
ATAN EXP RADIANS SQUARE
ATN2 FLOOR RAND TAN
CEILING LOG ROUND
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones Lógicas

CHOOSE IIF
COALESCE LEAST
GREATEST NULLIF
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones de Cadena

ASCII FORMAT PATINDEX RTRIM STUFF


CHAR LEFT QUOTENAME SOUNDEX SUBSTRING
CHARINDEX LEN REPLACE SPACE TRANSLATE
CONCAT LOWER REPLICATE STR TRIM
CONCAT_WS LTRIM REVERSE STRING_AGG UNICODE
DIFFERENCE NCHAR RIGHT STRING_ESCAPE UPPER
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones de Conversión

CAST TRY_CAST
CONVERT TRY_CONVERT
PARSE TRY_PARSE
Funciones Escalares(Scalar Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones de Fecha y Hora


@@DATEFIRST DATEFROMPARTS EOMONTH SYSDATETIMEOFFSET
CURRENT_TIMESTAMP DATENAME GETDATE SYSUTCDATETIME
CURRENT_TIMEZONE DATEPART GETUTCDATE TIMEFROMPARTS
CURRENT_TIMEZONE_ID DATETIME2FROMPARTS ISDATE TODATETIMEOFFSET
DATE_BUCKET DATETIMEFROMPARTS MONTH YEAR
DATEADD DATETIMEOFFSETFROMPARTS SMALLDATETIMEFROMPARTS
DATEDIFF DATETRUNC SWITCHOFFSET
DATEDIFF_BIG DAY SYSDATETIME
Funciones de Fecha y Hora del Sistema de
Precisión Elevada

SYSDATETIME SYSDATETIMEOFFSET SYSUTCDATETIME

Devuelve un valor datetime2(7) Devuelve un valor Devuelve un valor datetime2


que contiene la fecha y hora datetimeoffset(7) que contiene que contiene la fecha y hora
del equipo en el que la la fecha y hora del equipo en el del equipo en el que la
instancia de SQL Server se está que la instancia de SQL Server instancia de SQL Server se está
ejecutando. se está ejecutando. El ajuste de ejecutando. La fecha y hora se
zona horaria está incluido. devuelven como una hora
universal coordinada (UTC).

Sintaxis: Sintaxis: Sintaxis:

SYSDATETIME( ) SYSDATETIMEOFFSET( ) SYSUTCDATETIME( )


Funciones de Fecha y Hora del Sistema de
Precisión Baja

CURRENT_TIMESTAMP GETDATE GETUTCDATE

Esta función devuelve la marca Devuelve la marca de tiempo Devuelve la marca de tiempo
de tiempo del sistema de base del sistema de base de datos del sistema de la base de datos
de datos actual como un actual como un valor datetime actual como un valor datetime.
valor datetime sin el sin el desplazamiento de zona El ajuste de zona horaria de la
desplazamiento de zona horaria de la base de datos. base de datos no está incluido.
horaria de la base de Este valor se deriva del sistema Este valor representa la hora
datos. CURRENT_TIMESTAMP d operativo del equipo donde la UTC actual (Hora universal
eriva este valor del sistema instancia de SQL Server se está coordinada).
operativo del equipo en el que ejecutando.
se ejecuta la instancia de SQL
Server.

Sintaxis: Sintaxis: Sintaxis:

CURRENT_TIMESTAMP GETDATE( ) GETUTCDATE( )


Funciones que Devuelven Elementos de
Fecha y Hora

datepart Abreviaturas date


Devuelve una cadena de
DATENAME caracteres que representa el year yy, yyyy smalldatetime
parámetro datepart especificado
quarter qq, q datetime
Sintaxis: del argumento date especificado.
month mm, m date
DATENAME( datepart , date )
dayofyear dy, y time
day dd, d datetime2

Devuelve un entero que week wk, ww datetimeoffset


DATEPART representa el parámetro datepart weekday dw
especificado del parámetro date
Sintaxis: especificado. hour hh

DATEPART ( datepart , date ) minute mi, n


second ss, s
millisecond ms
Devuelve una fecha de entrada
DATETRUNC truncada a un datepart
microsecond mcs
especificado. nanosecond ns
Sintaxis:
➢ Weekday tzoffset tz
DATETRUNC(datepart , date ) ➢ Nanosecond iso_week isowk, isoww
➢ TZoffset
Funciones que Devuelven Elementos de
Fecha y Hora

DAY MONTH YEAR

Devuelve un entero que Devuelve un entero que Devuelve un entero que


representa el día (del mes) del representa la parte del mes de representa la parte del año del
argumento date especificado. la fecha date especificada. parámetro date especificado.

Sintaxis: Sintaxis: Sintaxis:

DAY( date ) MONTH( date ) YEAR( date )

date

smalldatetime datetime date time datetime2 datetimeoffset


Funciones que Devuelven Valores de Fecha y
Hora de sus Elementos

TIMEFROMPARTS DATEFROMPARTS SMALLDATETIMEFROMPARTS

Devuelve un valor time para la hora Devuelve un valor date que se asigna Devuelve un valor smalldatetime de la
especificada y con la precisión a los valores de año, mes y día fecha y la hora especificadas.
indicada. especificados.
Sintaxis: Sintaxis: Sintaxis:
TIMEFROMPARTS( hour, minute, DATEFROMPARTS( year, month, day ) SMALLDATETIMEFROMPARTS( year,
seconds, fractions, precision ) month, day, hour, minute )

DATETIMEFROMPARTS DATETIME2FROMPARTS DATETIMEOFFSETFROMPARTS


Devuelve un valor datetime para los Devuelve un valor datetime2 para los Devuelve un valor datetimeoffset para
argumentos de fecha y hora argumentos de fecha y hora los argumentos de fecha y hora
especificados. especificados. El valor devuelto tiene especificados. El valor devuelto tiene
una precisión especificada por el una precisión especificada por el
Sintaxis: argumento de precisión. argumento precisión y un
desplazamiento especificado por los
DATETIMEFROMPARTS( year , month argumentos de desplazamiento.
, day , hour , minute , seconds , Sintaxis:
milliseconds ) Sintaxis:
DATETIME2FROMPARTS( year,
month, day, hour, minute, seconds, DATETIMEOFFSETFROMPARTS( year,
fractions, precision ) month, day, hour, minute, seconds,
fractions, hour_offset, minute_offset,
precision )
Funciones que Devuelven Valores de Fecha y
Hora de sus Elementos

TIMEFROMPARTS TIMEFROMPARTS( hour, minute, ➢ year


seconds, fractions, precision ) Expresión entera que especifica un año.
➢ month
Expresión entera que especifica un mes.
➢ day
DATEFROMPARTS DATEFROMPARTS( year, month, day )
Expresión entera que especifica un día.
➢ hour
Expresión entera que especifica las horas.
➢ minute
SMALLDATETIMEFROMPARTS SMALLDATETIMEFROMPARTS( year, Expresión entera que especifica los minutos.
month, day, hour, minute ) ➢ seconds
Expresión entera que especifica los segundos.
➢ milliseconds
Expresión entera que especifica los milisegundos.
DATETIMEFROMPARTS DATETIMEFROMPARTS( year , month
➢ fractions
, day , hour , minute , seconds ,
Expresión entera que especifica un valor de
milliseconds )
fracciones de segundo.
➢ hour_offset
DATETIME2FROMPARTS DATETIME2FROMPARTS( year, Expresión entera que especifica la parte de hora
month, day, hour, minute, seconds, del desplazamiento de zona horaria.
fractions, precision ) ➢ minute_offset
Expresión entera que especifica la parte de los
DATETIMEOFFSETFROMPARTS( year, minutos del desplazamiento de zona horaria.
DATETIMEOFFSETFROMPARTS ➢ precision
month, day, hour, minute, seconds,
fractions, hour_offset, minute_offset, Valor literal entero que especifica la precisión del
precision ) valor que va a devolver.
Funciones que Devuelven Valores de
Diferencia de Fecha y Hora

Devuelve la diferencia entre dos datepart Abreviaturas Startdate y


DATEDIFF fechas, devolviendo el resultado Enddate
year yy, yyyy
en la unidad especificada (año,
smalldatetime
trimestre, mes, día, semana, hora, quarter qq, q
minuto, segundo, milisegundo, datetime
etc.). Devuelve el resultado en un month mm, m
valor de tipo de dato int. date
dayofyear dy, y
Sintaxis: time
day dd, d
DATEDIFF( datepart , startdate , enddate ) datetime2
week wk, ww
datetimeoffset
hour hh
minute mi, n
Esta función es Similar a DATEDIFF
DATEDIFF_BIG pero devuelve el resultado en un second ss, s
valor de tipo de dato bigint para
manejar diferencias muy grandes. millisecond ms
Sintaxis: microsecond mcs
DATEDIFF_BIG( datepart , startdate , enddate ) nanosecond ns
Funciones que Modifican Valores de
Fecha y Hora

datepart Abreviaturas date


year yy, yyyy smalldatetime
DATEADD
quarter qq, q datetime
month mm, m date
Agrega un intervalo de tiempo dayofyear dy, y time
a una fecha(año, trimestre,
mes, día, semana, hora, minuto, day dd, d datetime2
segundo, milisegundo, etc.). week wk, ww datetimeoffset
weekday dw
Sintaxis:
hour hh

DATEADD( datepart , number , date ) minute mi, n


second ss, s
El argumento “datepart” especifica la fecha a la
que DATEADD agrega un número int. millisecond ms
microsecond mcs
El argumento “number” es una expresión de un tipo
de dato “int” y su valor puede ser positivo o nanosecond ns
negativo.
Funciones que Modifican Valores de
Fecha y Hora

EOMONTH

Devuelve el último día del mes


que contiene la fecha
especificada, con un
desplazamiento opcional.

Sintaxis:

DATEADD( start_date [ , month_to_add ] )

El argumento “start_date” es una expresión de fecha que especifica la


fecha para la que se devuelve el último día del mes.

El argumento opcional “month_to_add” es una expresión de tipo


entero que especifica el número de meses que se van a agregar o
restar al argumento ”start_date”.
Funciones que Establecen o Devuelven
Funciones de Formato de Sesión

SET DATEFORMAT sp_helplanguage

Establece el orden de las partes Es un procedimiento almacenado de la Tabla


correspondientes al mes, día y año de una fecha “sys.syslanguages” que nos muestra información
para interpretar las cadenas de caracteres de sobre un lenguaje alternativo determinado o
fecha para la sesión actual. sobre todos los lenguajes de SQL Server.

Sintaxis: Sintaxis:
SET DATEFORMAT{ format } sp_helplanguage[ 'language’ ]
mdy, dmy, ymd, ydm, myd y dym En el argumento opcional “language” se debe poner el
idioma alternativo para el que se va a mostrar información.

SET LANGUAGE @@LANGUAGE

Establece el idioma de la sesión actual. Esto Devuelve el nombre del idioma actual de la
establece la opción SET DATEFORMAT de forma sesión.
implícita.

Sintaxis: Sintaxis:
SET LANGUAGE{ 'language’ } @@LANGUAGE
El argumento “language” es el nombre del idioma tal como
está almacenado en sys.syslanguages o el procedimiento
almacenado sp_helplanguage.
Funciones(Functions)

Funciones del Sistema

Scalar Functions
(Funciones Escalares)

Funciones del Sistema


$PARTITION CURRENT_REQUEST_ID GETANSINULL NEWID
@@ERROR CURRENT_TRANSACTION_ID HOST_ID NEWSEQUENTIALID
@@IDENTITY DECOMPRESS HOST_NAME ROWCOUNT_BIG
@@PACK_RECEIVED ERROR_LINE ISNULL SESSION_CONTEXT
@@ROWCOUNT ERROR_MESSAGE ISNUMERIC SESSION_ID
@@TRANCOUNT ERROR_NUMBER
MIN_ACTIVE_ROWVERSION XACT_STATE
BINARY_CHECKSUM ERROR_PROCEDURE
CHECKSUM ERROR_SEVERITY
COMPRESS ERROR_STATE
CONNECTIONPROPERTY FORMATMESSAGE
CONTEXT_INFO GET_FILESTREAM_TRANSACTION_CONTEXT
Funciones de Agregación
Funciones de Agregación

Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Son funciones especializadas que realizan cálculos sobre grupos de variables y devuelven un
único resultado. A diferencia de las funciones tradicionales, las funciones de agregado trabajan
sobre grupos de filas de datos. Esto permite calcular estadísticas de forma eficaz o generar
información resumida a partir de un conjunto de datos.
Funciones de Agregación

Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Funciones de Agregación

APPROX_COUNT_DISTINCTAVG GROUPING STDEVP


AVG GROUPING_ID STRING_AGG
CHECKSUM_AGG MAX SUM
COUNT MIN VAR
COUNT_BIG STDEV VARP
Funciones de Agregación

Funciones del Sistema


a b c
Conjunto de Valores
PER

PER a b c

PER PER

Transformar los datos MEX MEX

MEX CHI

CHI

1 Valor CHI

CHI

“No estamos generando cambios reales sobre la tabla original, solo en la salida”
Funciones de Agregación

Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Cláusula GROUP BY

La Cláusula GROUP BY agrupa los resultados de


la instrucción SELECT según los valores en una
lista con una o varias expresiones de columna.
Funciones de Agregación

Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Cláusula GROUP BY

SELECT Columna, Columnb, … ,


[ AggregateFunction1(expresión), AggregateFunction2(expresión), … ]
FROM TableName
[ WHERE Expression ]
GROUP BY ColumnN
Funciones de Agregación

Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Cláusula HAVING

La cláusula HAVING especifica una condición de búsqueda


para un grupo o agregado. La cláusula HAVING solo se puede
utilizar con la instrucción SELECT y GROUP BY. La
Cláusula HAVING se agregó a SQL porque la Cláusula WHERE
no se puede usar con las Funciones Agregadas.
Funciones de Agregación

Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Cláusula HAVING

SELECT Columna, Columnb, … ,


[ AggregateFunction1(expresión), AggregateFunction2(expresión), … ]
FROM TableName
[ WHERE Expression ] Filtro a la Tabla
GROUP BY ColumnN
HAVING AggregateFunction(expresión) Filtro a la Función de Agregación
Funciones de Ventana
Funciones de Ventana

Funciones del Sistema

Window Functions
(Funciones de Ventana)

Las funciones de ventana realizan cálculos sobre un conjunto de filas relacionadas, pero a
diferencia de las funciones de agregación, no agrupan los resultados en una sola fila, sino que
devuelven un conjunto de valores.
Funciones de Ventana

Funciones del Sistema Resultado de la


Función de Ventana

a b c a b c
Conjunto de Valores PER
PER

PER PER

PER PER
Transformar los datos
MEX MEX
Cláusula OVER
MEX MEX

CHI CHI

Conjunto de Valores CHI CHI

CHI CHI

“No estamos generando cambios reales sobre la tabla original, solo en la salida”
Funciones de Ventana

Funciones del Sistema

Window Functions
(Funciones de Ventana)

Funciones de Clasificación

DENSE_RANK
NTILE
RANK
ROW_NUMBER
Cláusula OVER
Cláusula OVER

La cláusula OVER determina las particiones y el orden de un conjunto de filas antes de

que se aplique la función de ventana asociada. Es decir, la cláusula OVER define una

ventana o un conjunto de filas definido por el usuario en un conjunto de resultados de la

consulta. Una función de ventana calcula entonces un valor para cada fila de la ventana.

Se puede utilizar la cláusula OVER con funciones para calcular valores agregados tales

como medias móviles, agregados acumulados, totales acumulados, etc.


Cláusula OVER

Sintaxis:

OVER (
[ PARTITION BY value_expression ]
[ ORDER BY order_by_expression [ASC | DESC] ]
)
Cláusula OVER

Sintaxis:
OVER (
[ PARTITION BY value_expression ]
[ ORDER BY order_by_expression [ASC | DESC] ]
)

Si no se especifica PARTITION BY, la función trata todas las filas del conjunto de resultados de la
DENSE_RANK
consulta como una única partición. La función se aplicará en todas las filas de la partición si no
NTILE especifica la cláusula ORDER BY.

RANK
value_expression solo puede hacer referencia a las columnas disponibles mediante la cláusula
ROW_NUMBER FROM. value_expression no puede hacer referencia a expresiones o alias en la lista de la selección.

... value_expression puede ser una expresión de columna, una subconsulta escalar, una función
escalar o una variable definida por el usuario.
Cláusula OVER

Sintaxis:
OVER (
[ PARTITION BY value_expression ]
[ ORDER BY order_by_expression [ASC | DESC] ]
)

La cláusula ORDER BY dentro de la función OVER( ) se utiliza para definir el orden en el que la función de
ventana procesa las filas dentro de cada partición. Le permite controlar cómo se ordenan los datos antes de que
se realicen los cálculos de la función de ventana.

ORDER BY Especifica una columna o expresión según la cual ordenar.


order_by_expression solo puede hacer referencia a las columnas disponibles mediante la cláusula FROM. No se
puede especificar un número entero para representar un nombre o alias de columna.

Si no se especifica, el orden predeterminado es ASC y la función de ventana utilizará todas las filas de la partición.
Funciones de Ventana

Funciones del Sistema

Window Functions
(Funciones de Ventana)

Funciones Analíticas

CUME_DIST LEAD
FIRST_VALUE PERCENTILE_CONT
LAG PERCENTILE_DISC
LAST_VALUE PERCENT_RANK
Funciones(Functions)

Existen dos tipos de Funciones dentro de SQL Server

Funciones Definidas por


Funciones del Sistema
el Usuario
Funciones(Functions)

Funciones Definidas por el Usuario

Funciones Funciones de
escalares Tipo Tabla

Funciones de valor de
tabla en línea

Funciones de valor de tabla de


múltiples declaraciones
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

Crear Objeto Nombre Objeto

CREATE FUNCTION Nombre(@par1 DateType,. . .,@parn DateType)

Parámetro
Tipo Objeto
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE FUNCTION Nombre(@par1 DateType,. . .,@parn DateType)

RETURNS [DataType | Table]

Función Escalar Función de Tipo Tabla


Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
Inicio AS
BEGIN
Función del
DECLARE @cantidad_empleado INT;
Sistema
SET @cantidad_empleado = (
Bloque de
SELECT COUNT(1)
Ejecución
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)

END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
Inicio AS
BEGIN
DECLARE @cantidad_empleado INT;

SET @cantidad_empleado = (
Bloque de
SELECT COUNT(1)
Ejecución
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)

END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
Inicio AS
BEGIN
DECLARE @cantidad_empleado INT;

SET @cantidad_empleado = (
Bloque de
SELECT COUNT(1)
Ejecución
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)
RETURN @cantidad_empleado;
END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

ALTER FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
AS
BEGIN
DECLARE @cantidad_empleado INT;

SET @cantidad_empleado = (
SELECT COUNT(1)
FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus
)
RETURN @cantidad_empleado;
END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

ALTER FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
AS
BEGIN
DECLARE @cantidad_empleado INT;

SELECT @cantidad_empleado = COUNT(1)


FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus

RETURN @cantidad_empleado;
END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE OR ALTER FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
AS
BEGIN
DECLARE @cantidad_empleado INT;

SELECT @cantidad_empleado = COUNT(1)


FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus

RETURN @cantidad_empleado;
END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE OR ALTER FUNCTION Cantidad_Empleados_EstadoCivil(@MaritalStatus CHAR(1))


RETURNS INT
AS
BEGIN
DECLARE @cantidad_empleado INT;

SELECT @cantidad_empleado = COUNT(1)


FROM HumanResources.Employee
WHERE MaritalStatus = @MaritalStatus

RETURN @cantidad_empleado;
END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

SELECT dbo.Cantidad_Empleados_EstadoCivil('M') AS Cantidad


GO

DECLARE @CantidadDoble INT = 0


SET @CantidadDoble = dbo.Cantidad_Empleados_EstadoCivil('M') * 2
SELECT @CantidadDoble AS Cantidad
GO
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones escalares

CREATE FUNCTION Calcular_Pitagoras (@cateto_a FLOAT, @cateto_b FLOAT)


RETURNS FLOAT
AS
BEGIN

DECLARE @hipotenusa FLOAT;

SET @hipotenusa = SQRT( POWER(@cateto_a, 2) + POWER(@cateto_b, 2) )

RETURN @hipotenusa;

END;

SELECT dbo.calcular_pitagoras(6, 8) = 10
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(En Línea)

CREATE FUNCTION Nombre(@par1 DateType,. . .,@parn DateType)

RETURNS [Table]

Tabla
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(En Línea)

CREATE FUNCTION Nombre(@par1 DateType,. . .,@parn DateType)

RETURNS [Table]
Inicio AS
RETURN(

Bloque de
Ejecución
Instrucción SQL;

);
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(En Línea)

CREATE OR ALTER FUNCTION Mostrar_Empleados_HorasVacaciones(@hora SMALLINT)


RETURNS TABLE
AS
RETURN(
SELECT BusinessEntityID, JobTitle, BirthDate, HireDate,
Gender, MaritalStatus, VacationHours
FROM HumanResources.Employee
WHERE VacationHours <= @hora
)
GO
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(En Línea)

SELECT *
FROM Mostrar_Empleados_HorasVacaciones(50)
ORDER BY VacationHours DESC
GO

SELECT BusinessEntityID, JobTitle, HireDate, VacationHours


FROM Mostrar_Empleados_HorasVacaciones(50)
ORDER BY VacationHours DESC
GO
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(Múltiples Declaraciones)

CREATE FUNCTION Nombre(@par1 DateType,. . .,@parn DateType)

RETURNS @NOMBRE [Table] (col1 DateType, . . . , coln DateType)


Inicio AS
BEGIN

Bloque de
Ejecución
Insertar filas en la Tabla @NOMBRE
RETURN
END;
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(Múltiples Declaraciones)
CREATE OR ALTER FUNCTION Lista_Empleados_HorasVacaciones(@hora SMALLINT)
RETURNS @Lista TABLE(BusinessEntityID INT, JobTitle NVARCHAR(50),
HireDate DATE, VacationHours SMALLINT)
AS
BEGIN
INSERT INTO @LISTA
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours
FROM HumanResources.Employee
WHERE VacationHours <= @hora

RETURN
END
GO
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(Múltiples Declaraciones)
CREATE OR ALTER FUNCTION Lista_Empleados_HorasVacaciones(@hora SMALLINT)
RETURNS @Lista TABLE(BusinessEntityID INT, JobTitle NVARCHAR(50),
HireDate DATE, VacationHours SMALLINT)
AS
BEGIN
INSERT INTO @LISTA
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours
FROM HumanResources.Employee
WHERE VacationHours <= @hora

RETURN
END
GO
Funciones(Functions)

Funciones Definidas por el Usuario


Funciones de Tabla(Múltiples Declaraciones)

SELECT *
FROM Lista_Empleados_HorasVacaciones(50)
ORDER BY VacationHours DESC
GO

SELECT BusinessEntityID, JobTitle, HireDate, VacationHours


FROM Lista_Empleados_HorasVacaciones(50)
ORDER BY VacationHours DESC
GO
Descripción de la Sección

Tipos de JOINS

Cláusula INNER JOIN

Cláusula LEFT JOIN

Cláusula RIGHT JOIN

Cláusula FULL JOIN

Cláusula CROSS JOIN

Cláusula SELF JOIN


Tipos de JOINS
Tipos de JOINS

En bases de datos relacionales, como SQL Server, Oracle, MySQL y


otras, los datos se almacenan en varias tablas que están
relacionadas entre sí con un valor de clave común. En consecuencia,
existe una necesidad constante de extraer registros de dos o más
tablas en una tabla de resultados en función de alguna condición.
En SQL Server, esto se puede lograr fácilmente con la cláusula JOIN.
Tipos de JOINS

JOIN es una cláusula SQL que se utiliza para consultar y acceder a


datos de varias tablas, basándose en relaciones lógicas entre esas
tablas.

En otras palabras, JOINS indica cómo SQL Server debe utilizar los
datos de una tabla para seleccionar las filas de otra tabla..
Tipos de JOINS

Todo parte del producto cartesiano

Un producto cartesiano es el resultado de una combinación de


todas las filas de dos tablas, esto significa que cada fila de la Name Product
primera tabla se combina con cada fila de la segunda tabla,
generando un número de filas en el resultado que es el producto Karen Yogurt
del número de filas de ambas tablas. Karen Yogurt
Karen Yogurt
Hugo Agua
Name Product Hugo Agua

X =
Karen Yogurt Hugo Agua
Oscar Dulce
Hugo Agua
Oscar Dulce
Oscar Dulce Oscar Dulce
Tipos de JOINS

Tipos Descripción

Inner Join Inicia con el producto cartesiano; aplica el filtro para que coincidan con filas
(Join Interno) entre cuadros basados en predicado.

Inicia con el producto cartesiano; todas las filas de la tabla designada se


Outer Join
conservan, igualando filas de otra tabla recuperada.
(Join Externo)
Los valores NULL se adicionan como marcadores de posición.

Cross Join Combina todas las fila de ambas tablas


(Join Cruzada) (crea el producto cartesiano).

Self Join Inicia con el producto cartesiano; aplica el filtro y es una técnica en la cual
(Join consigo mismo) una tabla se une consigo misma.
Tipos de JOINS

Sintaxis:
ANSI SQL-92 ANSI SQL-89

Las Tablas son unidas por la Las Tablas son unidas por comas en
instrucción JOIN en la cláusula FROM la cláusula FROM
No es recomendable: produce productos
cartesianos accidentales.

SELECT . . . SELECT . . .
FROM Table1 <Type Join> Table2 FROM Table1, Table2
ON <on_predicate> WHERE <where_predicate>
Tipos de JOINS

A B A B A B
SELECT <list> FROM SELECT <list> FROM SELECT <list> FROM
TableA A LEFT JOIN TableB B TableA A INNER JOIN TableB B TableA A RIGHT JOIN TableB B
ON A.KEY = B.KEY ON A.KEY = B.KEY ON A.KEY = B.KEY

A B A A B
SELECT <list> FROM SELECT <list> FROM SELECT <list> FROM
TableA A LEFT JOIN TableB B TableA A INNER JOIN TableA B TableA A RIGHT JOIN TableB B
ON A.KEY = B.KEY ON A.KEY = B.COLUMN ON A.KEY = B.KEY
WHERE B.KEY IS NULL WHERE A.KEY IS NULL

A B
A B A B
SELECT <list> FROM SELECT <list> FROM SELECT <list> FROM
TableA A FULL JOIN TableB B TableA A CROSS JOIN TableB B TableA A FULL JOIN TableB B
ON A.KEY = B.KEY ON A.KEY = B.KEY
WHERE A.KEY IS NULL OR B.KEY IS NULL
Cláusula INNER JOIN
Cláusula INNER JOIN

La cláusula INNER JOIN(Join Interno) se utiliza para combinar filas

A B
de dos o más tablas basadas en una condición que especifica una
relación entre las columnas de las tablas. La cláusula INNER JOIN
devuelve solo aquellas filas que tienen coincidencias en ambas
tablas según la condición de unión especificada.
SELECT <list> FROM
TableA A INNER JOIN TableB B
ON A.KEY = B.KEY OPCIONAL
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN

PREDETERMINADO
OPCIONAL
Cláusula LEFT JOIN
Cláusula LEFT JOIN

La cláusula LEFT JOIN(Join Externo), también conocido como

A B LEFT OUTER JOIN se utiliza para combinar filas de dos tablas de manera
que devuelve todas las filas de la tabla de la izquierda (la primera tabla
mencionada) y las filas coincidentes de la tabla de la derecha (la
SELECT <list> FROM
TableA A LEFT JOIN TableB B segunda tabla mencionada). Si no hay ninguna coincidencia en la tabla
ON A.KEY = B.KEY derecha, se devuelven NULL para las columnas de la tabla derecha.

OPCIONAL OPCIONAL
<join_type> ::=

A B
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN

LEFT OUTER JOIN


SELECT <list> FROM
TableA A LEFT JOIN TableB B
ON A.KEY = B.KEY
WHERE B.KEY IS NULL
LEFT JOIN
Cláusula RIGHT JOIN
Cláusula RIGHT JOIN

La cláusula RIGHT JOIN(Join Externo), también conocido como

A B RIGHT OUTER JOIN se utiliza para combinar filas de dos tablas de manera
que devuelve todas las filas de la tabla de la derecha (la segunda tabla
mencionada) y las filas coincidentes de la tabla de la izquierda (la primera
SELECT <list> FROM
TableA A RIGHT JOIN TableB B tabla mencionada). Si no hay ninguna coincidencia en la tabla izquierda,
ON A.KEY = B.KEY se devuelven NULL para las columnas de la tabla izquierda.

OPCIONAL OPCIONAL
<join_type> ::=

A B
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN

RIGHT OUTER JOIN


SELECT <list> FROM
TableA A RIGHT JOIN TableB B
ON A.KEY = B.KEY
WHERE A.KEY IS NULL
RIGHT JOIN
Cláusula FULL JOIN
Cláusula FULL JOIN

La cláusula FULL JOIN(Join Externo), también conocido como

A B FULL OUTER JOIN se utiliza para combinar filas de dos tablas de manera
que devuelve todas las filas cuando hay una coincidencia en una de las
tablas. El resultado incluirá todas las filas de ambas tablas y, cuando no
SELECT <list> FROM
TableA A FULL JOIN TableB B haya coincidencia, las columnas de la tabla faltante tendrán valores NULL.
ON A.KEY = B.KEY

OPCIONAL OPCIONAL
<join_type> ::=

A B
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } ]
JOIN

FULL OUTER JOIN


SELECT <list> FROM
TableA A FULL JOIN TableB B
ON A.KEY = B.KEY
WHERE A.KEY IS NULL OR B.KEY IS NULL
FULL JOIN
Cláusula CROSS JOIN
Cláusula CROSS JOIN

La cláusula CROSS JOIN(Join Cruzado), es una operación que


A B combina cada fila de una tabla con cada fila de otra tabla,
generando un producto cartesiano.
El resultado de un CROSS JOIN incluye todas las

SELECT <list> FROM combinaciones posibles de filas entre las dos tablas
TableA A CROSS JOIN TableB B
involucradas.

Sintaxis:

SELECT column1, column2, columnN


FROM TableA CROSS JOIN TableB

Algo importante a tener en cuenta es que la cláusula CROSS JOIN no se utiliza mucho en un
ambiente real o de producción, es raro su utilización y se suele utilizar para testear datos.
Cláusula SELF JOIN
Cláusula SELF JOIN

La cláusula SELF JOIN(Auto Unión) en SQL Server no existe como tal,

A
sino es una técnica en la que una tabla se une consigo misma. Esto
se utiliza cuando se desea comparar filas dentro de la misma tabla o
cuando los datos en una sola tabla necesitan ser relacionados entre
sí de alguna manera. Para realizar un SELF JOIN, se usan alias de
SELECT <list> FROM
tabla para diferenciar las diferentes instancias de la misma tabla.
TableA A INNER JOIN TableA B
ON A.KEY = B.COLUMN
Un caso típico de uso de SELF JOIN es en una tabla de “empleados ”
donde cada “empleado” tiene un campo de identificación de su
Sintaxis: “gerente”. Al usar un SELF JOIN, se pueden relacionar los empleados
con sus gerentes para obtener una jerarquía de informes.
SELECT column1, column2, columnN
FROM TableA [INNER | LEFT | RIGHT ] TableB
ON TableA.Key = B.Column
Descripción de la Sección

Descripción de Subconsultas

Subconsultas Escalares

Subconsultas Multivalor
Subconsultas
Subconsultas

Subconsultas
Subconsultas

Sub consultas

• Que algo depende algo La consultas es una instrucción

• Que algo esta debajo de algo escrita en el lenguaje SQL.

• Que algo esta dentro de algo


Subconsultas

Una subconsulta es una consulta anidada dentro de otra consulta SQL.

Los resultados de la consulta interna pasan a la consulta externa y


la consulta interna actúa como una expresión desde la perspectiva
de la consulta externa.
SQL
Las subconsultas pueden devolver un único valor, una lista de
valores o un conjunto completo de resultados y se utilizan en
diversas cláusulas de la consulta principal, como SELECT, FROM,
WHERE, HAVING y otras. Son útiles para realizar consultas más
complejas y específicas, permitiendo la reutilización de resultados
de una consulta en otra.
Subconsultas

Las subconsultas pueden ser autónomas o correlacionadas

➢ Las consultas autónomas se ejecutan por separado

➢ Las consultas correlacionadas dependen de los valores de la consulta externa.

Existen dos tipos principales de subconsultas:


SQL
1. Subconsultas Escalares: Devuelven un solo valor y suelen usarse en

cláusulas SELECT o WHERE.

2. Subconsultas Multivalor: Devuelven múltiples filas o columnas y pueden

utilizarse con operadores como IN, ALL, EXISTS, entre otros.


Subconsultas Escalares
Subconsultas Escalares

Las subconsultas escalares en SQL Server son subconsultas que devuelven un único valor (un
solo dato) como resultado. Este valor puede ser un número, una cadena, una fecha, etc.

Las subconsultas escalares se utilizan comúnmente en las cláusulas SELECT, WHERE, o en


cualquier lugar donde se espera un valor simple.

Una subconsulta escalar está encerrada entre paréntesis y se ejecuta una vez para cada fila de
la consulta principal. Debido a que devuelven un único valor, pueden utilizarse en expresiones
de asignación, comparaciones, o en combinaciones con operadores aritméticos y lógicos.

Si la consulta interna devuelve un conjunto vacío, el resultado se convierte en NULL.


Subconsultas Escalares

Subconsulta Escalar en la Cláusula SELECT


SELECT NombreProducto, Precio,
(SELECT AVG(Precio) FROM Productos) AS PrecioPromedio
FROM Productos;

Subconsulta Escalar en la Cláusula WHERE


SELECT NombreEmpleado, Salario
FROM Empleados
WHERE Salario > (SELECT AVG(Salario) FROM Empleados);

Subconsulta Escalar en Expresiones de Asignación

DECLARE @SalarioPromedio DECIMAL(10, 2);


SET @SalarioPromedio = (SELECT AVG(Salario) FROM Empleados);
Subconsultas Multivalor
Subconsultas Multivalor

Las subconsultas multivalor en SQL Server son subconsultas que pueden devolver múltiples
filas y/o columnas como resultado. A diferencia de las subconsultas escalares, que devuelven
un solo valor, las subconsultas multivalor pueden proporcionar una lista de valores o un
conjunto de resultados completo.

Las subconsultas multivalor se utilizan en diferentes contextos dentro de una consulta


principal, como en las cláusulas WHERE, HAVING, y FROM. Se usan con operadores que
pueden manejar conjuntos de resultados, como IN, EXISTS, ALL, y también pueden formar
parte de una lista de selección en consultas anidadas más complejas.
Subconsultas Multivalor

Subconsulta Multivalor con IN


SELECT NombreProducto
FROM Productos
WHERE ProductoID IN (SELECT ProductoID FROM Ventas);

Subconsulta Multivalor con EXISTS


SELECT NombreDepartamento
FROM Departamentos d
WHERE EXISTS (SELECT 1 FROM Empleados e WHERE e.DepartamentoID = d.DepartamentoID);

Subconsulta Multivalor en la cláusula FROM


SELECT AVG(Precio)
FROM (SELECT Precio FROM Productos WHERE Categoria = 'Electrónica') AS PreciosElectronica;
Subconsultas Multivalor

¿Qué ventajas tiene utilizar Subconsultas?

➢ No alterar el Script ya construido.

➢ Permite desarrollar lógica para solucionar problemas.

➢ Las Subconsultas es fundamental para las Vistas.

➢ Forma parte del aprendizaje de SQL Server.


Descripción de la Sección

Objetivo de la Sección

Funciones de Metadato

Restricciones

Implementar el Modelo Relacional

Pruebas de Implementación
Objetivo de la Sección
Funciones de Metadatos
Funciones de Metadatos

En SQL Server, las funciones de metadatos son funciones integradas


que proporcionan información sobre la base de datos y sus objetos.

Estas funciones permiten a los administradores de bases de datos y a


los desarrolladores consultar propiedades y características de la base
de datos, sus tablas, columnas, índices, procedimientos
almacenados, vistas y otros objetos. Son herramientas esenciales
para gestionar y mantener la base de datos de manera eficiente.
Funciones de Metadatos
Funciones del Sistema

Aggregate Functions
(Funciones de Agregación)

Funciones de Metadatos
@@PROCID DB_NAME INDEXKEY_PROPERTY SCHEMA_ID
APP_NAME FILE_ID INDEXPROPERTY SCHEMA_NAME
APPLOCK_MODE FILE_IDEX NEXT VALUE FOR SCOPE_IDENTITY
APPLOCK_TEST FILE_NAME OBJECT_DEFINITION SERVERPROPERTY
ASSEMBLYPROPERTY FILEGROUP_ID OBJECT_ID STATS_DATE
COL_LENGTH FILEGROUP_NAME OBJECT_NAME TYPE_ID
COL_NAME FILEGROUPPROPERTY OBJECT_SCHEMA_NAME TYPE_NAME
COLUMNPROPERTY FILEPROPERTY OBJECTPROPERTY TYPEPROPERTY
DATABASE_PRINCIPAL_ID FULLTEXTCATALOGPROPERTY OBJECTPROPERTYEX VERSION
DATABASEPROPERTYEX FULLTEXTSERVICEPROPERTY ORIGINAL_DB_NAME
DB_ID INDEX_COL PARSENAME
Funciones de Metadatos

Tipos Comunes de Funciones de Metadatos

1. INFORMACIÓN SOBRE BASES DE DATOS

DB_NAME(): Devuelve el nombre de la base de datos.

SELECT DB_NAME();

DATABASEPROPERTYEX(): Devuelve propiedades de la base de datos.

SELECT DATABASEPROPERTYEX('BaseDeDatosEjemplo', 'Status');

2. INFORMACIÓN SOBRE OBJETOS

OBJECT_ID(): Devuelve el identificador de un objeto.

SELECT OBJECT_ID('dbo.TablaEjemplo');

OBJECT_NAME(): Devuelve el nombre de un objeto dado su ID.

SELECT OBJECT_NAME(OBJECT_ID('dbo.TablaEjemplo'));
Funciones de Metadatos

Tipos Comunes de Funciones de Metadatos


3. INFORMACIÓN SOBRE COLUMNAS
COLUMNPROPERTY(): Devuelve propiedades de una columna específica.

SELECT COLUMNPROPERTY(OBJECT_ID('dbo.TablaEjemplo'), 'ColumnaEjemplo', 'Precision');

4. INFORMACIÓN SOBRE ÍNDICES


INDEXPROPERTY(): Devuelve propiedades de un índice.

SELECT INDEXPROPERTY(OBJECT_ID('dbo.TablaEjemplo'), 'IndiceEjemplo', 'IsUnique');

5. INFORMACIÓN SOBRE ARCHIVOS


FILEPROPERTY(): Devuelve propiedades de un archivo.

SELECT FILEPROPERTY('NombreArchivo', 'IsReadOnly');

6. INFORMACIÓN SOBRE EL SERVIDOR


SERVERPROPERTY(): Devuelve propiedades de la instancia del servidor.

SELECT SERVERPROPERTY('ProductVersion');
Funciones de Metadatos

Beneficios:

• Automatización

• Administración

• Auditoría
Funciones de Metadatos

Beneficios:

Las funciones de metadatos son herramientas poderosas


para quienes gestionan y desarrollan bases de datos,
proporcionando información detallada y específica de una
manera fácil y directa.
Restricciones
Restricciones
Son reglas y restricciones predefinidas que se aplican en una sola columna o en varias
columnas, relacionados a los valores permitidos en las columnas, para mantener la
integridad, precisión y confiabilidad de los datos de esa columna.

Si los datos insertados cumplen Si los datos insertados violan la


con la regla de restricción, se restricción definida, la operación de
insertarán con éxito. inserción se cancelará.

Las restricciones se pueden considerar a nivel de columna, donde se especifica como


parte de la definición de columna y se aplicarán solo a esa columna.

CREATE TABLE NOMBRE_TABLA


(
colum1 ...,
colum1 ..., ALTER TABLE NOMBRE_TABLA ...
colum1 ...,
colum1 ...
);
Restricciones

Existen 6 tipos de Restricciones que podemos utilizar, las cuales son:

NOT NULL UNIQUE

PRIMARY KEY FOREIGN KEY

CHECK DEFAULT
Restricciones

NOT NULL

Por defecto, las columnas pueden contener valores NULL. Se


usa una restricción NOT NULL para evitar insertar valores
NULL en la columna especificada, considerándolo entonces
como un valor no aceptado para esa columna. Esto significa
que debe proporcionar un valor válido NO NULO, ya que la
columna siempre contendrá datos.
Restricciones

NOT NULL

CREATE TABLE PROFESORES


(
dni INT NOT NULL,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) NOT NULL,
edad TINYINT
);
Restricciones

NOT NULL

CREATE TABLE PROFESORES


(
dni INT NOT NULL,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30


Restricciones

NOT NULL

CREATE TABLE PROFESORES


(
dni INT NOT NULL,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30

88888888 Jose Perez Garcia [email protected] NULL

… … … … … …
Restricciones

UNIQUE

La restricción UNIQUE se utiliza para garantizar que no se


inserten valores duplicados en una columna específica o
combinación de columnas que participen en la restricción
UNIQUE y no formen parte de la CLAVE PRIMARIA.
Restricciones

UNIQUE

CREATE TABLE PROFESORES


(
dni INT NOT NULL,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30

88888888 Jose Perez Garcia [email protected] NULL

… … … … … …
Restricciones

UNIQUE

CREATE TABLE PROFESORES


(
dni INT NOT NULL,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30

88888888 Jose Perez Garcia [email protected] NULL

77777777 Fatima Torres Gallegos [email protected] NULL

… … … … … …
Restricciones

PRIMARY KEY

La restricción PRIMARY KEY consta de una columna o varias columnas con valores
que identifican de forma única cada fila de la tabla.

La restricción PRIMARY KEY, combina restricciones UNIQUE y NOT NULL, donde la


columna o el conjunto de columnas que participan en PRIMARY KEY no pueden
aceptar el valor NULL. Si la PRIMARY KEY(CLAVE PRIMARIA) se define en varias
columnas, entonces se puede insertar valores duplicados en cada columna
individualmente, pero es importante mencionar que los valores de combinación
de todas las columnas de PRIMARY KEY(CLAVE PRIMARIA) deben ser únicos.

Además de proporcionar un acceso rápido a los datos de la tabla, se crea


automáticamente el ÍNDICE al definir la CLAVE PRIMARIA
Restricciones

PRIMARY KEY

CREATE TABLE PROFESORES


(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30

88888888 Jose Perez Garcia [email protected] NULL

… … … … … …
Restricciones

PRIMARY KEY

CREATE TABLE PROFESORES


(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30

88888888 Jose Perez Garcia [email protected] NULL

Fatima Torres Gallegos [email protected]

… … … … … …
Restricciones

PRIMARY KEY

CREATE TABLE PROFESORES


(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

dni nombre paterno materno email edad

99999999 Fernanda Torres Campos [email protected] 30

88888888 Jose Perez Garcia [email protected] NULL

99999999 Fatima Torres Gallegos [email protected]

… … … … … …
Restricciones

FOREIGN KEY

Una ”Llave Externa(Foreign Key)” es una clave de base de datos que


se utiliza para vincular dos tablas. La restricción FOREIGN KEY
identifica las relaciones entre las tablas de la base de datos haciendo
referencia a una columna, o conjunto de columnas en la
“TABLA HIJA” que contiene la clave externa, a la columna PRIMARY
KEY o conjunto de columnas, en la “TABLA PADRE”.
Restricciones

FOREIGN KEY

De esta manera, la restricción FOREIGN


KEY, en la “TABLA HIJA” que hace
referencia a la PRIMARY KEY en la
Tabla Padre “TABLA PADRE”, impondrá la integridad
referencial de la base de datos.

PRIMARY KEY garantiza que no se


insertarán valores NULL o duplicados

PRIMARY KEY INTEGRIDAD


Tabla Hija
+
FOREIGN KEY DE LA CLAVE
Restricciones

FOREIGN KEY

La restricción FOREIGN KEY se


diferencia de la restricción PRIMARY
KEY en que puede crear solo una
Tabla Padre PRIMARY KEY por cada tabla, con la
capacidad de crear múltiples
restricciones FOREIGN KEY en cada
tabla haciendo referencia a varias
“TABLA PADRE”.

Tabla Hija
Restricciones

FOREIGN KEY
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

CREATE TABLE CURSOS


(
cod_cur SMALLINT PRIMARY KEY ,
dni INT FOREIGN KEY REFERENCES PROFESORES(dni),
nombre VARCHAR(40) NOT NULL
);

ALTER TABLE NOMBRE_TABLA ...


Restricciones

FOREIGN KEY
Las acciones admitidas que se pueden realizar al eliminar o actualizar los valores de la “TABLA
PADRE” incluyen:
Cuando las cláusulas ON UPDATE o ON DELETE se establecen en NO ACTION, la operación de
NO actualización o eliminación realizada en la “TABLA PADRE” fallará con un error.
ACTION Está son las cláusulas por “defecto” si no se establece las cláusulas ON UPDATE o ON DELETE dentro de
las instrucciones.

Al establecer las cláusulas ON UPDATE o ON DELETE en CASCADE, la misma acción realizada en los
valores referenciados de la “TABLA PADRE” se reflejará en los valores relacionados en la “TABLA
CASCADE HIJA”. Por ejemplo, si el valor al que se hace referencia se elimina en la “TABLA PADRE”, también se
eliminan todas las filas relacionadas en la “TABLA HIJA”.

Con esta opción de cláusulas ON UPDATE y ON DELETE, si los valores a los que se hace referencia en la
SET NULL “TABLA PADRE” se eliminan o modifican, todos los valores relacionados en la “TABLA HIJA” se
establecen en valor NULL.

El uso de la opción SET DEFAULT de las cláusulas ON UPDATE y ON DELETE especifica que, si los valores
SET
a los que se hace referencia en la “TABLA PADRE” se actualizan o eliminan, los valores relacionados en la
DEFAULT “TABLA HIJA” con columnas FOREIGN KEY se establecerán en su valor predeterminado.
Restricciones

CHECK Constraint

Un CHECK Constraint se define en una columna o conjunto de


columnas para limitar el rango de valores que se pueden insertar en
estas columnas, utilizando una condición predefinida.

La condición de restricción CHECK utiliza los diferentes operadores de


comparación, como AND, OR, BETWEEN, IN, LIKE e IS NULL para
escribir su expresión booleana que devolverá VERDADERO, FALSO o
DESCONOCIDO.
Restricciones

CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY ,
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

CREATE TABLE CURSOS


(
cod_cur SMALLINT PRIMARY KEY ,
dni INT FOREIGN KEY REFERENCES PROFESORES(dni)
ON UPDATE CASCADE
ON DELETE CASCADE,
nombre VARCHAR(40) NOT NULL
);

dni nombre paterno materno email edad

-9999 FERNANDA TORRES GUILLEN [email protected] 25

… … … … … …
Restricciones

CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

CREATE TABLE CURSOS


(
cod_cur SMALLINT PRIMARY KEY ,
dni INT FOREIGN KEY REFERENCES PROFESORES(dni)
ON UPDATE CASCADE
ON DELETE CASCADE,
nombre VARCHAR(40) NOT NULL
);

dni nombre paterno materno email edad

99998888 FERNANDA TORRES GUILLEN [email protected] 25

… … … … … …
Restricciones

CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

CREATE TABLE CURSOS


(
cod_cur
dni
dni char(8)
SMALLINT PRIMARY KEY ,
INT FOREIGN KEY REFERENCES PROFESORES(dni)
ON UPDATE CASCADE

nombreLongitud(dni) = 8
ON DELETE CASCADE,
VARCHAR(40) NOT NULL
);

dni nombre paterno materno email edad

99998888 FERNANDA TORRES GUILLEN [email protected] 25

… … … … … …
Restricciones

CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT
);

CREATE TABLE CURSOS


(
cod_cur SMALLINT PRIMARY KEY ,
dni INT FOREIGN KEY REFERENCES PROFESORES(dni)
ON UPDATE CASCADE
ON DELETE CASCADE,
nombre VARCHAR(40) NOT NULL
);

dni nombre paterno materno email edad

99998888 FERNANDA TORRES GUILLEN [email protected] 0

… … … … … …
Restricciones

CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT CHECK(edad >= 18 AND edad <= 70)
);

CREATE TABLE CURSOS


(
cod_cur SMALLINT PRIMARY KEY ,
dni INT FOREIGN KEY REFERENCES PROFESORES(dni)
ON UPDATE CASCADE
ON DELETE CASCADE,
nombre VARCHAR(40) NOT NULL
);

dni nombre paterno materno email edad

99998888 FERNANDA TORRES GUILLEN [email protected] 20

… … … … … …
Restricciones

CHECK Constraint
CREATE TABLE PROFESORES
(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT CHECK(edad >= 18 AND edad <= 70)
);

CREATE TABLE CURSOS


(
cod_cur SMALLINT PRIMARY KEY ,
dni INT FOREIGN KEY REFERENCES PROFESORES(dni)
ON UPDATE CASCADE
ON DELETE CASCADE,
nombre VARCHAR(40) NOT NULL
);

dni nombre paterno materno email edad

99998888 FERNANDA TORRES GUILLEN [email protected] 20

88888888 Jose Perez Garcia [email protected] NULL


Restricciones

CHECK Constraint

Campo Restricción
Descuento 0 <= Descuento
AND
decimal(1,2)
Descuento <= 0.25
Restricciones

CHECK Constraint

Campo Restricción
Fecha_Ingreso
Fecha_Salida >
smalldatetime Fecha_Ingreso
Fecha_Salida
smalldatetime
Restricciones

DEFAULT Constraint

Se utiliza un DEFAULT Constraint(restricción DEFAULT) para


proporcionar un valor de columna predeterminado para las filas
insertadas si no se especifica ningún valor para esa columna en la
instrucción INSERT.

La restricción Predeterminada ayuda a mantener la integridad del


dominio al proporcionar valores adecuados para la columna, en caso
de que el usuario no proporcione un valor para ella. El valor
predeterminado puede ser un valor constante, un valor de función
del sistema o NULL.
Restricciones

DEFAULT Constraint

CREATE TABLE PROFESORES


(
dni INT PRIMARY KEY
CHECK(dni >= 10000000 AND dni <= 99999999),
nombre VARCHAR(40) NOT NULL,
paterno VARCHAR(20) NOT NULL,
materno VARCHAR(20) NOT NULL,
email VARCHAR(40) UNIQUE NOT NULL,
edad TINYINT CHECK(edad >= 18 AND edad <= 70),
ingreso SMALLDATETIME DEFAULT GETDATE(),
salida SMALLDATETIME DEFAULT NULL
);

dni nombre paterno materno email edad ingreso salida

99998888 FERNANDA TORRES GUILLEN [email protected] 25 2024-01-14 11:57:00 NULL

88888888 Jose Perez Garcia [email protected] NULL 2024-01-14 12:57:00 2024-01-14 18:00:00
Restricciones

DEFAULT Constraint

Campo Restricción
orderDate GETDATE()

city ‘LIMA’

descuento 0.15
Restricciones

Estas son las restricciones para garantizar la


integridad de los datos y definir las relaciones entre
tablas. La aplicación adecuada de restricciones es
esencial para mantener la consistencia y calidad de
los datos en una base de datos.
Validación de Base de Datos
Validación de Base de Datos

La validación de una base de datos en SQL Server se


refiere a la verificación de la existencia, integridad y
consistencia de la base de datos y sus objetos (como
tablas, índices, vistas, procedimientos almacenados, etc.)
Validación de Base de Datos

Utilizar la Función de Metadato llamado “DB_ID”, la cual nos va devolver el número de


identificación de base de datos (ID) de una base de datos especificada.

DB_ID( 'databaseName' ) ID de la Base de Datos

DB_ID( ) ID de la Base de Datos que estamos usando

Consultar la Vista del sistema llamado “DBO.SYSDATABASES” la cual contiene


información de todas las bases de datos de SQL Server.

SELECT * FROM DBO.SYSDATABASES


Validación de Base de Datos

Utilizar la Función de Metadato llamado “DB_ID”, la cual nos va devolver el número de


identificación de base de datos (ID) de una base de datos especificada.

DB_ID( 'databaseName' ) ID de la Base de Datos

DB_ID( ) ID de la Base de Datos que estamos usando

Consultar la Vista del sistema llamado “DBO.SYSDATABASES” la cual contiene


información de todas las bases de datos de SQL Server.

USE MASTER
GO

SELECT * FROM DBO.SYSDATABASES


Validación de Base de Datos

Utilizar la Función de Metadato llamado “DB_ID”, la cual nos va devolver el número de


identificación de base de datos (ID) de una base de datos especificada.

DB_ID( 'databaseName' ) ID de la Base de Datos

DB_ID( ) ID de la Base de Datos que estamos usando

Consultar la Vista del sistema llamado “DBO.SYSDATABASES” la cual contiene


información de todas las bases de datos de SQL Server.

SELECT * FROM Master. DBO.SYSDATABASES


Validación de Base de Datos
IF DB_ID('databaseName') IS NOT NULL IF EXISTS( SELECT DB_ID( 'databaseName' ) )
BEGIN BEGIN
DROP DATABASE databaseName DROP DATABASE databaseName
END END

IF (SELECT name FROM master.dbo.sysdatabases WHERE name = 'databaseName') IS NOT NULL


BEGIN
DROP DATABASE DEMO;
END

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = 'databaseName')


BEGIN
DROP DATABASE DEMO;
END

DROP DATABASE IF EXISTS databaseName


Validación de Tabla
Validación de Tabla

La validación de tablas en SQL Server implica comprobar que las tablas exista.

utilizando la Función de Metadato llamado “OBJECT_ID”, la cual nos va devolver el número de


identificación del objeto de base de datos de un objeto con alcance de esquema.

SELECT OBJECT_ID('object_type')

La segunda forma es consultar la Vista del sistema llamado “sys.tables” la cual contiene información
de todas las tablas de la Base de Datos en donde estamos ubicados .

SELECT * FROM sys.tables


Validación de Tabla

IF OBJECT_ID('tableName') IS NOT NULL IF EXISTS( SELECT OBJECT_ID('tableName') )


BEGIN BEGIN
DROP TABLE tableName DROP TABLE tableName
END END

IF (SELECT name from sys.tables WHERE name = 'tableName') IS NOT NULL


BEGIN
DROP TABLE tableName
END

IF EXISTS (SELECT name from sys.tables WHERE name = 'tableName')


BEGIN
DROP TABLE tableName
END

DROP TABLE IF EXISTS tableName


Descripción de la Sección

¿Qué es un Procedimiento Almacenado?

Opciones SET ANSI_NULLS, SET QUOTED_IDENTIFIER,


SET NOCOUNT

Implementar un Procedimiento Almacenado

¿Qué es un Procedimiento Almacenado dinámico?

Implementar un Procedimiento Almacenado Dinámico

Parámetro OutPut en un Procedimiento Almacenado

Manejo de Errores con Procedimiento Almacenado

Procedimiento Almacenado VS Funciones


¿Qué es un Procedimiento
Almacenado(Stored Procedure)?
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

Un Procedimiento Almacenado (Stored Procedure) es un


conjunto de instrucciones SQL predefinidas que se almacenan en
la base de datos y se pueden ejecutar cuando sea necesario. Los
procedimientos almacenados permiten encapsular lógica de
negocio compleja en una única unidad que puede ser reutilizada,
mejorando la eficiencia, seguridad y mantenibilidad del código.
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

❖ Consultando Datos con Procedimiento Almacenado(Stored Procedure)

❖ Pasar Parámetros al Procedimiento Almacenado(Stored Procedure)

❖ Crear un Procedimiento Almacenado(Stored Procedure) Simple

❖ Trabajar con Procedimiento Almacenado(Stored Procedure) Dinámicos

❖ Ejecutar Procedimiento Almacenado(Stored Procedure)

❖ Examinar un Procedimiento Almacenado(Stored Procedure)

❖ Modificar un Procedimiento Almacenado(Stored Procedure)


¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

Características :

Reusabilidad Encapsulación Rendimiento

Manejo de
Seguridad Transacciones
parámetros
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

Tipo Objeto
Crear Objeto Nombre Objeto

CREATE PROCEDURE[PROC] Nombre


(
@<ParameterName1> <data type> = <Default_Value>,
@<ParameterName2> <data type> = <Default_Value> Parámetro
...
)
Inicio AS

BEGIN
Bloque de
Ejecución Instrucción SQL;
END
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

ALTER PROCEDURE[PROC] Nombre


(
@<ParameterName1> <data type> = <Default_Value>,
@<ParameterName2> <data type> = <Default_Value>
...
)
AS

BEGIN

Instrucción SQL;
END
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

CREAOTE OR ALTER PROCEDURE[PROC] Nombre


(
@<ParameterName1> <data type> = <Default_Value>,
@<ParameterName2> <data type> = <Default_Value>
...
)
AS

BEGIN

Instrucción SQL;
END
¿Qué es un Procedimiento
Almacenado(Stored Procedure)?

Ejecutar un Procedimiento Almacenado

EXECUTE Nombre
GO

EXEC Nombre
GO
¿Qué es un Procedimiento
Almacenado dinámico?
¿Qué es un Procedimiento Almacenado
dinámico?

Un Procedimiento Almacenado dinámico es un


procedimiento almacenado que utiliza SQL dinámico dentro
de su código. El SQL dinámico implica construir y ejecutar
sentencias SQL en tiempo de ejecución en lugar de
predefinirlas de manera estática.
¿Qué es un Procedimiento Almacenado
dinámico?

¿Cómo funciona?

Construcción de la sentencia SQL: La sentencia SQL se construye como una


cadena de texto basada en parámetros o condiciones que se reciben en el
procedimiento almacenado. Esta cadena puede variar en función de los
valores de los parámetros, lo que hace que la consulta sea "dinámica".

Ejecución de la sentencia SQL: Una vez construida la cadena con la


consulta SQL, se utiliza la función EXEC o sp_executesql para ejecutar la
consulta.
¿Qué es un Procedimiento Almacenado
dinámico?

Características y Consideraciones:

➢ Flexibilidad

➢ Seguridad

➢ Rendimiento
¿Qué es un Procedimiento Almacenado
dinámico?

Este enfoque es útil cuando necesitas construir


consultas donde las columnas o las tablas involucradas
pueden cambiar en tiempo de ejecución o cuando hay
muchas combinaciones posibles de condiciones.
Procedimiento Almacenado VS
Funciones
Procedimiento Almacenado VS Funciones

Tanto los procedimientos almacenados como las funciones en SQL Server son bloques de código
reutilizables que encapsulan lógica y pueden ejecutar operaciones en la base de datos.

Procedimiento Almacenado Función

• Propósito y Uso • Propósito y Uso


Generalmente se utiliza para realizar una secuencia Se utiliza para realizar cálculos o manipulación de
de operaciones en la base de datos, como insertar, datos que devuelve un valor. Las funciones son
actualizar o eliminar registros. comúnmente usadas para retornar un valor escalar
o una tabla derivada.

Puede realizar tareas más complejas, como trabajar Se puede utilizar en consultas SQL dentro de una
con transacciones, llamar a otros procedimientos cláusula SELECT, WHERE, FROM, etc.
almacenados, manejar errores, etc.

Se ejecuta con la sentencia EXEC o EXECUTE. Se invoca como parte de una expresión o consulta.
Procedimiento Almacenado VS Funciones

Tanto los procedimientos almacenados como las funciones en SQL Server son bloques de código
reutilizables que encapsulan lógica y pueden ejecutar operaciones en la base de datos.

Procedimiento Almacenado Función

• Valor de Retorno • Valor de Retorno


Valor de RetornoNo está obligado a devolver un Siempre devuelve un valor. Las funciones escalares
valor. Puede devolver un valor utilizando devuelven un solo valor (como un número, cadena,
parámetros OUTPUT o mediante un código de fecha), mientras que las funciones con valores de
estado con RETURN, pero este valor es limitado y tabla devuelven un conjunto de resultados (tabla).
no puede ser utilizado directamente en una
consulta SQL.

• Parámetros • Parámetros
Puede aceptar parámetros de entrada y salida. Los Solo acepta parámetros de entrada. No puede tener
parámetros de salida (OUTPUT) permiten que el parámetros de salida (OUTPUT).
procedimiento devuelva valores.
Procedimiento Almacenado VS Funciones

Tanto los procedimientos almacenados como las funciones en SQL Server son bloques de código
reutilizables que encapsulan lógica y pueden ejecutar operaciones en la base de datos.

Procedimiento Almacenado Función

• Manejo de Errores • Manejo de Errores


Puede manejar errores mediante bloques No puede manejar transacciones ni manejar errores
TRY...CATCH, realizar transacciones (BEGIN de la misma manera que un procedimiento
TRANSACTION, COMMIT, ROLLBACK) y llamar a almacenado. No se puede usar TRY...CATCH dentro
otros procedimientos o funciones. de una función.

• Efectos Secundarios • Efectos Secundarios


Puede realizar operaciones de modificación de No puede realizar operaciones de modificación de
datos (INSERT, UPDATE, DELETE), cambiar el estado datos que afecten tablas o realizar operaciones que
de la base de datos y tener efectos secundarios. cambien el estado de la base de datos.

• Permisos • Permisos
Los permisos para ejecutar un procedimiento Las funciones pueden tener restricciones más
almacenado son más amplios y flexibles. estrictas dependiendo de su uso.
Descripción de la Sección

¿Qué es una Vista(View)?

Crear una Vista(View) con T-SQL

Crear una Vista(View) con Entorno Gráfico


¿Qué es una Vista(View)?
¿Qué es una Vista(View)?

Una vista en SQL Server es un objeto de base de datos que actúa como una tabla virtual que
contiene datos de una o varias tablas. No contiene ningún dato y no existe físicamente en la
base de datos. De manera similar a una tabla SQL, el nombre de la vista debe ser único en
una base de datos.

Una VISTA no requiere almacenamiento en una base de datos porque no existe físicamente.
En una VISTA, también podemos controlar la seguridad del usuario para acceder a los datos
de las tablas de la base de datos. Podemos permitir que los usuarios obtengan los datos de la
VISTA, y el usuario no necesita permiso para cada tabla o columna para obtener datos.

La Vista se define a partir de una consulta SELECT que puede extraer datos de una o más
tablas u otras vistas. Aunque una vista no almacena datos por sí misma, proporciona una
manera conveniente de encapsular y simplificar consultas complejas, permitiendo que los
usuarios accedan a datos filtrados o combinados de una manera más sencilla.
¿Qué es una Vista(View)?

Características :

Definición

No Almacena Datos

Uso de SELECT
¿Qué es una Vista(View)?

Ventajas :

implicidad

Seguridad

Reutilización

Abstracción
¿Qué es una Vista(View)?

En resumen, una vista es una poderosa herramienta


en SQL Server que permite simplificar el acceso a
datos y crear abstracciones sobre la base de datos.
¿Qué es una Vista(View)?

Tipo Objeto
Crear Objeto Nombre Objeto

CREATE VIEW Nombre


Inicio AS
Instrucción SQL;
¿Qué es una Vista(View)?

ALTER VIEW Nombre

AS
Instrucción SQL;
¿Qué es una Vista(View)?

CREAOTE OR ALTER Nombre

AS
Instrucción SQL;
¿Qué es una Vista(View)?

Ejecutar una Vista

SELECT * FROM Nombre


GO

SELECT Col1, Col2, ... , ColN FROM Nombre


GO
Descripción de la Sección

Definición sobre la Sentencia Merge

Sentencia Merge de Inserción

Sentencia Merge de Actualización

Sentencia Merge de Eliminación


Sentencia Merge
Sentencia Merge

La sentencia MERGE en SQL es una cláusula muy popular que puede


manejar inserciones, actualizaciones y eliminaciones en una sola
transacción sin tener que escribir lógica separada para cada una de ellas.
Puede especificar las condiciones en las que espera que la sentencia
MERGE inserte, actualice o elimine.

El uso de la sentencia MERGE en SQL le brinda mayor flexibilidad para


personalizar sus scripts SQL complejos y también mejora la legibilidad de
los mismos. La sentencia MERGE básicamente modifica una tabla existente
en función del resultado de la comparación entre los campos clave con
otra tabla en el contexto.
Sentencia Merge

No No
Filas
Coincide Coincide
Coincid
con el entes con el
Origen Destino

La sentencia MERGE en realidad combina las operaciones INSERT, UPDATE y DELETE en conjunto.
Sentencia Merge

MERGE TargetTable AS TTable

USING SourceTable AS STable

ON TTable.columnKey = STable.columnKey
No No
Coincide Filas Coincide
con el Coincid con el
[ WHEN MATCHED THEN ] entes
Origen Destino
Statement Update Sql;

[ WHEN NOT MATCHED BY TARGET THEN ]


Statement Insert Sql;

[ WHEN NOT MATCHED BY SOURCE THEN ]


Statement Delete Sql;
Descripción de la Sección

¿Qué es CTE(Common Table Expression)?

CTE(Common Table Expression) Simple

CTE(Common Table Expression)


Múltiple en una Consulta

CTE(Common Table Expression) Anidados


¿Qué es CTE(Common Table
Expression)?
¿Qué es CTE(Common Table Expression)?

Una CTE(Common Table Expression), en español expresiones de tabla comunes son un


conjunto de resultados temporales que se devuelven mediante una única declaración para su
posterior uso dentro de la misma declaración. Como se trata de un resultado temporal, no se
almacena en ningún lugar y no consume espacio en disco. Sin embargo, se puede hacer
referencia a él de la misma manera que a cualquier tabla.

O bien, podemos considerar una CTE como una especie de tabla virtual que contiene columnas
con registros físicos. Esta tabla virtual se crea como resultado de la ejecución de la consulta, es
utilizada por otra consulta y se elimina después de la ejecución de la consulta principal.

Desde la introducción desde la versión de SQL Server 2005, las CTE se han convertido en un
método popular para los especialistas en bases de datos que las aplican para hacer que las
consultas complejas sean más fáciles de leer y mantener.
¿Qué es CTE(Common Table Expression)?

Características:

Definición Temporal

Facilita la Legibilidad

Uso Recursivo
¿Qué es CTE(Common Table Expression)?

Sintaxis:
Comienza con
Nombre CTE Opcional
la instrucción

WITH expression_name [ ( ColName1, ColName2, ..., ColNameN ) ]


Inicio del
bloque CTE
AS
( CTE_query_definition )
Definir CTE

Consultar SELECT * FROM expression_name;

CTE SELECT [Column1,Column2,Column3 …..] FROM expression_name;


¿Qué es CTE(Common Table Expression)?

Sintaxis:
Creación CTE

WITH expression_name [ ( ColName1, ColName2, ..., ColNameN ) ]


AS
( CTE_query_definition )

SELECT * FROM expression_name;

SELECT [Column1,Column2,Column3 …..] FROM expression_name;

Consulta CTE
CTE Anidados
CTE Anidados

Al igual que las subconsultas, las CTE también se pueden anidar o, en palabras sencillas,
podemos usar una definición de CTE dentro de otra definición de CTE.

Sintaxis:
WITH expression_1 [ ( ColName1, ColName2, ..., ColNameN ) ]
AS (
CTE_query_definition_1
)
expression_2 [ ( ColName1, ColName2, ..., ColNameN ) ]
AS(
En la cláusula FROM se
CTE_query_definition_2
refiere a cte_expression_1
)

SELECT * FROM expression_name;

SELECT [Column1,Column2,Column3 …..] FROM expression_name;


Descripción de la Sección

Definición de los Operadores PIVOT y UNPIVOT

Implementar el Operador PIVOT

Implementar el Operador UNPIVOT


Operadores PIVOT y UNPIVOT
Operadores PIVOT y UNPIVOT

Hay varias formas de transponer e intercambiar un conjunto de datos ya sea de filas a


columnas y de columnas a filas.

Podemos observar que el operador PIVOT es una de las técnicas que permite el
intercambio y la transposición de filas a columnas y realiza posibles agregaciones en el
camino. PIVOT y UNPIVOT son los operadores relacionales para transponer una serie de
datos bidimensionales con valores de tabla en otra forma de datos.

El operador PIVOT transpone una expresión con valores de tabla de un conjunto único
de valores de una columna a varias columnas en la salida y realiza agregaciones.

Además, el operador UNPIVOT realiza la operación opuesta que el operador PIVOT


transformando una serie de columnas de una expresión con valores de tabla en valores
de columna.
Operadores PIVOT y UNPIVOT

Podemos utilizar el operador PIVOT para rotar filas en una tabla convirtiendo los valores
de fila en varias columnas. El siguiente diagrama ilustra lo que puede hacer PIVOT,
donde tomamos 4 filas de datos y las convertimos en 1 fila con 4 columnas. Como
puede ver, el proceso PIVOT convierte filas en columnas al pivotar la tabla.

UNPIVOT

SalesYear TotalSales
2011 151706131.5475
2011 2012 2013 2014
2012 862786335.1754
151706131.5475 862786335.1754 1190722789.0552 391255200.8993
2013 1190722789.0552
2014 391255200.8993

PIVOT
Operadores PIVOT y UNPIVOT

Sintaxis: Sintaxis:
SELECT [ <non-pivoted column> [ AS <column name> ] , ] SELECT [ <non-pivoted column> [ AS <column name> ] , ]
... ...
[ <first pivoted column> [ AS <column name> ] , [ <output column for names of the pivot columns>
[ <second pivoted column> [ AS <column name> ] , ] [ AS <column name> ] , ]
... [ <new output column created for values
[ <last pivoted column> [ AS <column name> ] ] ] in result of the source query> [ AS <column name> ] ]
FROM FROM
( <SELECT query that produces the data> ) ( <SELECT query that produces the data> )
AS <alias> AS <alias>
PIVOT UNPIVOT
( (
<aggregation function> ( <column being aggregated> ) <new output column created for values
FOR <column that contains the values in result of the source query>
that become column headers> FOR <output column for names of the pivot columns>
IN ( <first pivoted column> IN ( <first pivoted column>
, <second pivoted column> , <second pivoted column>
, ... <last pivoted column> ) , ... <last pivoted column> )
) AS <alias for the pivot table> )
[ <optional ORDER BY clause> ] [ <optional ORDER BY clause> ]
[;] [;]

CTE(Common Table Expression)


Operadores PIVOT y UNPIVOT

¿Qué problema de codificación resuelve PIVOT y UNPIVOT?

Tanto el operador PIVOT como el operador UNPIVOT se utilizan


normalmente para fines de generación de informes cuando el usuario
requiere la información en un formato diferente.

Por ejemplo, imaginemos una tabla con datos como éstos:


Operadores PIVOT y UNPIVOT

¿Qué problema de codificación resuelve PIVOT y UNPIVOT?

Tanto el operador PIVOT como el operador UNPIVOT se utilizan


normalmente para fines de generación de informes cuando el usuario
requiere la información en un formato diferente.

Por ejemplo, imaginemos una tabla con datos como éstos:


Operadores PIVOT y UNPIVOT

¿Por qué intercambiar filas por columnas y viceversa?

La mayoría de los casos en los que se cambian filas por columnas es para
entregar un informe con un formato específico. El analista de datos o
alguien de la empresa requiere la información de una manera diferente a
la estructura de la tabla. Si se trata de un requisito único, una consulta
puede resultar de ayuda. De lo contrario, se podría utilizar una vista.

Es importante mencionar que la técnica PIVOT es suficiente para los


requisitos comerciales. Por ejemplo, el pronóstico de ventas mensuales, la
división de ventas anuales, la agregación de ventas trimestrales, etc.
Operadores PIVOT y UNPIVOT

¿Qué implicaciones tienen en el rendimiento PIVOT y UNPIVOT?

Los operadores PIVOT y UNPIVOT son lentos y consumen muchos recursos.


Si las tablas no son muy grandes, no tendrás problemas para utilizarlos.
Descripción de la Sección

Objetivo de la Sección

¿Qué es un Trigger?

Trigger DDL - ALL SERVER

Trigger DDL - DATABASE

Trigger DML - FOR | AFTER

Trigger DML - INSTEAD OF

Implementación de la Base de Datos


Objetivo de la Sección
Objetivo de la Sección
¿Qué es un Trigger?
¿Qué es un Trigger?

Un trigger es un Objeto de Base de Datos que se ejecuta


automáticamente cuando se produce un evento específico en
una tabla o vista. Los triggers se utilizan comúnmente para
implementar lógica empresarial adicional, como validar datos
antes de insertarlos o actualizarlos, mantener la integridad
referencial o realizar auditorías de cambios en los datos.

Triggers DDL

Triggers DML

LOGON Triggers
Triggers(Disparadores)

Una vez que se activan, los triggers pueden realizar una variedad
de funciones, como la modificación de datos en la misma tabla o
en otras tablas, la aplicación de restricciones y reglas de negocio, y
muchas más tareas relacionadas con la gestión de datos.
Triggers(Disparadores)

Importancia y Aplicaciones de los Triggers

Automatización de Tareas

Integridad de Datos

Auditoría y Registro

Acción en Cascada
Triggers(Disparadores)

Trigger DDL

Se ejecutan en respuesta a una variedad de eventos de Lenguaje


de Definición de Datos (DDL). Estos eventos corresponden
principalmente a instrucciones CREATE, ALTER y DROP de
Transact-SQL, y a determinados procedimientos almacenados del
sistema que ejecutan operaciones de tipo DDL.
Triggers(Disparadores)

Instrucción
Instrucción DDL Tipo de Objeto Nombre
Alter
Trigger DDL

CREATE [ OR ALTER ] TRIGGER trigger_name


ON { ALL SERVER | DATABASE } Objeto Referenciado

El alcance del Trigger DDL será El alcance del Trigger DDL será
el servidor actual. la Base de Datos Actual.
Triggers(Disparadores)

Trigger DDL

CREATE [ OR ALTER ] TRIGGER trigger_name


ON { ALL SERVER | DATABASE }
FOR | AFTER { event_type }
Momento de Ejecución
AS
[ BEGIN ]
Bloque de
ejecución
Instrucción SQL;

[ END ];
Triggers(Disparadores)

Trigger DDL

CREATE [ OR ALTER ] TRIGGER trigger_name


ON { ALL SERVER | DATABASE }
Servidor Base de Datos
Actual Actual

DROP TRIGGER trigger_name DROP TRIGGER trigger_name


ON ALL SERVER; ON DATABASE;
Triggers(Disparadores)

Trigger DML

Se ejecutan automáticamente cuando tiene lugar un evento de


lenguaje de manipulación de datos (DML) que afecta a la tabla o
la vista definida en el Trigger. Los Triggers DML incluyen las
instrucciones INSERT, UPDATE o DELETE. Los Triggers DML
pueden usarse para aplicar reglas de negocios y la integridad de
datos, consultar otras tablas e incluir instrucciones Transact-SQL
complejas.
Triggers(Disparadores)

Instrucción DDL Instrucción Alter Tipo de Objeto Nombre


Trigger DML
CREATE [ OR ALTER ] TRIGGER trigger_name
ON table | view Objeto Referenciado

FOR | AFTER | INSTEAD OF


Después En lugar Momento de Ejecución
de la Acción de la Acción
Triggers(Disparadores)

Trigger DML
CREATE [ OR ALTER ] TRIGGER trigger_name
ON table | view
FOR | AFTER | INSTEAD OF
[ INSERT , UPDATE , DELETE ] Acción de Disparo

AS
[ BEGIN ]
Bloque de ejecución
Instrucción SQL;

[ END ];
Triggers(Disparadores)

Trigger DML
CREATE [ OR ALTER ] TRIGGER trigger_name
ON table | view
FOR | AFTER | INSTEAD OF
Después En lugar
de la Acción de la Acción

DROP TRIGGER trigger_name;


Triggers(Disparadores)

Trigger DML
CREATE TRIGGER nombre_trigger
En esta Tabla ON tabla
FOR INSERT
Se dispara después de AS
insertar algún registro
BEGIN Ejecuta la siguiente
instrucción
Instrucción SQL;
Después de validar:
• Tipos de Datos END;
• Restricciones
• Foreign Key
• Funciones
Triggers(Disparadores)

Trigger DML
CREATE TRIGGER nombre_trigger
En esta Tabla ON tabla
FOR UPDATE, DELETE
AS
BEGIN Diferentes Acciones

Instrucción SQL;

END;
Triggers(Disparadores)

Múltiples Triggers para una misma Tabla


Trigger DML

CREATE TRIGGER tgr_insert_producto_1 CREATE TRIGGER tgr_insert_producto_1


ON tabla_product ON tabla_product
AFTER INSERT AFTER INSERT
AS AS
BEGIN BEGIN

Instrucción SQL; Instrucción SQL;

END; END;
Triggers(Disparadores)

CREATE TRIGGER tgr_insert_clientes


ON CLIENTES
FOR INSERT
AS
BEGIN

Inserted
CLIENTES
Perduran
id nombre paterno materno edad durante la ejecución
101 Isabel Campos Torres 19

102 Marco Gallegos Ochoa 35 Deleted


103 Julia Gamboa Gallegos 58

... ... ... ... ...

END;
Triggers(Disparadores)

CREATE TRIGGER tgr_insert_clientes


ON CLIENTES
FOR INSERT
AS
BEGIN

Inserted
CLIENTES id nombre paterno materno edad

id nombre paterno materno edad 104 Oscar Mesías Guillén 25

101 Isabel Campos Torres 19

102 Marco Gallegos Ochoa 35 Deleted


103 Julia Gamboa Gallegos 58
id nombre paterno materno edad
... ... ... ... ...

END;
Triggers(Disparadores)

CREATE TRIGGER tgr_insert_clientes


ON CLIENTES
FOR DELETE
AS
BEGIN

Inserted
CLIENTES id nombre paterno materno edad

id nombre paterno materno edad

101 Isabel Campos Torres 19

102 Marco Gallegos Ochoa 35 Deleted


103 Julia Gamboa Gallegos 58
id nombre paterno materno edad
... ... ... ... ...
101 Isabel Campos Torres 19

END;
Triggers(Disparadores)

CREATE TRIGGER tgr_insert_clientes


ON CLIENTES
FOR UPDATE
AS
BEGIN

Inserted
CLIENTES id nombre paterno materno edad

id nombre paterno materno edad 101 Karen Campos Torres 19

101 Isabel Campos Torres 19

102 Marco Gallegos Ochoa 35 Deleted


103 Julia Gamboa Gallegos 58
id nombre paterno materno edad
... ... ... ... ...
101 Isabel Campos Torres 19

END;
Trigger DDL - ALL SERVER
Trigger DDL - ALL SERVER

CREATE [ OR ALTER ] TRIGGER nombre_trigger

ON { ALL SERVER | DATABASE }


Servidor Base de Datos
Actual Actual

FOR | AFTER { event_type }


AS
[ BEGIN ]

Instrucción SQL;

[ END ];
Trigger DDL - ALL SERVER

CREATE [ OR ALTER ] TRIGGER nombre_trigger

ON ALL SERVER

FOR | AFTER { event_type }


• CREATE_DATABASE
AS • ALTER_DATABASE
• CREATE_TABLE
[ BEGIN ] • ALTER_TABLE
• DROP_TABLE
Instrucción SQL; • RENAME
• CREATE_SCHEMA
• CREATE_VIEW
[ END ]; • ALTER_VIEW
• DROP_VIEW
• Etc
Trigger DDL - DATABASE
Trigger DDL - DATABASE

CREATE [ OR ALTER ] TRIGGER nombre_trigger

ON { ALL SERVER | DATABASE }


Servidor Base de Datos
Actual Actual

FOR | AFTER { event_type }


AS
[ BEGIN ]

Instrucción SQL;

[ END ];
Trigger DDL - DATABASE

CREATE [ OR ALTER ] TRIGGER nombre_trigger

ON DATABASE

FOR | AFTER { event_type }


• CREATE_DATABASE
AS • ALTER_DATABASE
• CREATE_TABLE
[ BEGIN ] • ALTER_TABLE
• DROP_TABLE
Instrucción SQL; • RENAME
• CREATE_SCHEMA
• CREATE_VIEW
[ END ]; • ALTER_VIEW
• DROP_VIEW
• Etc
Trigger DML - FOR | AFTER
Trigger DML - FOR | AFTER

CREATE TRIGGER nombre_trigger


ON tabla | vista
1 solo Trigger por FOR | AFTER | INSTEAD OF
cada tipo de acción
Después En lugar
de la Acción de la Acción

[ INSERT , UPDATE , DELETE ]


AS
BEGIN

Instrucción SQL;

END;
Trigger DML - FOR | AFTER

Automatización de Tareas
Trigger DML - FOR | AFTER

PRODUCTOS
id_producto nombre stock

101 Monitor LG 27 pulgadas 50

102 Mouse Logitech G502 100

103 SSD Kingston 960GB 50

... ... ...

DETALLE_FACTURA
codigo id_producto precio cantidad
Trigger DML - FOR | AFTER

PRODUCTOS
id_producto nombre stock

101 Monitor LG 27 pulgadas 50

102 Mouse Logitech G502 100 -10


103 SSD Kingston 960GB 50

... ... ...

DETALLE_FACTURA
codigo id_producto precio cantidad

F101 102 499.90 10


Trigger DML - FOR | AFTER

PRODUCTOS
id_producto nombre stock

101 Monitor LG 27 pulgadas 50

102 Mouse Logitech G502 90

103 SSD Kingston 960GB 50

... ... ...

DETALLE_FACTURA
codigo id_producto precio cantidad

F101 102 499.90 10

Triggers
Trigger DML - FOR | AFTER

PRODUCTOS
id_producto nombre stock

101 Monitor LG 27 pulgadas 50

102 Mouse Logitech G502 90

103 SSD Kingston 960GB 30

... ... ...

DETALLE_FACTURA
codigo id_producto precio cantidad

F101 102 499.90 10

F101 103 99.90 20

Insert
Triggers Delete
Update
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
ON DETALLE_FACTURA
AFTER INSERT
AS
BEGIN

END;
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;

END;
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
codigo id_producto precio cantidad
FROM (
F101 102 99.90 10
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
id_producto total_cantidad
FROM (
102 10
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
id_producto total_cantidad
FROM (
102 10
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
102 20
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
id_producto total_cantidad
FROM (
102 30
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 100
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
id_producto total_cantidad
FROM (
102 30
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Insert
CREATE TRIGGER tgr_stock_insert
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER INSERT
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock - total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Inserted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Deleted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Deleted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Deleted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
F102 102 99.90 20
Trigger DML - FOR | AFTER

Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
id_producto total_cantidad
FROM (
102 20
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Deleted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
Trigger DML - FOR | AFTER

Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 70
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
id_producto total_cantidad
FROM (
102 20
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Deleted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
Trigger DML - FOR | AFTER

Delete
CREATE TRIGGER tgr_stock_delete
PRODUCTOS
ON DETALLE_FACTURA
id_producto nombre stock
AFTER DELETE
101 Monitor LG 27 pulgadas 50
AS
102 Mouse Logitech G502 90
BEGIN
103 SSD Kingston 960GB 50

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM Deleted
GROUP BY id_producto
DETALLE_FACTURA )T
codigo id_producto precio cantidad WHERE id_producto = T.id;
F101 102 99.90 10
END;
Trigger DML - FOR | AFTER

Update

stock = stock - stock_Insertado + stock_Eliminado


Trigger DML - FOR | AFTER

Update

stock = stock - stock_Inserted + stock_Deleted

SELECT id_producto AS id, SUM(cantidad) AS total_cantidad


FROM Inserted
GROUP BY id_producto

SELECT id_producto AS id, SUM(cantidad) AS total_cantidad


FROM Deleted
GROUP BY id_producto
Trigger DML - FOR | AFTER

Update

SELECT id_producto AS id, SUM(cantidad) AS total_cantidad


FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
Trigger DML - FOR | AFTER

Update

SELECT id_producto AS id, SUM(cantidad) AS total_cantidad


FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
Trigger DML - FOR | AFTER

Update

SELECT id_producto AS id, SUM(cantidad) AS total_cantidad


FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
Trigger DML - FOR | AFTER

Update

stock = stock + total_cantidad

SELECT id_producto AS id, SUM(cantidad) AS total_cantidad


FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
Trigger DML - FOR | AFTER

Update
CREATE TRIGGER tgr_stock_update
ON DETALLE_FACTURA
AFTER UPDATE
AS
BEGIN

UPDATE PRODUCTOS
SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
)A
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
PRODUCTOS CREATE TRIGGER tgr_stock_update

id_producto nombre stock ON DETALLE_FACTURA

101 Monitor LG 27 pulgadas 50 AFTER UPDATE

102 Mouse Logitech G502 90 AS

103 SSD Kingston 960GB 50


BEGIN

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted

DETALLE_FACTURA )T

codigo id_producto precio cantidad


GROUP BY id_producto
)A
F101 102 99.90 10
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
PRODUCTOS CREATE TRIGGER tgr_stock_update

id_producto nombre stock ON DETALLE_FACTURA

101 Monitor LG 27 pulgadas 50 AFTER UPDATE

102 Mouse Logitech G502 90 AS

103 SSD Kingston 960GB 50


BEGIN

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
id_producto cantidad FROM (
102 20 SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
id_producto cantidad SELECT id_producto, -cantidad AS cantidad FROM Inserted
102 10 UNION ALL
SELECT id_producto, cantidad FROM Deleted

DETALLE_FACTURA )T

codigo id_producto precio cantidad


GROUP BY id_producto
)A
F101 102 99.90 20
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
PRODUCTOS CREATE TRIGGER tgr_stock_update

id_producto nombre stock ON DETALLE_FACTURA

101 Monitor LG 27 pulgadas 50 AFTER UPDATE

102 Mouse Logitech G502 90 AS

103 SSD Kingston 960GB 50


BEGIN

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
id_producto cantidad FROM (
102 20 SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
-20 + 10 FROM(
id_producto cantidad SELECT id_producto, -cantidad AS cantidad FROM Inserted
102 10 UNION ALL
SELECT id_producto, cantidad FROM Deleted

DETALLE_FACTURA )T

codigo id_producto precio cantidad


GROUP BY id_producto
)A
F101 102 99.90 20
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
PRODUCTOS CREATE TRIGGER tgr_stock_update

id_producto nombre stock ON DETALLE_FACTURA

101 Monitor LG 27 pulgadas 50 AFTER UPDATE

102 Mouse Logitech G502 90 AS

103 SSD Kingston 960GB 50


BEGIN

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
id_producto Total_cantidad
FROM(
102 -10
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted

DETALLE_FACTURA )T

codigo id_producto precio cantidad


GROUP BY id_producto
)A
F101 102 99.90 20
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
PRODUCTOS CREATE TRIGGER tgr_stock_update

id_producto nombre stock ON DETALLE_FACTURA

101 Monitor LG 27 pulgadas 50 AFTER UPDATE

102 Mouse Logitech G502 90 AS

103 SSD Kingston 960GB 50


BEGIN

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
id_producto Total_cantidad
FROM(
102 -10
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted

DETALLE_FACTURA )T

codigo id_producto precio cantidad


GROUP BY id_producto
)A
F101 102 99.90 20
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
PRODUCTOS CREATE TRIGGER tgr_stock_update

id_producto nombre stock ON DETALLE_FACTURA

101 Monitor LG 27 pulgadas 50 AFTER UPDATE

102 Mouse Logitech G502 80 AS

103 SSD Kingston 960GB 50


BEGIN

... ... ... UPDATE PRODUCTOS


SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted

DETALLE_FACTURA )T

codigo id_producto precio cantidad


GROUP BY id_producto
)A
F101 102 99.90 20
WHERE id_producto = A.id;

END;
Trigger DML - FOR | AFTER

Update
CREATE TRIGGER tgr_stock_update
ON DETALLE_FACTURA
AFTER UPDATE
AS
BEGIN

UPDATE PRODUCTOS
SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
Inserción
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL Deleted = Vacía
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
Eliminación
)A
WHERE id_producto = A.id; Inserted = Vacía

END;
Trigger DML - FOR | AFTER

Update
CREATE TRIGGER tgr_stock_modificados
ON DETALLE_FACTURA
AFTER UPDATE, INSERT, DELETE
AS
BEGIN

UPDATE PRODUCTOS
SET stock = stock + total_cantidad
FROM (
SELECT id_producto AS id, SUM(cantidad) AS total_cantidad
FROM(
SELECT id_producto, -cantidad AS cantidad FROM Inserted
UNION ALL
SELECT id_producto, cantidad FROM Deleted
)T
GROUP BY id_producto
)A
WHERE id_producto = A.id;

END;
Trigger DML - INSTEAD OF
Trigger DML - INSTEAD OF

CREATE TRIGGER nombre_trigger


ON tabla | vista
1 solo Trigger por FOR | AFTER | INSTEAD OF
cada tipo de acción
Después En lugar
de la Acción de la Acción

[ INSERT , UPDATE , DELETE ]


AS
BEGIN

Instrucción SQL;

END;
Trigger DML - INSTEAD OF

Un " Trigger INSTEAD OF" es un tipo especial de Trigger que se dispara en lugar de la acción
desencadenante habitual. Esto significa que en lugar de que la operación de Inserción,
Actualización o Eliminación se ejecute directamente en la Tabla, el Trigger INSTEAD OF se
ejecutará en su lugar, permitiéndote controlar y modificar la operación según sea necesario.

Este tipo de Trigger es comúnmente utilizado en situaciones donde deseas realizar acciones
personalizadas o complejas en lugar de la operación de base de datos estándar. Por ejemplo,
puedes utilizarlo en Vistas o Tablas que involucran múltiples tablas para manipular los datos de
forma más específica o restringir ciertas operaciones según ciertas condiciones.
Trigger DML - INSTEAD OF

CREATE TRIGGER nombre_trigger


En esta Tabla
ON tabla
INSTEAD OF INSERT
AS
BEGIN Cancela la acción
desencadenadora
Instrucción SQL;

END;
Ejecuta la instrucción SQL.
Trigger DML - INSTEAD OF
CREATE TABLE PADRES(
id_padre SMALLINT PRIMARY KEY,
nombre VARCHAR(10) NOT NULL
);

ALTER TABLE HIJOS1 ALTER TABLE HIJOS2


ADD CONSTRAINT FK_HIJO1_PADRE ADD CONSTRAINT FK_HIJO2_PADRE
FOREIGN KEY(id_padre) FOREIGN KEY(id_padre)
CREATE TABLE HIJOS2(
REFERENCES PADRES(id_padre) REFERENCES PADRES(id_padre)
ON DELETE CASCADE; id_hijo2 SMALLINT PRIMARY KEY,
ON DELETE CASCADE;
id_padre SMALLINT,
nombre VARCHAR(10) NOT NULL
);
CREATE TABLE HIJOS1(
id_hijo1 SMALLINT PRIMARY KEY,
id_padre SMALLINT,
nombre VARCHAR(10) NOT NULL
);

ALTER TABLE NIETOS


ADD CONSTRAINT FK_NIETOS_HIJOS1
FOREIGN KEY(id_hijo1) ALTER TABLE NIETOS
REFERENCES HIJOS1(id_hijo1) ADD CONSTRAINT FK_NIETOS_HIJOS2
ON DELETE CASCADE; FOREIGN KEY(id_hijo2)
REFERENCES HIJOS2(id_hijo2)
ON DELETE CASCADE;

CREATE TABLE NIETOS(


id_nietos SMALLINT PRIMARY KEY,
id_hijo1 SMALLINT,
id_hijo2 SMALLINT,
nombre VARCHAR(10) NOT NULL
);
Trigger DML - INSTEAD OF
Msg 1785, Level 16, State 0, Line 78
Si especifica la restricción FOREIGN KEY 'FK_NIETOS_HIJOS2' en la tabla 'NIETOS', podrían producirse ciclos o múltiples rutas en cascada.
Especifique ON DELETE NO ACTION o UPDATE NO ACTION, o bien modifique otras restricciones FOREIGN KEY.

DELETE CASCADE; DELETE CASCADE;

DELETE CASCADE; DELETE CASCADE;

No está permitido en Muchos Manejadores de Bases de Datos


Trigger DML - INSTEAD OF
CREATE TABLE PADRES(
id_padre SMALLINT PRIMARY KEY,
nombre VARCHAR(10) NOT NULL
);

ALTER TABLE HIJOS1 ALTER TABLE HIJOS2


ADD CONSTRAINT FK_HIJO1_PADRE ADD CONSTRAINT FK_HIJO2_PADRE
FOREIGN KEY(id_padre) FOREIGN KEY(id_padre)
CREATE TABLE HIJOS2(
REFERENCES PADRES(id_padre) REFERENCES PADRES(id_padre)
ON DELETE CASCADE; id_hijo2 SMALLINT PRIMARY KEY,
ON DELETE CASCADE;
id_padre SMALLINT,
nombre VARCHAR(10) NOT NULL
);
CREATE TABLE HIJOS1(
id_hijo1 SMALLINT PRIMARY KEY,
id_padre SMALLINT,
nombre VARCHAR(10) NOT NULL
);

ALTER TABLE NIETOS


ADD CONSTRAINT FK_NIETOS_HIJOS1
FOREIGN KEY(id_hijo1) ALTER TABLE NIETOS
REFERENCES HIJOS1(id_hijo1) ADD CONSTRAINT FK_NIETOS_HIJOS2
ON DELETE CASCADE; FOREIGN KEY(id_hijo2)
REFERENCES HIJOS2(id_hijo2);

CREATE TABLE NIETOS(


id_nietos SMALLINT PRIMARY KEY,
id_hijo1 SMALLINT,
id_hijo2 SMALLINT,
nombre VARCHAR(10) NOT NULL
);
Trigger DML - INSTEAD OF
CREATE TABLE PADRES(
id_padre SMALLINT PRIMARY KEY,
nombre VARCHAR(10) NOT NULL
);

ALTER TABLE HIJOS1 ALTER TABLE HIJOS2


ADD CONSTRAINT FK_HIJO1_PADRE ADD CONSTRAINT FK_HIJO2_PADRE
FOREIGN KEY(id_padre) FOREIGN KEY(id_padre)
CREATE TABLE HIJOS2(
REFERENCES PADRES(id_padre); REFERENCES PADRES(id_padre);
id_hijo2 SMALLINT PRIMARY KEY,
id_padre SMALLINT,
nombre VARCHAR(10) NOT NULL
);
CREATE TABLE HIJOS1(
id_hijo1 SMALLINT PRIMARY KEY,
id_padre SMALLINT,
nombre VARCHAR(10) NOT NULL
);

ALTER TABLE NIETOS


ADD CONSTRAINT FK_NIETOS_HIJOS1
FOREIGN KEY(id_hijo1) ALTER TABLE NIETOS
REFERENCES HIJOS1(id_hijo1); ADD CONSTRAINT FK_NIETOS_HIJOS2
FOREIGN KEY(id_hijo2)
REFERENCES HIJOS2(id_hijo2);

CREATE TABLE NIETOS(


id_nietos SMALLINT PRIMARY KEY,
id_hijo1 SMALLINT,
id_hijo2 SMALLINT,
nombre VARCHAR(10) NOT NULL
);
Trigger DML - INSTEAD OF

INSTEAD OF
DELETE NO ACTION; DELETE NO ACTION;

DELETE NO ACTION; DELETE NO ACTION;


Trigger DML - INSTEAD OF

CREATE TRIGGER tgr_eliminar_padres


ON PADRES
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM HIJOS1 WHERE id_padre IN (SELECT id_padre FROM DELETED)


DELETE FROM HIJOS2 WHERE id_padre IN (SELECT id_padre FROM DELETED)
DELETE FROM PADRES WHERE id_padre IN (SELECT id_padre FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos1


ON HIJOS1
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)


DELETE FROM HIJOS1 WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos2


ON HIJOS2
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)


DELETE FROM HIJOS2 WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)

END;
Trigger DML - INSTEAD OF

CREATE TRIGGER tgr_eliminar_padres


ON PADRES
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM HIJOS1 WHERE id_padre IN (SELECT id_padre FROM DELETED)


DELETE FROM HIJOS2 WHERE id_padre IN (SELECT id_padre FROM DELETED)
DELETE FROM PADRES WHERE id_padre IN (SELECT id_padre FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos1


ON HIJOS1
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)


DELETE FROM HIJOS1 WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos2


ON HIJOS2
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)


DELETE FROM HIJOS2 WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)

END;
Trigger DML - INSTEAD OF

CREATE TRIGGER tgr_eliminar_padres


ON PADRES
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM HIJOS1 WHERE id_padre IN (SELECT id_padre FROM DELETED)


DELETE FROM HIJOS2 WHERE id_padre IN (SELECT id_padre FROM DELETED)
DELETE FROM PADRES WHERE id_padre IN (SELECT id_padre FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos1


ON HIJOS1
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)


DELETE FROM HIJOS1 WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos2


ON HIJOS2
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)


DELETE FROM HIJOS2 WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)

END;
Trigger DML - INSTEAD OF

CREATE TRIGGER tgr_eliminar_padres


ON PADRES
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM HIJOS1 WHERE id_padre IN (SELECT id_padre FROM DELETED)


DELETE FROM HIJOS2 WHERE id_padre IN (SELECT id_padre FROM DELETED)
DELETE FROM PADRES WHERE id_padre IN (SELECT id_padre FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos1


ON HIJOS1
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)


DELETE FROM HIJOS1 WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos2


ON HIJOS2
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)


DELETE FROM HIJOS2 WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)

END;
Trigger DML - INSTEAD OF

CREATE TRIGGER tgr_eliminar_padres


ON PADRES
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM HIJOS1 WHERE id_padre IN (SELECT id_padre FROM DELETED)


DELETE FROM HIJOS2 WHERE id_padre IN (SELECT id_padre FROM DELETED)
DELETE FROM PADRES WHERE id_padre IN (SELECT id_padre FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos1


ON HIJOS1
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)


DELETE FROM HIJOS1 WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos2


ON HIJOS2
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)


DELETE FROM HIJOS2 WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)

END;
Trigger DML - INSTEAD OF

CREATE TRIGGER tgr_eliminar_padres


ON PADRES
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM HIJOS1 WHERE id_padre IN (SELECT id_padre FROM DELETED)


DELETE FROM HIJOS2 WHERE id_padre IN (SELECT id_padre FROM DELETED)
DELETE FROM PADRES WHERE id_padre IN (SELECT id_padre FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos1


ON HIJOS1
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)


DELETE FROM HIJOS1 WHERE id_hijo1 IN (SELECT id_hijo1 FROM DELETED)

END;

CREATE TRIGGER tgr_eliminar_hijos2


ON HIJOS2
INSTEAD OF DELETE
AS
BEGIN

DELETE FROM NIETOS WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)


DELETE FROM HIJOS2 WHERE id_hijo2 IN (SELECT id_hijo2 FROM DELETED)

END;
Implementación de la Base de Datos
Implementación de la Base de Datos
Implementación de la Base de Datos
Descripción de la Sección

Objetivo de la Sección

Index(Índice)

Crear Tablas con Registros

Consulta con Clustered Index

Consulta con Non-Clustered Index


Objetivo de la Sección
Index(Índice)
Index(Índice)

Recuperar datos de una base de datos de una manera más rápida.

El indexar una tabla es sin lugar a dudas, una de las mejores opciones
de poder mejorar el rendimiento de las consultas y aplicaciones.

Un índice SQL es una tabla de búsqueda rápida para poder encontrar los registros
que los usuarios necesitan buscar con mayor frecuencia. Ya que un índice es
pequeño, rápido y optimizado para búsquedas rápidas. Además, que son muy
útiles para conectar las tablas relacionales y la búsqueda de tablas grandes.
Index(Índice)

Oculto al usuario

Mostrar al usuario

ISBN = 9783161484100 Cod_libro = 101


13 caracteres Número entero
13 Bytes 4 Bytes
100 Libros = 1 300 Bytes
70% 100 Libros = 400 Bytes
1000 Libros = 13 000 Bytes 1000 Libros = 4 000 Bytes
10000 Libros = 130 000 Bytes 10000 Libros = 40 000 Bytes
Index(Índice)

Sin índice
LIBROS
cod_libro isbn titulo editorial pagina
103 9988556114250 Don Quijote de la Mancha Editorial Juventud 312
101 9783161484100 El corazón de la piedra Hodder Children Book 560
102 9955112035100 Paulo Coelho Editorial Planeta 208
… … … … …

Si hacemos una consulta a la tabla, lo que hará es


recorrer toda la tabla para devolver todas las filas.

Índice Agrupado Índice No Agrupado


(CLUSTERED INDEX) (NONCLUSTERED INDEX)
Index(Índice)

Índice Agrupado(CLUSTERED INDEX)

El índice agrupado define el orden en el que se ordenarán


y almacenarán los datos de la tabla en el disco.

Cuando define un índice agrupado en una columna,


ordenará los datos según los valores de esa columna y
los almacenará.

Sólo puede haber un índice agrupado en una tabla.

Cuando crea la Llave Primaria en una tabla, se crea


automáticamente un índice agrupado único en la tabla.
Index(Índice)

Índice no Agrupado(NONCLUSTERED INDEX)

El índice no agrupado no ordena físicamente las filas de


datos en el disco.

Crea una estructura clave-valor separada de los datos


de la tabla donde la clave contiene los valores de las
columnas (en las que se declara un índice no
agrupado) y cada valor contiene un puntero a la fila de
datos que contiene el valor real.

Puede haber 999 índices no agrupados en una sola tabla.

Cuando crea una restricción UNIQUE, se crea un índice


único no agrupado en la tabla.
Index(Índice)

Instrucción DDL Tipo de índice Tipo de Objeto Nombre

CREATE [ CLUSTERED | NONCLUSTERED ] INDEX index_name

ON <table_name> ( <column_name> [ ASC | DESC ] )

Tabla Columna Orden

Instrucción DDL Tipo de Objeto Nombre Tabla

DROP INDEX index_name ON <table_name>


Index(Índice)

Factores de un buen rendimiento de Consulta

En la cláusula SELECT, utilice únicamente las columnas necesarias. Evite utilizar “*”.

Use la cláusula WHERE para filtrar y devolver solo las filas necesarias.

Trabajar con el Administrador de Base de Datos(DBA) para crear buenos Índices


para los filtros, joins, ordenamientos, etc.

Aprender cómo hacer frente a las tareas con diferentes enfoques de consulta para
comparar el rendimiento.
Index(Índice)

¿Qué es un Plan de Ejecución?

Un Plan de Ejecución es una representación gráfica de los distintos


pasos que intervienen en la obtención de resultados de las tablas de
la base de datos. Una vez que se ejecuta una consulta, el motor de
procesamiento de consultas genera rápidamente varios planes de
ejecución y selecciona el que devuelve los resultados con el mejor
rendimiento.
Index(Índice)

¿Qué es un Plan de Ejecución?

Display Estimated Execution Plan

Include Actual Execution Plan


Index(Índice)

¿Qué es un Plan de Ejecución?


Index(Índice)

Table Scan

Imaginemos que queremos encontrar un


tema específico en un libro sin utilizar el
índice. En este caso, tendríamos que revisar
cada página del libro de manera secuencial
hasta dar con el tema deseado. De manera
similar, un Table Scan indica que el motor de
base de datos debe leer toda la tabla
completa sin utilizar un índice adecuado, ya
sea porque no existe o no es útil en ese
contexto. Esta operación suele ser menos
eficiente la mayor parte del tiempo.
Index(Índice)

Clustered Index Scan NonClustered Index Scan

Similar al Table Scan, pero en este caso la tabla tiene un Dado que los datos no pueden ser ordenados físicamente
índice Clustered que organiza previamente los datos en en disco, ya que esto lo ha realizado el índice Clustered, se
un orden específico. Esto significa que ahora se recorren genera una estructura adicional con las columnas a indexar,
los datos ya ordenados. Sin embargo, a pesar de estar y estas columnas se organizan de manera ordenada. Si la
ordenados, sigue siendo un proceso lento recorrer todo consulta solo utiliza esta estructura del índice sin acceder
el índice. directamente a las páginas de datos, aunque no sea un
método perfecto, es más eficiente que un Table Scan o un
Clustered Index Scan.
Index(Índice)

Clustered Index Seek NonClustered Index Seek

Este método sí es eficiente. Es similar a buscar en un Este es el uso ideal de un índice NonClustered. El
diccionario que está organizado alfabéticamente. Si concepto es parecido a buscar un tema en un libro:
queremos encontrar la palabra "Zanahoria", no acudimos al índice de las primeras páginas para
empezaremos desde la primera página que contiene encontrar rápidamente las secciones donde se encuentra
palabras con la letra "A". En su lugar, iremos la información que necesitamos.
directamente hacia el final, donde se encuentran las
palabras que empiezan con la letra "Z".
Index(Índice)

Stream Aggregate Order By

Ocurre cuando organizamos los datos en grupos y Cuando el motor de base de datos debe ordenar los
utilizamos funciones de agregación como MIN, SUM, resultados por un campo que no está previamente
AVG, o cuando empleamos la cláusula HAVING. ordenado por un índice, necesita realizar una operación
de ordenación, lo que generalmente reduce el
rendimiento de la consulta.
Index(Índice)

Nested Loop Join

Tenemos dos conjuntos de datos: uno está preordenado y contiene elementos únicos, mientras que el
otro no. Usando el conjunto ordenado y de elementos únicos como referencia, se selecciona el primer
elemento y se busca una coincidencia en cada elemento del segundo conjunto, recorriendo todos sus
elementos porque no está ordenado. Al finalizar, se procede con el segundo elemento del conjunto
ordenado. Es posible que se vuelva a encontrar el primer elemento y que ocurra una nueva
coincidencia con el segundo, debido a que el conjunto original ya estaba previamente ordenado.
Index(Índice)

Merge Join

Este operador es el más eficiente de los Joins, ya que ambos conjuntos de datos están
ordenados. Esto permite realizar una búsqueda más rápida en el segundo conjunto.
Cada elemento del primer conjunto busca coincidir con los ítems del segundo, y una
vez que no hay más coincidencias, ya no es necesario recorrer toda la tabla para cada
elemento del primer conjunto.
Index(Índice)

Hash Join

Este es el tipo de Join menos eficiente, ya que al no haber un orden válido a través de
índices en ninguna de las dos tablas o conjuntos de datos (es decir, no hay índices en
ninguna tabla), el sistema debe crear una tabla temporal ordenada para reemplazar
uno de los conjuntos y luego simular un Join similar al Nested Loop Join.
Index(Índice)

Estadísticas de Distribución

➢ Las estadísticas de distribución describen la distribución y la singularidad, de la


selectividad, de los datos.

➢ Las estadísticas de distribución de forma predeterminada, se crean y se actualizan


automáticamente.

➢ Las estadísticas son utilizadas por el optimizador de consultas para estimar la selectividad
de los datos, incluyendo el tamaño de los resultados.

➢ Las grandes variaciones entre los valores estimados y los reales podrían indicar un
problema con las estimaciones, que pueden ser abordados a través de estadísticas de
actualización.
Descripción de la Sección

Descripción - Sentencias TCL

Aplicar Transaction(Transacción)

Transacciones con Procedimiento Almacenado

Transacciones con Manejo de Control de Errores

Comando NOLOCK
Transaction(Transacción) -
Sentencias TCL
Transaction(Transacción) - Sentencias TCL

Las sentencias TCL(del ingles: “Transaction Control Language” o en


español: “Lenguaje de control de transacciones”) es una parte de SQL
que se utiliza para gestionar transacciones y garantizar la integridad de
los datos en una base de datos.

Una transacción es una unidad lógica de trabajo que consta de una o


más operaciones de base de datos que se ejecutan como un todo, lo
que significa que todas deben completarse correctamente o, en caso
contrario, ninguna de ellas se aplica.
Transaction(Transacción) - Sentencias TCL

Usar la Transacción es el mejor método debido a que cumple con las cuatro
propiedades de todo Sistema de Bases de Datos Relacional, a estas propiedades
de les conoce como ACID(atomicity, consistency, isolation y durability)
Transaction(Transacción) - Sentencias TCL

Algunas de las principales sentencias TCL en SQL son:

BEGIN TRANSACTION[TRAN]

COMMIT [TRANSACTION | TRAN]

ROLLBACK [TRANSACTION | TRAN]


Transaction(Transacción) - Sentencias TCL

Transferencia Bancaria

Envía Dinero Transacción Recibe Dinero


Transaction(Transacción) - Sentencias TCL

Transferencia Bancaria
BEGIN TRANSACTION; Inicio de la Transacción
BEGIN TRY

UPDATE Cuentas Deduce el monto


SET Saldo = Saldo - 100 de la cuenta origen
WHERE CuentaID = 1;
Envía Dinero Transacción Recibe Dinero

UPDATE Cuentas
SET Saldo = Saldo + 100 Agrega el monto a
WHERE CuentaID = 2; la cuenta destino

COMMIT TRANSACTION; Si todo va bien,


PRINT 'Transferencia completada exitosamente.'; confirmamos la transacción
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION; Si hay un error,
PRINT 'Error en la transferencia. Se han revertido los cambios.'; revertimos la transacción
END CATCH;
Transaction(Transacción) - Sentencias TCL

Transferencia Bancaria
BEGIN TRANSACTION; Inicio de la Transacción
BEGIN TRY

UPDATE Cuentas
SET Saldo = Saldo - 100
WHERE CuentaID = 1;
Envía Dinero Transacción Recibe Dinero

UPDATE Cuentas
SET Saldo = Saldo + 100
WHERE CuentaID = 2;
Corte de energía
COMMIT TRANSACTION; Desastre natural
PRINT 'Transferencia completada exitosamente.';
END TRY
Problema de hardware
BEGIN CATCH
ROLLBACK TRANSACTION; Si hay un error,
PRINT 'Error en la transferencia. Se han revertido los cambios.'; revertimos la transacción
END CATCH;
Transaction(Transacción) - Sentencias TCL

• Las transacciones permiten ejecutar un grupo de operaciones de


manera segura y coherente.

• Garantizan la integridad de los datos mediante las propiedades ACID.

• Se controlan mediante las sentencias BEGIN, COMMIT y ROLLBACK .

• Es importante manejar errores adecuadamente para evitar estados


inconsistentes en la base de datos.

Las transacciones son esenciales en sistemas de bases de datos para garantizar que las
operaciones críticas se ejecuten correctamente o se reviertan en caso de fallo.
Descripción de la Sección

Descripción - Sentencias DCL

Habilitar el usuario “sa”

Logins

Eliminar un Login bloqueado

Roles a Nivel de Servidor

Roles a Nivel de Servidor Personalizado

Users

Roles a Nivel de Base de Datos

Roles a Nivel de Base de Datos Personalizados


Sentencias DCL
Sentencias DCL

En SQL Server, DCL (Data Control Language o Lenguaje de Control


de Datos) es un conjunto de instrucciones SQL utilizadas para
controlar el acceso a los datos dentro de una base de datos. Su
principal objetivo es gestionar los permisos y privilegios que tienen los
usuarios o roles para realizar ciertas acciones en los objetos de la base
de datos, como tablas, vistas, procedimientos almacenados, etc.
Sentencias DCL

GRANT REVOKE DENY

Otorga permisos Niega explícitamente


específicos a un usuario Revoca o quita permisos permisos a un usuario o
o rol para realizar previamente otorgados a rol, incluso si el permiso
acciones en la base de un usuario o rol. fue otorgado
datos. anteriormente.
Sentencias DCL
Consideraciones:

Las instrucciones DCL son fundamentales para


Seguridad garantizar la seguridad de la base de datos, ya que
limitan qué acciones puede realizar cada usuario o rol.

La instrucción DENY tiene prioridad sobre GRANT. Si


Jerarquía un permiso es negado con DENY, el usuario no podrá
realizar la acción, aunque tenga permisos otorgados.
Sentencias DCL

Las instrucciones DCL son esenciales para el control de acceso y la


administración de la seguridad en SQL Server, asegurando que solo
los usuarios autorizados puedan interactuar con los datos de manera
adecuada.
Usuario “sa”
Usuario “sa”
El usuario sa se refiere al "System Administrator". Es un usuario especial y
predeterminado que tiene todos los privilegios y permisos posibles en el
servidor. Este usuario suele ser creado opcionalmente durante la
instalación de SQL Server y se utiliza principalmente para administrar y
configurar la instancia de SQL Server. Por ser un usuario con tantos
privilegios, se recomienda usarlo con precaución y limitar su acceso
cuando sea posible, por motivos de seguridad.
Logins
Logins
En SQL Server, un Login es una credencial de acceso que permite a un
usuario autenticarse en la instancia del servidor de base de datos. Es el
primer paso para establecer una conexión con SQL Server, y una vez que
un usuario se autentica con su Login, puede acceder a las bases de datos
dentro de esa instancia, siempre que también tenga permisos otorgados a
nivel de base de datos.
Logins
Windows Authentication
Servidor
SQL Server Authentication

Microsoft Entra MFA

Microsoft Entra Password

Microsoft Entra Integrated

Microsoft Entra Service Principal

Microsoft Entra Managed Identity

Microsoft Entra Default


Logins
Sintaxis:
USE master;
CREATE LOGIN login_name WITH PASSWORD = 'password’

[ MUST_CHANGE ],
[ DEFAULT_DATABASE = database ],

[ DEFAULT_LANGUAGE = language ], Si la directiva de Windows requiere


contraseñas seguras, las contraseñas
[ CHECK_EXPIRATION = { ON | OFF } ], deben tener al menos tres de las
cuatro siguientes características:
[ CHECK_POLICY = { ON | OFF } ] •

Un carácter en mayúscula (A-Z).
Un carácter en minúsculas (a-z).
• Un dígito (0-9).
• Uno de los caracteres especiales, como
un espacio, _, @, *, ^, %, !, $, #, o &.
DROP LOGIN login_name;
Roles a Nivel
de Servidor
Roles a Nivel de Servidor

SQL Server proporciona roles a nivel de servidor para


ayudarlo a administrar los permisos en un servidor. Estos
roles son entidades de seguridad que agrupan a otras
entidades. Los roles a nivel de servidor abarcan todo el
servidor en cuanto a su alcance de permisos.
Roles a Nivel de Servidor
En la versión de SQL Server 2019 y versiones anteriores se
contaban con nueve roles a nivel de servidor.

• Es el rol con “mayores privilegios” en SQL Server.


• Los miembros del rol ‘sysadmin’ tienen “control total” sobre la instancia de SQL
sysadmin Server. Pueden realizar cualquier operación en el servidor, incluyendo la administración
de bases de datos, configuración del servidor y seguridad.

• Los miembros de este rol pueden “configurar las opciones del servidor” y realizar
tareas administrativas relacionadas con el servidor, como cambiar las opciones de
serveradmin configuración globales del servidor.
• También pueden iniciar y detener el servidor SQL Server.

• Los miembros del rol ‘setupadmin’ pueden “administrar los enlaces de servidores
remotos” y “configurar” opciones del servidor.
setupadmin • Este rol tiene permisos para “agregar y eliminar servidores vinculados”, que permiten
la ejecución de consultas distribuidas entre servidores SQL.
Roles a Nivel de Servidor
En la versión de SQL Server 2019 y versiones anteriores se
contaban con nueve roles a nivel de servidor.

• Los miembros de este rol pueden “administrar la seguridad a nivel de servidor”:


pueden crear, modificar y eliminar logins.
securityadmin • También pueden otorgar y revocar permisos a nivel de servidor y establecer permisos
para los usuarios en las bases de datos.

• Los miembros del rol ‘processadmin’ pueden “administrar los procesos que se
ejecutan en SQL Server”, lo que incluye la capacidad de “ver y terminar procesos” o
processadmin conexiones activas.
• Pueden detener cualquier tarea que esté bloqueando otros procesos o consumiendo
demasiados recursos.

• Los miembros de este rol pueden “crear, modificar, eliminar y restaurar bases de
datos” en la instancia de SQL Server.
dbcreator • Tienen privilegios para realizar tareas relacionadas con la creación y administración de
bases de datos, pero no necesariamente pueden administrar la seguridad de los usuarios
de la base de datos.
Roles a Nivel de Servidor
En la versión de SQL Server 2019 y versiones anteriores se
contaban con nueve roles a nivel de servidor.

• Los miembros del rol ‘bulkadmin’ tienen permisos para ejecutar operaciones de
“importación masiva de datos” (Bulk Insert) en SQL Server.
bulkadmin • Este rol es útil cuando se necesitan insertar grandes cantidades de datos en tablas de
SQL Server mediante el comando ‘BULK INSERT’.

• El rol ‘diskadmin’ en SQL Server es responsable de la “administración de los discos


físicos” en los que se almacenan los archivos de bases de datos.
diskadmin • Los miembros de este rol pueden realizar tareas relacionadas con la gestión de los
archivos del disco que utiliza SQL Server, como agregar, quitar o modificar unidades de
disco para almacenamiento.

• El rol ‘public’ es un rol especial y está “disponible para todos los usuarios” de SQL
Server de manera predeterminada. “Todos los logins” que acceden a SQL Server
public automáticamente son miembros del rol ‘public’.
• El rol ‘public’ no se puede eliminar ni quitar de ningún login o usuario. Su función es
proporcionar un conjunto básico de permisos que todos los usuarios tienen por defecto.
Roles a Nivel de Servidor
En la versión de SQL Server 2022 se han 10 roles de servidor adicionales que se diseñaron específicamente
teniendo en cuenta el principio de privilegio mínimo , que tienen el prefijo ##MS_ y el sufijo ## para distinguirlos de
otros principales creados por el usuario y roles de servidor personalizados. Esos nuevos roles contienen privilegios
que se aplican en el ámbito del servidor, pero también pueden heredarse hasta bases de datos individuales (excepto
el rol de servidor ##MS_LoginManager## ).

##MS_DatabaseConnector## ##MS_DatabaseManager## ##MS_DefinitionReader##

##MS_LoginManager## ##MS_PerformanceDefinitionReader## ##MS_SecurityDefinitionReader##

##MS_ServerPerformanceStateReader## ##MS_ServerSecurityStateReader##

##MS_ServerStateManager## ##MS_ServerStateReader##
Roles a Nivel de Servidor

Sintaxis:
USE master;

ALTER SERVER ROLE server_role_name


{ Agrega la entidad de seguridad del
servidor especificada al rol de
[ ADD MEMBER login ] | servidor. Login es el nombre de inicio
de sesión.

[ DROP MEMBER login ] Quita la entidad de seguridad del


servidor especificada del rol de
} servidor. Login es un nombre de inicio
se sesión.
Roles a Nivel de Servidor
Login Base de Datos
Servidor Role
Role a Nivel
de Servidor
Personalizado
Role a Nivel de Servidor Personalizado

Los roles a nivel de servidor personalizados en SQL Server son roles definidos por el
administrador de la base de datos que permiten agrupar y asignar permisos a usuarios o
inicios de sesión de acuerdo con las necesidades específicas de la organización o sistema.
Estos roles permiten una mayor flexibilidad en la administración de permisos, ya que
permiten definir conjuntos de privilegios que no están cubiertos por los roles de servidor
predefinidos de SQL Server.

Este tipo de roles personalizados se utiliza para simplificar la administración de permisos


cuando necesitas que varios usuarios tengan un conjunto específico de privilegios en el
servidor, pero no quieres asignar esos permisos uno por uno.
Role a Nivel de Servidor Personalizado
Características:

Facilidad de
Control de permisos Seguridad
administración

Puedes definir roles con


permisos más ajustados Al asignar permisos
Te permite agrupar a las necesidades de mediante roles, puedes
permisos específicos seguridad de tu modificar o revocar
para que se asignen a organización, sin permisos fácilmente a
múltiples usuarios de necesidad de otorgar través del rol en lugar de
manera eficiente. permisos excesivos que hacerlo para cada
podrían poner en riesgo usuario individual.
el sistema.
Role a Nivel de Servidor Personalizado

Sintaxis:
USE master;

CREATE SERVER ROLE ServerRoleNameCustom

ALTER SERVER ROLE [RoleName | Permission ]


ADD MEMBER ServerRoleNameCustom

DROP SERVER ROLE ServerRoleNameCustom


Users
Users
Los usuarios (users) son entidades de seguridad que representan cuentas
individuales que pueden acceder a una base de datos. Los usuarios se
asocian a cuentas de inicio de sesión (logins) que permiten la autenticación
en el servidor de base de datos. Mientras que los logins controlan el
acceso al servidor, los users controlan el acceso y los permisos dentro de
una base de datos específica.
Roles a Nivel de Servidor
Login Base de Datos
Servidor Role / User
Users
Sintaxis:
USE DataBaseName;

CREATE USER user_name FOR LOGIN = login_name


[ DEFAULT_SCHEMA = schema_name ]

DROP USER user_name;


Roles a Nivel de
Base de Datos
Roles a Nivel de Base de Datos

En SQL Server, los roles a nivel de base de datos son un conjunto de


permisos predefinidos que se pueden asignar a los usuarios para
gestionar su acceso y las operaciones que pueden realizar en una base
de datos específica. Los roles facilitan la administración de permisos, ya
que en lugar de asignar permisos de manera individual a cada usuario,
puedes agregar usuarios a un rol que ya tenga los permisos necesarios.
Roles a Nivel de Base de Datos
SQL Server consta de 10 roles a Nivel de Base de datos

Tiene control completo sobre la base de datos. Los miembros de este rol pueden realizar
db_owner cualquier tarea dentro de la base de datos, incluida la modificación de los permisos de otros
usuarios.

Puede modificar los roles y permisos a nivel de base de datos. No tiene todos los permisos
db_securityadmin que tiene db_owner, pero es el rol responsable de gestionar la seguridad de la base de
datos.

Puede agregar o eliminar acceso a la base de datos, es decir, asignar usuarios a la base de
db_accessadmin datos.

db_backupoperator Tiene permisos para realizar respaldos de la base de datos, pero no puede restaurar.
Roles a Nivel de Base de Datos
SQL Server consta de 10 roles a Nivel de Base de datos

db_datareader Permite leer todos los datos de todas las tablas y vistas dentro de la base de datos.

Permite modificar los datos (INSERT, UPDATE, DELETE) en todas las tablas y vistas
db_datawriter de la base de datos.

db_denydatareader Deniega explícitamente permisos de lectura en todas las tablas y vistas.

db_denydatawriter Deniega explícitamente permisos de escritura en todas las tablas y vistas.


Roles a Nivel de Base de Datos
SQL Server consta de 10 roles a Nivel de Base de datos

Permite ejecutar comandos DDL (Data Definition Language), como CREATE,


db_ddladmin ALTER, DROP sobre los objetos de la base de datos (tablas, vistas,
procedimientos, etc.).

Es un rol a nivel de base de datos especial que incluye a todos los usuarios de una
public base de datos. Por defecto, el rol public tiene permisos mínimos, generalmente solo
de lectura de ciertos metadatos.
Roles a Nivel de Base de Datos

Sintaxis:
USE DataBaseName;

ALTER ROLE database_role_name


{ Agregue la entidad de seguridad de
base de datos a la pertenencia de un
[ ADD MEMBER user_name ] | rol de base de datos.

[ DROP MEMBER user_name ] Quita la entidad de seguridad de base


de datos de la pertenencia de un rol
} de base de datos.
Roles a Nivel de
Base de Datos
Personalizado
Roles a Nivel de Base de Datos Personalizado

En SQL Server, los roles a nivel de base de datos personalizados son roles
que puedes crear manualmente para organizar y gestionar los permisos de
los usuarios de forma más flexible y eficiente. Estos roles son muy útiles
cuando los roles fijos de base de datos no se ajustan exactamente a tus
necesidades, ya que te permiten agrupar permisos específicos y asignarlos a
usuarios o grupos.
Roles a Nivel de Base de Datos Personalizado
Ventajas:

Control Granular de
Facilidad de Gestión Reusabilidad
Permisos

En lugar de asignar
permisos
Puedes asignar Puedes crear roles
individualmente a cada
permisos específicos a personalizados que se
usuario, puedes agrupar
los roles personalizados ajusten a un perfil
permisos en roles
según las necesidades común de usuario y
personalizados y luego
de la aplicación o del asignarlos a múltiples
asignar usuarios a esos
equipo. usuarios.
roles, simplificando la
administración.
Roles a Nivel de Base de Datos Personalizado

Sintaxis:
USE DataBaseName;

CREATE ROLE DataBaseRoleNameCustom

[ GRANT | DENY | REVOKE ] [ Permission ]


TO DataBaseRoleNameCustom

DROP ROLE DataBaseRoleNameCustom


Descripción de la Sección

¿Qué es un Backup?

Estrategias de Backups

Hacer “Backups” a una Base de Datos

Realizar “Restore” a una Base de Datos


¿Qué es un
Backup?
¿Qué es un Backup?

Un backup (o copia de seguridad) es una copia exacta de los datos que se realiza para proteger
y preservar la información en caso de pérdida, daño, corrupción o eliminación accidental de los
datos originales. El propósito principal de un backup es garantizar la recuperación de la
información en caso de fallos, errores humanos, ataques cibernéticos, o desastres.

En el contexto de SQL Server (y otros sistemas de gestión de bases de datos), los


backups son fundamentales para mantener la disponibilidad y seguridad de las bases de
datos, permitiendo restaurarlas en casos de emergencia o mantenimiento.
¿Qué es un Backup?
Características:
Copia de datos Seguridad Recuperación de datos

Un backup guarda los


Los backups suelen Permite restaurar parcial
datos de un sistema,
implementarse con o totalmente los datos a
aplicación o base de
medidas de seguridad partir del backup en
datos en un lugar
adicionales, como caso de que la
seguro, que puede ser
cifrado, para proteger información original esté
un disco duro, una nube
los datos sensibles. inaccesible o dañada.
o un servidor externo.
¿Qué es un Backup?
Ventajas:

Protección ante Continuidad del Flexibilidad en la


pérdida de datos negocio restauración

En caso de desastres,
Dependiendo del tipo de
Minimiza el impacto de los backups permiten
backup, se puede
fallos de hardware, que las empresas sigan
restaurar el sistema
ataques de malware o funcionando sin una
completo o partes
errores humanos. pérdida significativa de
específicas de los datos.
datos.
¿Qué es un Backup?
Tipos:

Full Backup Differential Backup Transaction log Backup


(Copia de seguridad de Registro de
(Copia de seguridad Completa) (Copia de seguridad Diferencial)
Transacción)

Copy-Only Backup Filegroup Backup Tail Log Backup


(Copia de seguridad de Grupo de (Copia de seguridad de la Cola de
(Copia de seguridad de solo copia)
Archivo) Registro)
¿Qué es un Backup?
Full Backup
(Copia de seguridad Completa)

Una copia de seguridad completa(Full Backup), como su nombre lo indica,


respalda todo. Es la base de cualquier tipo de copia de seguridad. Se trata de
una copia completa, que almacena todos los objetos de la base de datos: tablas,
procedimientos, funciones, vistas, índices, etc. Con una copia de seguridad Full Backup
completa, podrá restaurar fácilmente una base de datos exactamente en la
misma forma en que estaba en el momento de la copia de seguridad.

Se debe realizar una copia de seguridad completa al menos una vez antes de poder ejecutar cualquier
otro tipo de copia de seguridad: esta es la base para cualquier otro tipo de copia de seguridad.
¿Qué es un Backup?
Full Backup
(Copia de seguridad Completa)

Sintaxis:

BACKUP DATABASE [database_name] Full Backup


TO DISK = 'path'
WITH [ options ];
¿Qué es un Backup?
Differential Backup
(Copia de seguridad Diferencial)

Una copia de seguridad diferencial de la base de datos(Differential Backup) es el superconjunto de la última


copia de seguridad completa(Full Backup) y contiene todos los cambios que se han realizado desde la Differential
Backup
última copia de seguridad completa(Full Backup).

Como una copia de seguridad diferencial no realiza una copia de seguridad de todo , la copia de
seguridad suele ejecutarse más rápido que una copia de seguridad completa. Una copia de seguridad
diferencial de la base de datos captura el estado de las extensiones modificadas en el momento en Differential
que se creó la copia de seguridad. Si crea una serie de copias de seguridad diferenciales, es probable Backup
que una base de datos que se actualiza con frecuencia contenga datos diferentes en cada diferencial.

Las copias de seguridad diferenciales ahorran espacio de almacenamiento y el tiempo que


lleva realizar una copia de seguridad. Sin embargo, a medida que los datos cambian con el
Differential Backup
tiempo, el tamaño de la copia de seguridad diferencial también aumenta.
¿Qué es un Backup?
Differential Backup
(Copia de seguridad Diferencial)

Sintaxis: Differential
Backup

BACKUP DATABASE [database_name]


TO DISK = 'path' Differential
Backup

WITH DIFFERENTIAL,
[ options ];
Differential Backup
¿Qué es un Backup?
Transaction log Backup
(Copia de seguridad de Log de Transacción)

La copia de seguridad de registros, como su nombre lo indica, realiza una copia de seguridad de los registros de
transacciones. Este tipo de copia de seguridad solo es posible con modelos de recuperación de registros Log
Backup
completos o masivos.

Este tipo de backup es esencial en bases de datos que utilizan el


modelo de recuperación completa o bulk-logged, ya que permite
restaurar la base de datos hasta un punto específico en el tiempo.
Log Log
Un archivo de registro de transacciones almacena una serie de registros que proporcionan el Backup Backup
historial de cada modificación de datos en una base de datos.

No se puede hacer un backup del log de transacciones sin haber hecho antes un
backup completo de la base de datos. El log backup depende del último full backup Log Log
Backup Backup
para restaurar completamente la base de datos.
¿Qué es un Backup?
Transaction log Backup
(Copia de seguridad de Log de Transacción)

Sintaxis: Log
Backup

BACKUP LOG [database_name]


TO DISK = 'path' Log
Backup
Log
Backup

WITH [ options ];

Log Log
Backup Backup
¿Qué es un Backup?
Copy-Only Backup
(Copia de seguridad de solo copia)

El Copy-Only Backup es un tipo especial de backup en SQL Server que se realiza sin
afectar la secuencia normal de backups. Esencialmente, es una copia de seguridad
independiente que no interfiere con la estrategia regular de backups, lo que significa que
no altera los puntos de restauración ni la capacidad de realizar otros tipos de backups Copy-Only
(como diferenciales o de transacciones). Se utiliza cuando se necesita hacer una copia de Backup
seguridad temporal o puntual, pero sin alterar el historial de backups de la base de datos.

Si necesitamos una copia temporal de la base de datos para moverla o probarla en otro entorno, un copy-only
backup te permite hacerlo sin afectar la estrategia regular de backups.

También si estás realizando mantenimiento en la base de datos y necesitas una copia de seguridad adicional
como medida de seguridad, el copy-only backup te permite hacerlo sin interferir con los otros backups.
¿Qué es un Backup?
Copy-Only Backup
(Copia de seguridad de solo copia)

Sintaxis:

BACKUP DATABASE [database_name] Copy-Only


Backup
TO DISK = 'path'
WITH COPY_ONLY,
[ options ];
¿Qué es un Backup?
Filegroup Backup
(Copia de seguridad de Grupo de Archivo)

Un Filegroup Backup en SQL Server es un tipo de respaldo


que permite hacer copias de seguridad de un conjunto
específico de archivos o filegroups en lugar de realizar un
respaldo completo de la base de datos. Los filegroups son
contenedores lógicos que agrupan archivos dentro de una
base de datos y facilitan la gestión de grandes bases de datos
distribuyendo los datos en múltiples archivos. Con un filegroup
backup, puedes respaldar solo los datos que se encuentran en
un filegroup particular.
¿Qué es un Backup?
Tail Log Backup
(Copia de seguridad de la Cola de Registro)

El Tail-Log Backup en SQL Server es un tipo especial de copia de seguridad que


captura las últimas transacciones que aún no se han respaldado en el log de
Tail Log Tail Log
transacciones antes de que se restaure la base de datos o cuando la base de datos Backup Backup

ha fallado. Este tipo de respaldo garantiza que no se pierdan datos al final de la


cadena de transacciones antes de una restauración o antes de que una base de
datos se vuelva inaccesible.
Tail Log Tail Log
Backup Backup
El Tail-Log Backup es una parte crucial de la estrategia de recuperación
ante desastres, ya que permite capturar los últimos cambios en la base de
datos para asegurar que toda la actividad reciente esté protegida antes de
iniciar una restauración.
Estrategias de
Backups
Estrategias de Backups

Las estrategias de backup en SQL Server son enfoques diseñados para garantizar la seguridad,
integridad y disponibilidad de los datos almacenados en las bases de datos. La elección de la
estrategia de backup adecuada depende de varios factores, como el tamaño de la base de
datos, la frecuencia de los cambios en los datos, los requisitos de recuperación ante desastres y
los recursos disponibles (como almacenamiento y tiempo de inactividad permitido).
Estrategias de Backups

Domingo Lunes Martes Miércoles Jueves Viernes Sábado

Full Full Full Full Full Full Full


Backup Backup Backup Backup Backup Backup Backup
Estrategias de Backups

Domingo Lunes Martes Miércoles Jueves Viernes Sábado

Full Differential Differential Differential Differential Differential Differential


Backup Backup Backup Backup Backup Backup
Backup

Log Log Log Log Log Log Log Log Log Log Log Log Log Log
Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup

Log Log Log Log Log Log Log Log Log Log Log Log Log Log
Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup Backup
Descripción de la Sección

¿Qué es un Scheduled JOB?

Inicial SQL Server Agent

Crear JOB

Crear JOB Múltiple


¿Qué es un
Scheduled JOB?
¿Qué es un Scheduled JOB?

Un Scheduled Job en SQL Server es una tarea automatizada que se programa


para ejecutarse en un momento específico o a intervalos regulares. Estos trabajos
son manejados por el SQL Server Agent, que es el servicio responsable de
ejecutar tareas automatizadas en segundo plano. Los jobs (trabajos) pueden
incluir una variedad de tareas, como ejecutar consultas SQL, respaldar bases de
datos, restaurar datos, realizar tareas de mantenimiento, etc.
¿Qué es un Scheduled JOB?
Ejemplo de Tareas que se Pueden Automatizar con un Job:

Backups automáticos

Tareas de mantenimiento

Tareas ETL (Extract, Transform, Load)

Ejecución de reportes periódicos


¿Qué es un Scheduled JOB?
Ventajas:

Automatización

Minimiza errores humanos

Flexibilidad

Monitoreo
¿Qué es un Scheduled JOB?

Un Scheduled Job en SQL Server es una forma poderosa de automatizar


tareas críticas, como el respaldo de bases de datos, mantenimiento y
reportes, permitiendo a los administradores de bases de datos
asegurarse de que estas tareas se realicen consistentemente y sin
intervención manual. El SQL Server Agent es el componente clave que
gestiona estos jobs, y la configuración de estos trabajos puede adaptarse
a las necesidades particulares del entorno o de la empresa.
¡CUAL ES EL SIGUIENTE PASO!

DISEÑO DE BASES SQL SERVER INTEGRATION


DE DATOS RELACIONALES SERVICES DESDE CERO
¡CUAL ES EL SIGUIENTE PASO!

AZURE DATA FACTORY APRENDE TABLEAU DESDE


(ADF) CERO HASTA EXPERTO

También podría gustarte