Script Completo de SQL Server para Creación de Bases de Datos y Tablas
Creación y Configuración de la Base de Datos
Este script inicia configurando el contexto en la base de datos maestra y procede a crear una nueva base de datos llamada sales con archivos de datos y de registro específicos.
use master
create database sales
on primary
(
name='salesdata',
filename='C:\data\salesdata.mdf',
size=10mb,
maxsize=500mb,
filegrowth=25%
)
log on
(
name='saleslog',
filename='C:\data\saleslog.ldf',
size=5mb,
maxsize=100mb,
filegrowth=10%
)
Gestión de Grupos de Archivos (Filegroups)
Se añade un grupo lógico adicional y un archivo secundario para optimizar el almacenamiento de la base de datos.
--- Agregar un grupo lógico adicional a la base de datos
alter database sales
add filegroup secundario
--- Agregar un archivo al grupo lógico nuevo
alter database sales
add file
(
name='salessec',
filename='C:\data\salessec.ndf',
size=10mb,
maxsize=500mb,
filegrowth=25%
) to filegroup secundario
Mantenimiento y Propiedades
Comandos útiles para revisar la estructura, el estado de las propiedades y solucionar problemas comunes como los diagramas de base de datos.
--- Revisar la base de datos
sp_helpdb sales
--- Revisar opciones de la base de datos
select DATABASEPROPERTYEX('sales', 'ISAUTOSHRINK')
alter database sales
set auto_shrink off
--- Cuando no se puede crear el diagrama de base de datos
ALTER AUTHORIZATION ON DATABASE::[sales] TO [sa];
Creación de Tablas (DDL)
Definición de las tablas principales del sistema utilizando sentencias DDL (Data Definition Language), incluyendo llaves primarias y foráneas.
Tabla de Clientes
create table tclient -- create es un DDL
(
id_cliente char(7) not null primary key,
nombre varchar(50) not null,
apater varchar(20) not null,
amater varchar(20) not null,
DNI char(8) null,
telefono char(9) null,
direccion varchar(50) null,
);
Tabla de Productos
create table tproduct
(
id_producto char(8) not null primary key,
nombre varchar(50) not null,
decripcion varchar(50) null,
precio decimal(9,2) not null,
);
Tabla Intermedia (Relación Muchos a Muchos)
create table tproducto_cliente
(
id_cliente char(7) not null,
id_producto char(8) not null,
cantidad int not null,
CONSTRAINT [PK_tproducto_cliente] PRIMARY KEY CLUSTERED
(
[id_producto] ASC,
[id_cliente] ASC
)
);
alter table [tproducto_cliente] add constraint [FK_tproducto_cliente_tproducto] foreign key([id_producto])
references tproduct ([id_producto])
go
alter table [tproducto_cliente] add constraint [FK_tproducto_cliente_tcliente] foreign key ([id_cliente])
references tclient ([id_cliente])
go
Inserción de Datos (INSERT / DML)
Ejemplos de cómo insertar registros utilizando valores directos y el uso de variables declaradas.
-- Inserciones directas
insert into tcliente(codigo, nombre, apellidos, DNI, direccion, telefono)
values('11712300', 'ROMAN', 'SAAVEDRA TORRES', '75712752', 'josue saavedra', '942461263')
insert into tcliente
values('11711500', 'LISBETH', 'SANTILLAN DAVILA', '23423433', 'NO SE', '4221456789')
-- Inserción con variables
declare @codigo char(8)
declare @nombre varchar(50)
declare @apellidos varchar(50)
declare @direccion varchar(50)
declare @DNI char(8)
declare @telefono char(10)
set @codigo = '11712301'
set @nombre = 'ROMAN '
set @apellidos = 'SAAVEDRA TORRES'
set @direccion = 'Josue saavedra'
set @DNI = '75712752'
set @telefono = '9424612638'
insert into tcliente(codigo, nombre, apellidos, direccion, DNI, telefono)
values(@codigo, @nombre, @apellidos, @direccion, @DNI, @telefono)
Consultas y Filtros (SELECT)
Ejemplos de consultas básicas y avanzadas utilizando el operador LIKE para filtrado de patrones en cadenas de texto.
-- Consulta básica de campos específicos
select nombre, apellidos, direccion, codigo, DNI, telefono
from tcliente
-- Ver todos los campos con filtro terminando en 's'
select *
from tcliente
where nombre like '%s'
-- Ver todos los campos con filtro que contengan 's'
select *
from tcliente
where nombre like '%s%'
-- Ver todos los campos con filtro donde la segunda letra sea 's'
select *
from tcliente
where nombre like '_s%'
-- Ver todos los campos con filtro avanzado usando conjuntos
select *
from tcliente
where nombre like '_[a,e]%'