DDL – Lenguaje de Definición de Datos
DDL es usado para crear y administrar las BD y sus objetos, como tablas, procedimientos almacenados, funciones definidas por el usuario, disparadores / triggers, vistas, predeterminados / defaults, índices, reglas y estadísticas. Transact-SQL provee las instrucciones CREATE y DROP para todos estos elementos.
Ejemplo:
Creación de una tabla utilizando la instrucción CREATE TABLE
CREATE TABLE empleado (
CodigoEmp INT IDENTITY PRIMARY KEY,
DNI INT UNIQUE,
NombreEmp NVARCHAR(30) NOT NULL,
Direccion NVARCHAR(50) NOT NULL,
);
Además de las instrucciones CREATE y DROP, se utiliza la instrucción ALTER para modificar las propiedades de algunos de estos objetos (BD, tablas, procedimientos almacenados, funciones definidas por el usuario, triggers y vistas).
Ejemplo:
Adición de una columna utilizando la instrucción ALTER TABLE.
ALTER TABLE empleado ADD fecha_nacimiento DATETIME
En SQL Server, los objetos deben ser únicos sin usuarios. Esto permite a dos usuarios ser dueños de un objeto con el mismo nombre.
Ejemplo:
- A través del Analizador de Consultas conectase al SQL Server con el login sa y ejecutar el siguiente código que:
- crea logins para dos usuarios (login01 y login02 con password en blanco),
- agrega los usuarios (usuario01 y usuario02) a la BD Northwind para estos logins, y
- les concede permiso para crear BD.
USE Northwind
EXEC sp_addlogin 'login01'
EXEC sp_addlogin 'login02'
EXEC sp_adduser 'login01', 'usuario01'
EXEC sp_adduser 'login02', 'usuario02'
GRANT CREATE TABLE TO usuario01
GRANT CREATE TABLE TO usuario02
GO
- A través del Analizador de Consultas abrir otra conexión, pero con el login recientemente creado, login01, y ejecutar el siguiente código:
USE Northwind
CREATE TABLE tabla00 (columna00 int)
GO
- A través del Analizador de Consultas abrir una tercera conexión, usando el login recientemente creado, login02, y ejecutar el siguiente código
USE Northwind
CREATE TABLE tabla00 (columna00 int)
GO
- Finalmente, comprobar que ambas tablas fueron creadas exitosamente. Ejecutar el siguiente código desde la primera conexión (la de login sa).
USE Northwind
PRINT 'usuario01'
SELECT * FROM usuario01.tabla00
PRINT 'usuario02'
SELECT * FROM usuario02.tabla00
Nota:
Tener en cuenta que el nombre de las tablas tiene que ser cualificado con el nombre de su dueño /owner.
Un nombre completamente cualificado posee 4 partes:
Servername.databasename.owner.objectname
Las primeras 3 partes pueden omitirse. Si se especifica sólo el nombre del objeto, SQL Server usa el usuario actual, la BD actual y el servidor local. La primer parte, el servidor local, debe especificarse cuando se trabaja con queries (consultas) distribuidos. La segunda parte, el nombre de la BD, debe especificarse cuando se ejecutan queries que atraviesan varias BD.
Ejemplo:
Instrucción SELECT que es ejecutada en la BD Northwind y que consulta una tabla en la BD Pubs.
USE Northwind
SELECT * FROM Pubs.dbo.Jobs
Finalmente, la tercera parte, el dueño / owner, especifica el dueño del objeto. Es útil en casos en los cuales dos o más usuarios son dueños de un objeto con el mismo nombre (ejemplo anterior).