T8 Lenguaje Transact SQL
T8 Lenguaje Transact SQL
GESTIÓN DE
BASES DE DATOS
UNIDAD DE TRABAJO 8:
LENGUAJE Transact-SQL
Mª VICTORIA BULLÓN ALONSO
CURSO 2023-2024
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
ÍNDICE
1 Introducción a SQL............................................................................................. 3
1.1 HISTORIA DEL SQL .................................................................................................. 3
1.2 TAREAS DE USUARIO Y DE ADMINISTRADOR ................................................................... 4
1.3 PARTES DEL LENGUAJE SQL ....................................................................................... 5
1.4 MODOS DE TRABAJO CON SQL .................................................................................. 5
2 Operadores, funciones y condiciones ................................................................. 6
2.1 OPERADORES ......................................................................................................... 6
2.1.1Operadores aritméticos .......................................................................................................... 6
2.1.2Operador de concatenación ................................................................................................... 6
2.1.3Operadores de comparación .................................................................................................. 6
2.1.4Operador NOT IN .................................................................................................................... 7
2.1.5Operador LIKE ......................................................................................................................... 8
2.1.6Operadores lógicos ................................................................................................................. 8
2.1.7Operadores de conjuntos ........................................................................................................ 9
2.2 FUNCIONES SQL ................................................................................................... 11
2.2.1 Funciones numéricas ............................................................................................................ 11
2.2.2 Funciones de caracteres ....................................................................................................... 12
2.2.3 Funciones de fechas .............................................................................................................. 14
2.2.4 Conversión de datos.............................................................................................................. 16
2.2.5 Funciones agrupadas ............................................................................................................ 17
3 Comandos ....................................................................................................... 20
3.1 COMANDOS DML (DATA MANIPULATION LANGUAGE) ................................................ 20
3.1.1SELECT................................................................................................................................... 20
3.1.2INSERT................................................................................................................................... 25
3.1.3UPDATE ................................................................................................................................. 27
3.1.4DELETE .................................................................................................................................. 28
3.1.5TRUNCATE TABLE .................................................................................................................. 29
3.2 COMANDOS DDL (DATA DEFINITION LANGUAGE) ....................................................... 30
3.2.1 Creación y manipulación de una base de datos .................................................................... 30
3.2.2 Creación y manipulación de tablas ....................................................................................... 35
3.2.3 Creación y manipulación de índices ...................................................................................... 45
3.2.4 Creación y manipulación de vistas ........................................................................................ 47
3.3 COMANDOS DCL (DATA CONTROL LANGUAGE) .......................................................... 49
3.3.1 BEGIN TRANSACTION ............................................................................................................ 49
3.3.2 COMMIT TRANSACTION ....................................................................................................... 49
3.3.3 ROLLBACK TRANSACTION ..................................................................................................... 50
2
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
1 Introducción a SQL
SQL (Structured Query Language, lenguaje estructurado de consulta) es en la actualidad el
lenguaje de uso y programación de bases de datos relacionales más extendido. Se trata de un
lenguaje para realizar operaciones sobre una base de datos.
Destacan las siguientes características de SQL:
➢ Es un lenguaje que permite a los usuarios realizar consultas de modo interactivo, ya
que fue desarrollado como lenguaje de usuario final.
➢ Es un lenguaje que trabaja de modo declarativo. Cuando un usuario quiere realizar
una operación con los datos no debe escribirla paso a paso (no es procedimental).
Basta con que especifique qué resultado quiere obtener y el gestor de la base de
datos se ocupará de realizar las tareas necesarias.
➢ SQL es un lenguaje que permite la definición de datos (DDL) y su gestión (DML),
almacenando todos los elementos creados en la base de datos.
➢ Puede emplearse como lenguaje de programación de bases de datos, incrustado en
otros lenguajes o directamente mediante su empleo como lenguaje de programación
dentro del propio Sistema Gestor de Bases de Datos. PL/SQL en Oracle o Transact-SQL
en SQL Server.
➢ El hecho de poseer gestión de transacciones, de integridad, seguridad y validación de
los datos facilita la protección de los mismos en redes, tanto intranet como extranet.
➢ Es sencillo y robusto.
3
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por ISO en 1987.
1989 SQL-89 Revisión menor. Incorpora C a los lenguajes que soportan SQL
embebido.
1999 SQL:1999 SQL3 Se agregaron las consultas recursivas para relaciones jerárquicas,
triggers y algunas características orientadas a objetos.
A partir del lenguaje ANSI SQL cada Sistema Gestor de Bases de Datos desarrolla su versión
extendida del lenguaje SQL. Así tenemos PL/SQL en Oracle o Transact-SQL en SQL Server. En
este manual nos centraremos en el lenguaje Transact-SQL.
4
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Para resolver estos y otros conflictos aparece la figura del administrador, DBA (Data Base
Administrator). Esta persona posee todos los privilegios de acceso sobre los datos.
Son tareas específicas del administrador:
- La creación y destrucción de los objetos de la base de datos: tablas, vistas, usuarios,...
- La autorización de acceso a los objetos.
- La gestión del almacenamiento físico y del espacio en disco.
- La política de copias de seguridad y la restauración de la base de datos en caso de
caída.
Las personas o programas que acceden a la base de datos y no son el DBA reciben el nombre
genérico de usuarios. Estos usuarios se pueden clasificar en:
• Programadores: Se trata de personas que no están propiamente interesadas en los
datos, sino en desarrollar un programa que trabaje sobre los datos. Este programa será
utilizado por un usuario final cuando esté acabado.
• Usuarios finales: Son aquellos a los que les interesan los datos almacenados en la base
de datos. Estos usuarios tienen dos opciones para trabajar:
o Utilizar el lenguaje SQL para acceder directamente a los datos en SGBD.
o Utilizar una aplicación realizada a medida por un programador.
5
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
2.1 Operadores
Un operador manipula los datos individualmente y devuelve un resultado. Los
operadores están representados por caracteres especiales o por teclas.
6
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
SELECT 'TRUE'
FROM emp
WHERE deptno NOT IN (5,15);
7
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Donde:
char1 Es el valor a comparar con la plantilla. Este valor tiene que ser de los tipos CHAR or
VARCHAR.
NOT Invierte el resultado de evaluar la condición.
char2 Es la plantilla o modelo con el se compara char1.
SELECT sal
FROM emp
WHERE ename LIKE 'SM%'
La siguiente consulta utiliza el operador = y muestra los salarios de los empleados cuyo
nombre sea ‘SM%’:
SELECT sal
FROM emp
WHERE ename = 'SM%'
Los caracteres especiales que se pueden utilizar con el operador LIKE son los
siguientes:
Para más información sobre el uso de este operador buscar LIKE en la documentación
de Microsoft.
SELECT *
FROM emp
WHERE NOT
8
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Operador Retorna
UNION Devuelve filas distintas seleccionadas por cualquiera de las consultas.
UNION ALL Devuelve todas las filas seleccionadas por cualquiera de las consultas,
incluyendo los duplicados.
EXCEPT Devuelve filas distintas de la consulta de entrada izquierda que no aparecen en
la consulta de entrada derecha.
INTERSECT Devuelve filas distintas que son el resultado de las consultas de entrada
izquierda y derecha.
Ejemplos
Partiendo de las siguientes tablas:
SELECT part
FROM orders_list1
PART
----------
SPARKPLUG
FUEL PUMP
FUEL PUMP
TAILPIPE
SELECT part
FROM orders_list2
PART
----------
CRANKSHAFT
TAILPIPE
9
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
TAILPIPE
UNION
La siguiente instrucción combina los registros que se encuentran en orders_list1 y/o
orders_list2 eliminando duplicados:
SELECT part
FROM orders_list1
UNION
SELECT part
FROM orders_list2
PART
----------
SPARKPLUG
FUEL PUMP
TAILPIPE
CRANKSHAFT
UNION ALL
La siguiente instrucción combina los registros que se encuentran en orders_list1 y/o
orders_list2 manteniendo duplicados:
SELECT part
FROM orders_list1
UNION ALL
SELECT part
FROM orders_list2
PART
SPARKPLUG
FUEL PUMP
FUEL PUMP
TAILPIPE
CRANKSHAFT
TAILPIPE
TAILPIPE
EXCEPT
La siguiente instrucción permite obtener los registros la tabla orders_list1 que no se
encuentran en orders_list2:
SELECT part
FROM orders_list1
EXCEPT
SELECT part
FROM orders_list2
PART
----------
10
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
SPARKPLUG
FUEL PUMP
INTERSECT
La siguiente instrucción permite obtener los registros que se encuentran
simultáneamente en las tablas orders_list1 y orders_list2:
SELECT part
FROM orders_list1
INTERSECT
SELECT part
FROM orders_list2
PART
TAILPIPE
Estos dos tipos difieren en el número de registros sobre los que pueden actuar. Una
función escalar retorna un único registro, de todos los registros de la tabla o vista sobre la que
se ha efectuado la consulta; una función agregada retorna un único registro, de un grupo de
registros sobre los que se ha efectuado la consulta.
campo1 campo2
-15 15.76
2.2.1.1 ABS
Propósito Retorna el valor absoluto de n.
Valor absoluto
11
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
15
2.2.1.2 CEILING
Propósito Retorna el entero más pequeño mayor o igual que n.
Ceiling
16
2.2.1.3 FLOOR
Propósito Retorna el entero mayor que sea igual o menor que n.
Floor
15
2.2.1.4 ROUND
Sintaxis ROUND(n[,m])
Propósito Retorna n redondeado m lugares a la derecha del punto decimal;
Round
15.80
2.2.1.5 SIGN
Sintaxis SIGN(n)
Propósito Si n<0, la función retorna –1; si n=0, la función retorna 0; si n>0, la función
retorna 1.
Signo
-1
Minúsculas
mr. scott mcmillan
12
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
LTRIM
Sintaxis LTRIM(char)
Propósito Devuelve una expresión de caracteres después de quitar los espacios en blanco
a la izquierda.
LTRIM example
LAST WORD
RTRIM
Sintaxis RTRIM(char)
Propósito RTRIM trabaja de forma similar a LTRIM, la única diferencia es que RTRIM es
por la derecha y LTRIM es por la izquierda.
RTRIM e.g
BROWNING
SUBSTRING
Sintaxis SUBSTRING(char, m [,n])
Propósito Retorna una porción de una cadena de caracteres, comenzando en el carácter
m con n caracteres de longitud.
Subs
CD
UPPER
Sintaxis UPPER(char)
Propósito Retorna char con todas las letras en mayúsculas.
Mayúsculas
LARGE
ASCII
Sintaxis ASCII(char)
Propósito Retorna la representación decimal de la primera letra de la cadena de
caracteres.
ASCII('Q')
13
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
81
CHAR
Sintaxis CHAR(número)
Propósito Retorna el caracter equivalente al valor del código ASCII introducido.
CHAR(81)
Q
LEN
Sintaxis LEN(char)
Propósito Retorna el tamaño de char en caracteres. Si char es del tipo CHAR, incluye los
espacios en blanco.
Longitud
7
2.2.3.1 DATEADD
Sintaxis DATEADD(datepart, number, date)
Propósito Incrementa una fecha en la cantidad indicada
Nueva fecha
2003-01-01 00:00:00.000
14
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
2.2.3.2 DATEDIFF
Sintaxis DATEDIFF(datepart, date1, date2)
Propósito Muestra la diferencia entre dos fechas dadas en la unidad de tiempo
especificada en datepart. El resultado es positivo si date2 es mayor que date1.
Diferencia
5
2.2.3.3 DATENAME
Sintaxis DATENAME(datepart, date)
Propósito Retorna el valor en formato cadena de la parte de fecha especifica en datepart.
Mes
Mayo
Dia
1
2.2.3.4 DATEPART
Sintaxis DATEPART(datepart, date)
Propósito Tiene un funcionamiento similar a DATENAME, pero siempre retorna un valor
entero.
Mes
7
2.2.3.5 GETDATE
Sintaxis GETDATE()
Propósito Devuelve la fecha y hora actual del sistema.
Fecha actual
2002-11-10 11:31:27.513
15
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
2.2.4.1 CONVERT
Sintaxis CONVERT(datatype [(length)], expression [, style])
Propósito Permite convertir unos tipos de datos en otros.
, donde:
expression
Es cualquier expresión válida de Microsoft SQL Server.
data_type
Es el tipo de datos de destino proporcionado por el sistema.
length
Es un parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o
varbinary.
style
Es el estilo del formato de fecha que se utiliza para convertir datos datetime o
smalldatetime en datos de cadenas de caracteres.
16
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Fecha actual
10/11/2002
Ejemplo2 SELECT 'El precio del libro ' + title + ' es ' + CONVERT(varchar(10), price)
“Precio” FROM titles
Precio
El precio del libro The Busy Executive's Database Guide es 19.99
El precio del libro Cooking with Computers: Surreptitious Balance Sheets es 11.95
DISTINCT Esta opción implica que solo se consideren los valores que son distintos.
ALL Esta opción implica que consideren todos los valores, incluidos los duplicados.
Todas las funciones agrupadas con la excepción de COUNT(*) ignoran los nulos.
2.2.5.1 AVG
Sintaxis AVG([DISTINCT|ALL] n)
Propósito Retorna la media del valor de n.
Average
2077.21429
2.2.5.2 COUNT
Sintaxis COUNT({* | [DISTINCT|ALL] expr})
Propósito Retorna el número de registros en una consulta.
17
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Si se especifica expr, esta función retorna los registros en los cuales expr es no
nula. También se pueden contar todas las columnas o solamente aquellas que
sean distintas.
2.2.5.3 MAX
Sintaxis MAX(expr)
Propósito Retorna el valor máximo de expr.
Maximum
5000
2.2.5.4 MIN
Sintaxis MIN(expr)
Propósito Retorna el valor mínimo de expr.
Earliest
17-DEC-80
2.2.5.5 STDEV
Sintaxis STDEV([DISTINCT|ALL] x)
Propósito Retorna la desviación estándar de x.
Deviation
1182.50322
18
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
2.2.5.6 SUM
Sintaxis SUM([DISTINCT|ALL] n)
Propósito Retorna la suma de los valores de n.
Total
29081
2.2.5.7 VARIANCE
Sintaxis VARIANCE([DISTINCT|ALL]x)
Propósito Retorna la varianza de x.
Variance
1389313.87
19
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
3 Comandos
3.1.1 SELECT
Se utiliza para recibir datos de una o más tablas, objetos de una tabla, vistas y objetos
de una vista. Para poder ejecutar este comando es necesario que el objeto se encuentre en
nuestro propio esquema o tener el privilegio SELECT sobre el objeto. La sintaxis es la siguiente:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Ejemplo 1
Ejemplo 2
SELECT *
FROM emp
WHERE job = ‘SALESMAN’
Ejemplo
20
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
FROM titles
▪ Constantes.
▪ Funciones agrupadas.
Ejemplo
Ejemplo
21
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 2
Para ejecutar un join, SQL Server combina parejas de registros, cada uno de una tabla,
para los cuales la condición que evalúa el join es verdadera.
Para ejecutar un join de tres o más tablas, SQL Server primero hace el join de dos de
las tablas, y con la tabla resultante realiza el join con la tercera tabla, en caso de haber más
tablas se seguiría haciendo de la misma manera.
INNER JOINS
Un inner join o combinación interna es una combinación que sólo muestra las filas que
tienen un elemento coincidente en las dos tablas combinadas.
Nota Las columnas que contienen NULL no coinciden con ningún valor cuando se crea
una combinación interna y, por tanto, se excluyen del conjunto de resultados. Los valores
nulos no coinciden con otros valores nulos.
Existen dos sintaxis para la realización de un inner join, ambas dentro del estándar
ANSI SQL.
Sintaxis 1
Sintaxis 2
22
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 1 (Sintaxis 1)
Ejemplo 2 (Sintaxis 2)
SELF JOINS
Un self join es un join de una tabla consigo misma. Esta tabla aparece dos veces en la
cláusula FROM.
Sintaxis 1
Sintaxis 2
Ejemplo 1 (Sintaxis 1)
Ejemplo 2 (Sintaxis 2)
OUTER JOINS
23
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Un outer join o combinación externa es una combinación que incluye filas aunque
éstas no tengan filas relacionadas en la tabla combinada.
Sintaxis
Ejemplo
La siguiente instrucción SQL ilustra una combinación exterior izquierda entre las tablas titles y
publishers para incluir todos los títulos, incluso los que no tienen información de editor:
SELECT titles.title_id,
titles.title,
publishers.pub_name
FROM titles LEFT OUTER JOIN publishers
ON titles.pub_id
= publishers.pub_id
Sintaxis
Ejemplo
Una combinación externa derecha entre las tablas titles y publishers incluirá todos los
editores, incluso los que no tengan títulos en la tabla titles.
SELECT titles.title_id,
titles.title,
publishers.pub_name
FROM titles RIGHT OUTER JOIN publishers
ON titles.pub_id
= publishers.pub_id
24
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Sintaxis
Ejemplo
Por ejemplo, una combinación externa completa entre titles y publishers muestra todos los
títulos y todos los editores, incluso los que no coincidan en la otra tabla.
SELECT titles.title_id,
titles.title,
publishers.pub_name
FROM titles FULL OUTER JOIN publishers
ON titles.pub_id
= publishers.pub_id
3.1.2 INSERT
Este comando se utiliza para añadir registros a una tabla o una vista. La sintaxis es la
siguiente:
INSERT [INTO]
{ table_name
| view_name
}
{ [ ( column_list ) ]
{ VALUES
( { DEFAULT | NULL | expression } [ ,...n] )
| derived_table
| execute_statement
}
}
, donde:
[INTO]
Es una palabra clave opcional que se puede utilizar entre INSERT y la tabla de destino.
table_name
Es el nombre de la tabla que va a recibir los datos.
view_name
25
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Se trata del nombre y alias opcional de una vista. La vista a la que hace
referencia view_name debe ser actualizable.
(column_list)
Se trata de una lista de una o más columnas en las que se insertarán los datos;
column_list debe estar entre paréntesis y delimitada con comas.
VALUES
Presenta la lista de valores de datos que se van a insertar. Debe haber un valor de
datos para cada columna definida en column_list (si se especificó) o en la tabla. La lista de
valores debe estar entre paréntesis.
Si los valores de la lista VALUES no están en el mismo orden que las columnas de la
tabla o no tienen un valor para cada columna de la tabla, debe utilizarse column_list para
especificar explícitamente la columna que almacena cada valor de entrada.
DEFAULT
Exige que SQL Server cargue el valor predeterminado definido para una columna. Si no
hay un valor predeterminado para la columna y ésta permite el valor NULL, se inserta NULL.
Para una columna definida con el tipo de datos timestamp, se inserta el siguiente valor
timestamp. DEFAULT no es válido para una columna de identidad.
expression
Es una constante, variable o expresión. La expresión no puede contener una
instrucción SELECT o EXECUTE.
derived_table
Se trata de cualquier instrucción SELECT válida que devuelva filas con los datos que se
van a cargar en la tabla.
execute_statement
Se trata de cualquier instrucción EXECUTE válida que devuelva datos con instrucciones
SELECT o READTEXT.
Si execute_statement se utiliza con INSERT, cada conjunto de resultados debe ser
compatible con las columnas de la tabla o de las especificadas en column_list. Se puede utilizar
execute_statement para ejecutar procedimientos almacenados en el mismo servidor o en un
servidor remoto. Se ejecuta el procedimiento del servidor remoto, se devuelven los conjuntos
de resultados al servidor local y se cargan en la tabla del servidor local.
Ejemplo 1
Una instrucción INSERT sencilla.
Ejemplo 2
Insertar datos que no están en el mismo orden que las columnas.
26
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 3
Insertar datos con menos valores que columnas.
Ejemplo 4
Insertar fechas. Antes de insertar una fecha es necesario indicarle a SQL Server el formato de
fecha que se va a utilizar. Para ello se utiliza la sentencia SET DATEFORMAT, siendo los valores
permitidos: mdy, ymd, dym, dmy, myd e ydm.
3.1.3 UPDATE
Se utiliza para cambiar los valores de los registros de una tabla o una vista. La sintaxis
es la siguiente:
UPDATE
{
table_name
| view_name
}
SET
{ column_name = { expression | DEFAULT | NULL}
}
, donde:
table_name
Es el nombre de la tabla que va a recibir los datos.
view_name
Se trata del nombre y alias opcional de una vista. La vista a la que hace referencia
view_name debe ser actualizable.
SET
Especifica la lista de nombres de columnas o variables que se van a actualizar.
column_name
Es una columna que contiene los datos que se van a cambiar. column_name se debe
encontrar en la tabla o en la vista especificadas en la cláusula UPDATE.
expression
27
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Es una variable, un valor literal, una expresión o una instrucción subSELECT entre
paréntesis que devuelve un solo valor.
DEFAULT
Especifica que el valor predeterminado definido para la columna debe sustituir al valor
existente en la columna. También se puede utilizar para cambiar la columna a NULL si no tiene
valor predeterminado y en su definición se especifica que puede aceptar valores nulos.
Ejemplo 1
Actualiza toda la tabla.
UPDATE publishers
SET city = 'Atlanta', state = 'GA'
Ejemplo 2
Actualiza los registros que cumplan la condición establecida en la clausula WHERE.
UPDATE authors
SET state = 'PC', city = 'Bay City'
WHERE state = 'CA' AND city = 'Oakland'
3.1.4 DELETE
Se utiliza para borrar datos de una tabla o de una vista basada en una tabla. La sintaxis
es la siguiente:
DELETE
[FROM ]
{ table_name
| view_name
}
[ WHERE
< search_condition >
]
,donde:
FROM
Se trata de una palabra clave opcional que se puede utilizar entre la palabra clave
DELETE y el destino table_name o view_name.
table_name
Se trata del nombre de la tabla de la que se van a quitar las filas.
view_name
Es el nombre de una vista. La vista a la que hace referencia view_name debe poderse
actualizar.
28
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 1
DELETE authors
Ejemplo 2
Quita todas las filas de una tabla sin registrar las eliminaciones de cada fila individual.
TRUNCATE TABLE es funcionalmente idéntica a la instrucción DELETE sin una cláusula WHERe,
pero TRUNCATE TABLE es más rápida y utiliza menos recursos de los registros de transacciones
y de sistema que DELETE. Además TRUNCATE TABLE reinicia el contador utilizado por las
identidades.
No se puede utilizar TRUNCATE TABLE en una tabla a la que haga referencia una
restricción FOREIGN KEY. La sintaxis es la siguiente:
,donde:
table_name
Se trata del nombre de la tabla de la que se van a quitar todas las filas.
Ejemplo 1
29
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
, con:
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
, donde:
database_name
Es el nombre de la nueva base de datos. Los nombres de base de datos deben ser
únicos en un servidor y pueden tener un máximo de 128 caracteres.
ON
Especifica que los archivos de disco utilizados para almacenar la parte de datos de la
base de datos (archivos de datos) se han definido explícitamente. La palabra clave va seguida
de una lista separada por comas de elementos <filespec> que definen los archivos de datos del
grupo de archivos principal.
n
Es un marcador de posición que indica que se pueden especificar múltiples archivos
para la nueva base de datos.
LOG ON
Especifica que los archivos del disco utilizados para almacenar el registro de la base de
datos (archivos de registro) se han definido explícitamente. La palabra clave va seguida de una
lista separada por comas de elementos <filespec> que definen los archivos de registro. Si no se
especifica LOG ON, se crea automáticamente un único archivo de registro con un nombre
generado por el sistema y un tamaño que es el 25 por ciento de la suma de los tamaños de
todos los archivos de datos de la base de datos.
30
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
PRIMARY
Especifica que la lista <filespec> asociada define el archivo principal. El grupo de
archivos principal contiene todas las tablas del sistema de base de datos. La primera entrada
<filespec> del grupo de archivos principal pasa a ser el archivo principal, que es el archivo que
contiene el inicio lógico de la base de datos y las tablas del sistema. Si no se especifica
PRIMARY, el primer archivo enumerado en la instrucción CREATE DATABASE se convierte en el
archivo principal.
NAME
Especifica el nombre lógico del archivo definido por <filespec>.
logical_file_name
Es el nombre utilizado para hacer referencia al archivo en las instrucciones Transact-
SQL que se ejecuten después de que se haya creado la base de datos. logical_file_name debe
ser único en la base de datos y debe seguir las reglas de los identificadores.
FILENAME
Especifica el nombre de archivo del sistema operativo del archivo definido por
<filespec>.
'os_file_name'
Es la ruta de acceso y nombre de archivo que el sistema operativo utiliza cuando crea
el archivo físico definido por <filespec>. La ruta de acceso de os_file_name debe especificar un
directorio en una instancia de SQL Server.
SIZE
Especifica el tamaño del archivo definido en <filespec>. Cuando en <filespec> no se
especifica un parámetro SIZE para el archivo principal, SQL Server utiliza el tamaño del archivo
principal de la base de datos model. Cuando en <filespec> no se especifica un parámetro SIZE
para un archivo secundario o de registro, SQL Server hace el archivo de 1 MB.
size
Es el tamaño inicial del archivo definido en <filespec>. Se pueden utilizar los sufijos
kilobyte (KB), megabyte (MB), gigabyte (GB) o terabyte (TB). El valor predeterminado es MB. El
valor mínimo de size es 512 KB.
MAXSIZE
Especifica el tamaño máximo al que puede aumentar el archivo definido en <filespec>.
max_size
Es el tamaño máximo al que puede aumentar el archivo definido en <filespec>. Se
pueden utilizar los sufijos kilobyte (KB), megabyte (MB), gigabyte (GB) o terabyte (TB). El valor
predeterminado es MB. Si max_size no se especifica, el archivo aumenta hasta que el disco
esté lleno.
UNLIMITED
Especifica que el archivo definido en <filespec> aumenta hasta que el disco esté lleno.
FILEGROWTH
Especifica el incremento de crecimiento del archivo definido en <filespec>. El valor
FILEGROWTH de un archivo no puede exceder del valor MAXSIZE.
31
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
growth_increment
Es la cantidad de espacio que se agrega al archivo cada vez que se necesita más
espacio. Un valor 0 indica que no hay crecimiento. El valor se puede especificar en MB, KB, GB,
TB o bien como un porcentaje (%). Si se especifica un número sin sufijos el valor
predeterminado es MB. Si no se especifica FILEGROWTH, el valor predeterminado es 10 por
ciento, y el valor mínimo es 64 KB.
Ejemplo 2 Crear una base de datos que especifica los archivos de datos.
En este ejemplo se crea una base de datos llamada Products y se especifica un único
archivo. El archivo especificado se convierte en el archivo principal y se crea automáticamente
un archivo de registro de transacciones de 1 MB. Como no se especifican MB ni KB en el
parámetro SIZE del archivo principal, se asigna en megabytes. Ya que no existe <filespec> para
el archivo de registro de transacciones, éste no tiene MAXSIZE y puede crecer hasta llenar todo
el espacio disponible en el disco.
Ejemplo 3 Crear una base de datos que especifica los archivos de datos y de registro de
transacciones.
Este ejemplo crea una base de datos llamada Sales. Debido a que no se utiliza la
palabra clave PRIMARY, el primer archivo (Sales_dat) se convierte en el archivo principal.
Como no se especifican MB ni KB en el parámetro SIZE del archivo Sales_dat, de forma
predeterminada utiliza MB y el tamaño se asigna en megabytes. El tamaño del archivo
Sales_log se asigna en megabytes porque se ha indicado explícitamente el sufijo MB en el
parámetro SIZE.
32
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
, donde:
database
Es el nombre de la base de datos cambiada.
ADD FILE
Especifica que se está agregando un archivo.
ADD LOG FILE
Especifica que se agrega un archivo de registro a la base de datos indicada.
REMOVE FILE
Quita la descripción del archivo de las tablas del sistema de base de datos y elimina el
archivo físico. El archivo no puede eliminarse a menos que esté vacío.
MODIFY FILE
Especifica el archivo determinado que se debe modificar, incluidas las opciones
FILENAME, SIZE, FILEGROWTH y MAXSIZE. NAME debe especificarse en <filespec> para
identificar el archivo que debe modificarse. Si se especifica SIZE, el nuevo tamaño debe ser
mayor que el tamaño actual del archivo. FILENAME sólo puede especificarse para los archivos
de la base de datos tempdb y el nombre nuevo no surte efecto hasta que se reinicie Microsoft
SQL Server.
Para modificar el nombre lógico de un archivo de datos o de un archivo de registro,
especifique en NAME el nombre lógico de archivo que se va cambiar y en NEWNAME el
nombre lógico de archivo nuevo.
De esta forma:
33
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
34
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
, con:
< column_definition > ::= { column_name data_type }
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment )] ]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]
, con:
< column_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
]
| CHECK
( logical_expression )
}
, con:
< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
35
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
, donde:
table_name
Es el nombre de la nueva tabla. Los nombres de tablas se deben ajustar a las reglas
para los identificadores. table_name puede contener un máximo de 128 caracteres, excepto
para los nombres de tablas temporales locales (nombres precedidos con un signo numérico
simple (#)) que no pueden exceder de 116 caracteres.
column_name
Es el nombre de una columna de la tabla. Los nombres de columna deben cumplir las
reglas de los identificadores y deben ser únicos en la tabla.
data_type
Especifica el tipo de datos de la columna.
DEFAULT
Especifica el valor predeterminado suministrado para la columna.
constant_expression
Es una constante, NULL o una función del sistema utilizados como el valor
predeterminado de una columna.
IDENTITY
Indica que la nueva columna es una columna identidad. Las columnas de identidad se
utilizan normalmente junto con restricciones PRIMARY KEY para que actúen como
identificador exclusivo de fila para la tabla. La propiedad IDENTITY puede asignarse a las
columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0). Sólo se puede crear una
columna de identidad por tabla. Es necesario especificar la inicialización y el incremento, o no
especificar ninguno de los dos. Si no se especifica ninguno, el valor predeterminado es (1,1).
seed
Es el valor que se utiliza para la primera fila cargada en la tabla.
increment
Es el valor incremental que se agrega al valor de identidad de la anterior fila cargada.
ROWGUIDCOL
Indica que la nueva columna es una columna de identificador exclusivo global de fila.
Únicamente se puede designar una columna uniqueidentifier por cada tabla como la columna
ROWGUIDCOL. La propiedad ROWGUIDCOL se puede asignar únicamente a una columna
uniqueidentifier.
CONSTRAINT
36
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Es una palabra clave opcional que indica el principio de la definición de una restricción
PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY o CHECK. Las restricciones son propiedades
especiales que exigen la integridad de los datos y pueden crear índices para la tabla y sus
columnas.
constraint_name
Es el nombre de una restricción. Los nombres de restricción deben ser únicos en una
base de datos.
NULL | NOT NULL
Son palabras clave que determinan si se permiten o no valores NULL en la columna.
PRIMARY KEY
Es una restricción que exige la integridad de entidad para una o varias columnas dadas
a través de un índice único. Sólo se puede crear una restricción PRIMARY KEY por cada tabla.
UNIQUE
Es una restricción que proporciona la integridad de entidad para una o varias columnas
dadas a través de un índice único. Una tabla puede tener varias restricciones UNIQUE.
CLUSTERED | NONCLUSTERED
Son palabras clave que indican que se ha creado un índice agrupado o no agrupado
para la restricción PRIMARY KEY o UNIQUE. De forma predeterminada, el valor de las
restricciones PRIMARY KEY es CLUSTERED, y el de las restricciones UNIQUE es NONCLUSTERED.
Sólo se puede especificar CLUSTERED para una única restricción de una instrucción
CREATE TABLE
FOREIGN KEY...REFERENCES
Es una restricción que proporciona integridad referencial para los datos de la columna
o columnas. Las restricciones FOREIGN KEY requieren que cada valor de la columna exista en la
columna de referencia correspondiente de la tabla a la que se hace referencia. Las
restricciones FOREIGN KEY pueden hacer referencia sólo a columnas que sean restricciones
PRIMARY KEY o UNIQUE en la tabla de referencia.
ref_table
Es el nombre de la tabla a la que hace referencia la restricción FOREIGN KEY.
(ref_column[,...n])
Es una columna o lista de columnas de la tabla a la que hace referencia la restricción
FOREIGN KEY.
ON DELETE {CASCADE | NO ACTION}
Especifica qué acción tiene lugar en una fila de la tabla creada, si esa fila tiene una
relación referencial y la fila a la que hace referencia se elimina en la tabla primaria. El valor
predeterminado es NO ACTION.
Si se especifica CASCADE y se elimina una fila de la tabla primaria, también se elimina
la fila de la tabla desde donde se hace referencia. Si se especifica NO ACTION, SQL Server
genera un error y se deshace la acción de eliminación de la fila en la tabla primaria.
ON UPDATE {CASCADE | NO ACTION}
37
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Especifica qué acción tiene lugar en una fila de la tabla creada, si esa fila tiene una
relación referencial y la fila a la que hace referencia se actualiza en la tabla primaria. El valor
predeterminado es NO ACTION.
Si se especifica CASCADE, la fila se actualiza en la tabla de referencia si esa fila se
actualiza en la tabla primaria. Si se especifica NO ACTION, SQL Server genera un error y se
deshace la acción de actualización en la fila de la tabla primaria.
CHECK
Es una restricción que exige la integridad del dominio al limitar los valores posibles que
se pueden escribir en una o varias columnas.
logical_expression
Es una expresión lógica que devuelve TRUE o FALSE.
column
Es una columna o lista de columnas, entre paréntesis, que se utiliza en las restricciones
de tabla para indicar las columnas que se están utilizando en la definición de la restricción.
[ASC | DESC]
Especifica cómo se ordenan la columna o las columnas que participan en las
restricciones de la tabla. El valor predeterminado es ASC.
n
Es un marcador de posición que indica que el elemento anterior se puede repetir n
veces.
Ejemplo 2 Ejemplo con clave primaria, restricciones check y valor por defecto.
38
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
, con:
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ ( seed , increment)] ]
]
39
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
[ ROWGUIDCOL ]
[ < column_constraint > ] [ ...n ]
, con:
< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
]
| CHECK ( logical_expression )
}
,con:
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ,...n ] ) }
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| DEFAULT constant_expression
[ FOR column ] [ WITH VALUES ]
| CHECK ( search_conditions )
}
,donde:
table
Es el nombre de la tabla que se va a modificar.
ALTER COLUMN
Especifica que la columna dada va a cambiarse o modificarse.
La columna alterada:
• No puede ser una columna con un tipo de datos text, image, ntext o timestamp.
• No puede ser la columna ROWGUIDCOL de la tabla.
• No puede ser una columna calculada o utilizarse en una columna calculada.
40
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
• No puede utilizarse en un índice, a menos que la columna sea del tipo de datos
varchar, nvarchar, o varbinary, el tipo de datos no se cambie y el nuevo tamaño sea
igual al tamaño anterior o mayor que éste.
• No puede utilizarse en una restricción PRIMARY KEY o [FOREIGN KEY] REFERENCES.
• No puede utilizarse en una restricción CHECK o UNIQUE, excepto si se permite alterar
la longitud de una columna de longitud variable empleada en una restricción CHECK o
UNIQUE.
• No puede estar asociada a un valor predeterminado, excepto que se permita cambiar
la longitud, precisión o escala de una columna si no se cambia el tipo de datos.
column_name
Es el nombre de la columna que se va a alterar, agregar o quitar.
new_data_type
Es el nuevo tipo de datos de la columna alterada.
precision
Es la precisión del tipo de datos especificado.
scale
Es la escala del tipo de datos especificado.
NULL | NOT NULL
Especifica si la columna puede aceptar valores NULL. Las columnas que no permiten
valores NULL sólo se pueden agregar con ALTER TABLE si tienen especificado un valor
predeterminado. Una columna nueva agregada a una tabla debe permitir valores NULL o debe
especificarse con un valor predeterminado.
[ {ADD | DROP} ROWGUIDCOL ]
Especifica que la propiedad ROWGUIDCOL se agrega a la columna indicada o se quita
de ella.
ADD
Especifica que se agregan una o más definiciones de columna, definiciones de
columnas calculadas o restricciones de tabla.
n
Es un marcador de posición que indica que el elemento anterior se puede repetir n
veces.
WITH CHECK | WITH NOCHECK
Especifica si los datos de la tabla se han validado o no contra una restricción FOREIGN
KEY o CHECK recién agregada o habilitada de nuevo. Si no se especifica, se asume WITH CHECK
para las restricciones nuevas y WITH NOCHECK para las restricciones que se han habilitado
otra vez.
Las cláusulas WITH CHECK y WITH NOCHECK no pueden utilizarse en restricciones
PRIMARY KEY o UNIQUE.
Si no desea volver a comprobar las nuevas restricciones CHECK o FOREIGN KEY contra
los datos existentes, utilice WITH NOCHECK. No se recomienda que haga esto, excepto en
41
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
casos muy contados. La nueva restricción se evaluará en todas las actualizaciones futuras. Las
infracciones de restricción que se supriman mediante WITH NOCHECK cuando se agrega la
restricción, pueden hacer que fallen las actualizaciones futuras si actualizan filas con datos que
no cumplan la restricción.
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Especifica que constraint_name o column_name se ha quitado de la tabla. Una
columna no puede quitarse si:
• Es una columna duplicada.
• Se utiliza en un índice.
• Se utiliza en una restricción CHECK, FOREIGN KEY, UNIQUE o PRIMARY KEY.
• Está asociada con un valor predeterminado definido con la palabra clave DEFAULT o
enlazada a un objeto predeterminado.
• Está enlazada a una regla.
{ CHECK | NOCHECK} CONSTRAINT
Especifica si constraint_name está habilitado o deshabilitado. Cuando está
deshabilitado, las posteriores inserciones o actualizaciones de la columna no se validan con las
condiciones de la restricción. Esta opción sólo se puede utilizar con las restricciones FOREIGN
KEY y CHECK.
ALL
Especifica que todas las restricciones están deshabilitadas con la opción NOCHECK o
habilitadas con la opción CHECK.
{ENABLE | DISABLE} TRIGGER
Especifica si trigger_name está activado o desactivado. Aunque un desencadenador
esté desactivado, sigue estando definido para la tabla; sin embargo, si se ejecutan las
instrucciones INSERT, UPDATE o DELETE en la tabla, las acciones del desencadenador no se
ejecutan hasta que éste se vuelva a activar.
ALL
Especifica si todos los desencadenadores de la tabla están activados o desactivados.
trigger_name
Especifica el nombre del desencadenador que se va a activar o desactivar.
column_name data_type
Es el tipo de datos de la nueva columna.
DEFAULT
Es una palabra clave que especifica el valor predeterminado de la columna.
IDENTITY
Especifica que la nueva columna es una columna de identidad.
Seed
Es el valor que se utiliza para la primera fila cargada en la tabla.
Increment
Es el valor incremental que se agrega al valor de identidad de la anterior fila cargada.
CONSTRAINT
42
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
43
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 4 Agregar una columna que acepta NULL con valores predeterminados
44
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo
, con:
UNIQUE
Crea un índice único (es decir, que no permite que dos filas tengan el mismo valor de
índice) en una tabla o vista.
CLUSTERED
Crea un objeto en el que el orden físico de las filas es el mismo que el orden indexado
de las filas. Una tabla o vista permite un índice agrupado al mismo tiempo.
NONCLUSTERED
Crea un objeto que especifica la ordenación lógica de una tabla. Con un índice no
agrupado, el orden físico de las filas es independiente del orden indexado.
index_name
Es el nombre del índice. Los nombres de índice deben seguir las reglas de los
identificadores.
table
Es la tabla que contiene la columna o columnas que deben indexarse. Especificar los
nombres de la base de datos y del propietario de la tabla es opcional.
column
45
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 2 Este ejemplo crea un índice en la columna employeeID de la tabla emp_pay, que
exige que sea único. Este índice ordena físicamente los datos del disco porque se especifica la
cláusula CLUSTERED.
Ejemplo 3 En este ejemplo se crea un índice compuesto utilizando las columnas orderID y
employeeID de la tabla order_emp.
table
Es la tabla en que está ubicada la columna indexada.
index
Es el nombre del índice que se va a quitar. Los nombres de los índices se deben ajustar
a las reglas de los identificadores.
n
Se trata de un marcador de posición que indica que se pueden especificar varios
índices.
46
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
, con:
view_name
Es el nombre de la vista. Los nombres de las vistas deben cumplir las reglas de los
identificadores. Especificar el propietario de la vista es opcional.
column
Es el nombre que se va a utilizar para una columna en una vista. Sólo es necesario
asignar un nombre a una columna en CREATE VIEW cuando una columna proviene de una
expresión aritmética, una función o una constante; cuando dos o más columnas puedan tener
el mismo nombre (normalmente, debido a una combinación); o cuando una columna de una
vista recibe un nombre distinto al de la columna de la que proviene. Los nombres de columna
se pueden asignar también en la instrucción SELECT.
Si no se especifica column, las columnas de la vista adquieren los mismos nombres que
las columnas de la instrucción SELECT.
n
Es un marcador de posición que indica que se pueden especificar varias columnas.
AS
Son las acciones que va a llevar a cabo la vista.
select_statement
Es la instrucción SELECT que define la vista. Puede utilizar más de una tabla y otras
vistas.
Una vista no tiene por qué ser un simple subconjunto de filas y de columnas de una
tabla determinada. Una vista se puede crear con más de una tabla o con otras vistas, mediante
una cláusula SELECT de cualquier complejidad.
Se pueden utilizar funciones en select_statement y puede utilizar varias instrucciones
SELECT separadas con UNION o UNION ALL.
WITH CHECK OPTION
Exige que todas las instrucciones de modificación de datos ejecutadas contra la vista se
ajusten a los criterios establecidos en select_statement. Cuando una fila se modifica mediante
una vista, WITH CHECK OPTION garantiza que los datos permanecerán visibles en toda la vista
después de confirmar la modificación.
Ejemplo 1 El ejemplo siguiente crea una vista con una instrucción SELECT sencilla. Una vista
sencilla resulta útil cuando una combinación de columnas se consulta frecuentemente.
47
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Ejemplo 2 Este ejemplo muestra una definición de vista que incluye una función integrada.
Cuando se utilizan funciones, la columna que se deriva debe incluir un nombre de columna en
la instrucción CREATE VIEW.
Ejemplo
48
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
SQL Server funciona en varios modos de transacción. Nosotros vamos a hablar de dos
de ellos:
• Transacciones de confirmación automática
Cada instrucción individual es una transacción. Este modo de confirmación automática
es el que permite el uso de claves extranjeras, manteniéndose la integridad referencial en las
operaciones INSERT, UPDATE y DELETE.
• Transacciones explícitas
Cada transacción se inicia explícitamente con la instrucción BEGIN TRANSACTION y se
termina explícitamente con una instrucción COMMIT o ROLLBACK.
La sintaxis es la siguiente:
49
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
Marca el final de una transacción correcta. COMMIT TRANSACTION hace que todas las
modificaciones de datos desde el inicio de la transacción sean parte permanente de la base de
datos y libera los recursos de la transacción.
Es responsabilidad del programador decidir cuándo debe ejecutarse la operación
COMMIT. No se puede revertir una transacción después de ejecutar una instrucción COMMIT
TRANSACTION, porque las modificaciones sobre los datos ya son parte permanente de la base
de datos.
La sintaxis es la siguiente:
BEGIN TRANSACTION
COMMIT TRANSACTION
Revierte una transacción. Puede usar ROLLBACK TRANSACTION para borrar todas las
modificaciones de datos realizadas desde el inicio de la transacción. También libera los
recursos que mantiene la transacción.
La sintaxis es la siguiente:
50
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024
BEGIN TRAN
ROLLBACK TRAN
51