Página 1 SQL SERVER 2008 -- Crear una Tabla CREATE TABLE nombre_Tabla ( nombreColumna tipoDatos [COLLATE<nombreIntercalación>] [NULL | NOT NULL] | nombreColumna AS expresiónColumnaCalculada [,….n] ) USE tempdb GO CREATE TABLE clientes ( cli_Nombre char(30), cli_teléfono char(12), cod_emp char(4) ) CREATE TABLE clientes (Nombre char(30), teléfono char(12), cod_emp char(4)) -- Usando NULL / NOT NULL y COLLATE USE tempdb GO CREATE TABLE Autos ( Aut_placa char(30) NOT NULL, Aut_Marca char(12) COLLATE Greek_CI_AS_KS NOT NULL, Aut_color char(4) NULL ) INSERT INTO Autos VALUES ('AB2345','LADA','Azul ') SELECT * FROM Autos -- Tipos de Datos USE tempdb GO CREATE TABLE alumno (Carne char(8), Nombre varchar(20), Fecha_Nac datetime, Sexo bit, Ciclo smallint, Foto image, Indice numeric(4,2), Observaciones text) Página 2 INSERT INTO alumno (Carne, Nombre, Fecha_Nac,Sexo,Ciclo,Indice,Observaciones) VALUES ('20003454','Carlos Angulo','12/31/99', 0 , 1 , 21.34,'este es primer ejemplo') INSERT INTO alumno (Carne, Nombre, Fecha_Nac,Sexo,Ciclo,Indice,Observaciones) VALUES ('20010054','Luisa Rojas','08/01/87', 1 , 2 , 11.03,'este es segundo ejemplo') SELECT * FROM alumno -- Usando una expresión para una columna calculada CREATE TABLE misnotas ( nota1 int NOT NULL, nota2 int NOT NULL, promedio AS (nota1 + nota2)/2 ) GO INSERT INTO misnotas values(7, 4) SELECT * FROM misnotas drop table misnotas -- Usando IDENTITY(Inicio, incremento) CREATE TABLE Clientes1 ( cli_cod smallint IDENTITY(10,1) NOT NULL, cli_nombre char(8) ) INSERT INTO Clientes1 (cli_nombre) VALUES ('Ana') INSERT INTO Clientes1 (cli_nombre) VALUES ('Paula') SELECT * FROM Clientes1 drop table Clientes1 CREATE TABLE Clientes1 ( cli_cod smallint IDENTITY NOT NULL, -- Por defecto es (1,1) cli_nombre char(8) ) -- Utilizando un identificador único CREATE TABLE Global_Unico_Dato (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWID(), nombre varchar(60), CONSTRAINT Guid_PK PRIMARY KEY (Guid) ) -- uniqueidentifier: Es un string que representa -- un valor de identificación único global(GUID) -- NEWID(): Es una función que crea un valor único de tipo uniqueidentifier Página 3 INSERT Global_Unico_Dato (nombre) VALUES ( 'Cecilia') INSERT Global_Unico_Dato (nombre) VALUES ( 'Jorge') INSERT Global_Unico_Dato (nombre) VALUES ( 'Luís') SELECT * FROM Global_Unico_Dato sp_helpconstraint Global_Unico_Dato DROP TABLE Global_Unico_Dato -- Ejemplo CREATE TABLE Clientes2 (cli_cod uniqueidentifier NOT NULL DEFAULT NEWID(), cli_nombre varchar(30) NOT NULL, cli_ruc char(8) NULL ) INSERT INTO Clientes2 (cli_nombre, cli_ruc) VALUES ('Ana','23432345') INSERT INTO Clientes2 (cli_nombre, cli_ruc) VALUES ('Paula','76453887') SELECT * FROM Clientes2 drop table Clientes2 -- Claves primarias CREATE TABLE Clientes1 ( cli_id int IDENTITY NOT NULL PRIMARY KEY CLUSTERED, cli_nombre varchar(30) NOT NULL ) EXEC sp_helpconstraint Clientes1 CREATE TABLE clientes2 ( cli_id int IDENTITY NOT NULL CONSTRAINT cli2_pk PRIMARY KEY NONCLUSTERED, cli_nombre varchar(30) NOT NULL, localidad_num smallint NOT NULL ) GO EXEC sp_helpconstraint clientes2 GO Página 4 CREATE TABLE clientes3 ( cli_id int IDENTITY NOT NULL, cli_nombre varchar(30) NOT NULL, CONSTRAINT cli3_PK PRIMARY KEY (cli_id) ) -- CLUSTERED es por defecto GO EXEC sp_helpconstraint clientes3 -- Claves foráneas CREATE TABLE ordenes1 ( orden_id int NOT NULL IDENTITY PRIMARY KEY, cli_id int NOT NULL REFERENCES Clientes1(cli_id), fecha datetime ) EXEC sp_helpconstraint ordenes1 CREATE TABLE ordenes2 ( orden_id int NOT NULL IDENTITY PRIMARY KEY, cli_id int NOT NULL CONSTRAINT fk_ord2_Cli1 REFERENCES Clientes1(cli_id), fecha datetime NULL ) EXEC sp_helpconstraint ordenes2 CREATE TABLE ordenes3 ( orden_id int NOT NULL IDENTITY PRIMARY KEY, cli_id int NOT NULL, fecha datetime NULL, CONSTRAINT fk_ord3_Cli1 FOREIGN KEY (cli_id) REFERENCES Clientes1(cli_id) ) EXEC sp_helpconstraint ordenes3 -- Ejemplo de dos claves foráneas CREATE TABLE clientes4 ( cli_id int IDENTITY NOT NULL CONSTRAINT cli4_pk PRIMARY KEY NONCLUSTERED, cli_nombre varchar(30) NOT NULL, localidad_num smallint NOT NULL Unique ) Página 5 GO CREATE TABLE ordenes4 ( orden_id int NOT NULL IDENTITY CONSTRAINT ORDEN_PK PRIMARY KEY NONCLUSTERED, cli_num int NOT NULL, cli_loc smallint NULL, CONSTRAINT fk_ord4_Cli4ID FOREIGN KEY (cli_num) REFERENCES clientes4 (cli_id), CONSTRAINT fk_ord4_Cli4LO FOREIGN KEY (cli_loc) REFERENCES clientes4 (localidad_num) ) GO EXEC sp_helpconstraint clientes4 EXEC sp_helpconstraint ordenes4 GO -- Ejemplo de Clave primaria doble CREATE TABLE master_clientes ( cli_id int NOT NULL IDENTITY PRIMARY KEY, cli_nombre varchar(50) NOT NULL ) GO CREATE TABLE cliente_localidad ( cli_id int NOT NULL, cli_loc smallint NOT NULL, CONSTRAINT pk_cliente_localidad PRIMARY KEY (cli_id,cli_loc), CONSTRAINT fk_cliente_localidad FOREIGN KEY (cli_id) REFERENCES master_clientes (cli_id) ) CREATE TABLE ordenes5 ( orden_id int NOT NULL IDENTITY PRIMARY KEY, cli_id int NOT NULL, cli_loc smallint NOT NULL, CONSTRAINT fk_orden_master_cli FOREIGN KEY (cli_id) REFERENCES master_clientes (cli_id), CONSTRAINT fk_orden_cli_loc FOREIGN KEY (cli_id, cli_loc) REFERENCES cliente_localidad (cli_id, cli_loc) ) Página 6 -- Valores Únicos CREATE TABLE clientes ( cli_id int NOT NULL, localidad_num smallint NULL UNIQUE NONCLUSTERED, cli_NAME varchar(50) NOT NULL, ) CREATE TABLE clientes ( cli_id int NOT NULL, localidad_num smallint NULL, cli_nombre varchar(50) NOT NULL, CONSTRAINT clientes_unq UNIQUE CLUSTERED (cli_id, localidad_num ) ) CREATE TABLE clientes_localidad2 ( cli_id int NOT NULL, cli_localidad_numero int NOT NULL, CONSTRAINT clientes_localidad_unique UNIQUE (cli_id, cli_localidad_numero) ) -- NONCLUSTERED es por defecto GO EXEC sp_helpconstraint clientes_localidad2 -- Valores por defecto CREATE TABLE ordenes6 ( orden_id int NOT NULL IDENTITY PRIMARY KEY, cli_id int NOT NULL, fecha date DEFAULT (GETDATE()) cli_loc smallint NOT NULL DEFAULT 1, slogin_id char(8) NULL CONSTRAINT def_loginID DEFAULT SUSER_SNAME(), Observaciones text DEFAULT 'Ninguna' CONSTRAINT fk_orden_master_cli FOREIGN KEY (cli_id) REFERENCES master_clientes (cli_id), CONSTRAINT fk_orden_cli_loc FOREIGN KEY (cli_id, cli_loc) REFERENCES clientes_localidad (cli_id, cli_loc) ) SELECT GETDATE() -- Retorna la fecha y hora del sistema actual. SELECT SUSER_SNAME() -- Retorna el Nombre de identificación del login. Página 7 -- Verificando valores CREATE TABLE publicaciones ( pub_cod char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (pub_cod IN ('1389', '0736', '0877', '1622', '1756') OR pub_cod LIKE '99[0-9][0-9]'), -- Del 9900 hasta el 9999 nombre varchar(40) NULL, ciudad varchar(20) NULL, codigo char(2) NULL, pais varchar(30) NULL DEFAULT('PERU') ) INSERT INTO publicaciones (pub_cod, nombre, ciudad, codigo) VALUES ('9923','Anita','Piura','pi') INSERT INTO publicaciones (pub_cod, nombre, ciudad, codigo) VALUES ('1389','Pauli','Sullana','su') SELECT * FROM publicaciones drop table publicaciones CREATE TABLE Trabajos ( Tra_cod smallint IDENTITY(10,5) PRIMARY KEY CLUSTERED, Tra_desc varchar(50) NOT NULL DEFAULT 'Nueva Posición', min_valor tinyint NOT NULL CHECK (min_valor >= 10), max_valor tinyint NOT NULL CHECK (max_valor <= 250) ) INSERT INTO Trabajos (min_valor, max_valor) VALUES (20,45) SELECT * FROM Trabajos drop table Trabajos CREATE TABLE empleado ( emp_id int NOT NULL PRIMARY KEY CHECK (emp_id BETWEEN 0 AND 1000), emp_nombre varchar(30) NOT NULL CONSTRAINT no_numeros CHECK (emp_nombre NOT LIKE '%[0-9]%'), mgr_id int NULL REFERENCES empleado(emp_id), ingreso_fecha datetime NULL CHECK (ingreso_fecha >= CURRENT_TIMESTAMP), ingresado_por int CHECK (ingresado_por IS NOT NULL), CONSTRAINT validar_ingreso_by CHECK (ingresado_por = SUSER_SID(NULL) AND ingresado_por <> emp_id), CONSTRAINT validar_mgr CHECK (mgr_id <> emp_id OR emp_id=1), CONSTRAINT fin_de_mes CHECK (DATEPART(DAY, GETDATE()) < 28) ) GO Página 8 EXEC sp_helpconstraint empleado SELECT CURRENT_TIMESTAMP -- Esta función es equivalente a Getdate() SELECT SUSER_SID() -- Retorna el numero de identificación del "user's login" INSERT INTO empleado(emp_id, emp_nombre, ingreso_fecha, ingresado_por) VALUES (1,'Luisa Reyes',getdate(),3) INSERT INTO empleado VALUES (2,'Federico Otero',1,getdate(),4) INSERT INTO empleado VALUES (7,'Juan Ramos', 1, getdate(),0x0105000000000005150000003A0C5B29A44ACF1B19774D1AE9030000) SELECT * FROM empleado -- Usando la función USER_NAME() para una columna calculada CREATE TABLE mitabladelogin ( Fecha datetime, user1_id int, usuario AS USER_NAME()) SELECT USER_NAME() -- Retorna el Nombre del usuario de la BD que esta en uso INSERT INTO mitabladelogin VALUES (getdate(),'123') SELECT * FROM mitabladelogin