0% encontró este documento útil (0 votos)
7 vistas4 páginas

Sqlserver

El documento contiene un script SQL que elimina una base de datos llamada 'BombaCombustible' si existe, y luego la recrea. Se definen varias tablas para almacenar información sobre clientes, productos, inventario y compras, así como vistas y procedimientos almacenados para gestionar y consultar los datos. Finalmente, se insertan datos de ejemplo y se ejecutan procedimientos y consultas para probar la funcionalidad del sistema.
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas4 páginas

Sqlserver

El documento contiene un script SQL que elimina una base de datos llamada 'BombaCombustible' si existe, y luego la recrea. Se definen varias tablas para almacenar información sobre clientes, productos, inventario y compras, así como vistas y procedimientos almacenados para gestionar y consultar los datos. Finalmente, se insertan datos de ejemplo y se ejecutan procedimientos y consultas para probar la funcionalidad del sistema.
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 DOCX, PDF, TXT o lee en línea desde Scribd

-- Cambiar a master y eliminar base si existe

USE master;
GO
IF DB_ID('BombaCombustible') IS NOT NULL
BEGIN
ALTER DATABASE BombaCombustible SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE BombaCombustible;
END
GO

-- Crear nueva base de datos


CREATE DATABASE BombaCombustible;
GO
USE BombaCombustible;
GO

-- Eliminar objetos si existen


IF OBJECT_ID('Compras', 'U') IS NOT NULL DROP TABLE Compras;
IF OBJECT_ID('Inventario', 'U') IS NOT NULL DROP TABLE Inventario;
IF OBJECT_ID('Productos', 'U') IS NOT NULL DROP TABLE Productos;
IF OBJECT_ID('Clientes', 'U') IS NOT NULL DROP TABLE Clientes;

IF OBJECT_ID('VistaProductosConEnc', 'V') IS NOT NULL DROP VIEW


VistaProductosConEnc;
IF OBJECT_ID('VistaPreciosOrdenados', 'V') IS NOT NULL DROP VIEW
VistaPreciosOrdenados;
IF OBJECT_ID('VistaVentasDetalladas', 'V') IS NOT NULL DROP VIEW
VistaVentasDetalladas;

IF OBJECT_ID('ObtenerTotalCompras', 'P') IS NOT NULL DROP PROCEDURE


ObtenerTotalCompras;
IF OBJECT_ID('ObtenerDatosCliente', 'P') IS NOT NULL DROP PROCEDURE
ObtenerDatosCliente;
GO

-- Crear tabla Clientes: almacena datos del cliente, tipo de vehículo y tipo
de cliente
CREATE TABLE Clientes (
ID INT PRIMARY KEY IDENTITY(1,1),
Nombre VARCHAR(100) NOT NULL,
Cedula VARCHAR(15) UNIQUE NOT NULL,
Telefono VARCHAR(15),
Email VARCHAR(100),
TipoVehiculo VARCHAR(20) CHECK (TipoVehiculo IN ('Carro', 'Motor',
'Camion')),
TipoCliente VARCHAR(20) CHECK (TipoCliente IN ('Regular', 'Corporativo'))
);
GO

-- Crear tabla Productos: define el producto, tipo (ej. Combustible), y


unidad (ej. Galon)
CREATE TABLE Productos (
ID INT PRIMARY KEY IDENTITY(1,1),
Nombre VARCHAR(100) NOT NULL,
Precio DECIMAL(10,2) NOT NULL,
TipoProducto VARCHAR(50) CHECK (TipoProducto IN ('Combustible',
'Lubricante', 'Otro')),
Unidad VARCHAR(10) CHECK (Unidad IN ('Litro', 'Galon'))
);
GO

-- Crear tabla Inventario: almacena la cantidad disponible por producto


CREATE TABLE Inventario (
ProductoID INT PRIMARY KEY,
StockInicial DECIMAL(10,2) NOT NULL,
StockActual DECIMAL(10,2) NOT NULL,
FOREIGN KEY (ProductoID) REFERENCES Productos(ID)
);
GO

-- Crear tabla Compras: cada transacción con su cantidad, descuento y fecha


CREATE TABLE Compras (
ID INT PRIMARY KEY IDENTITY(1,1),
ClienteID INT NOT NULL,
ProductoID INT NOT NULL,
Cantidad DECIMAL(10,2) NOT NULL,
Descuento DECIMAL(10,2) DEFAULT 0 CHECK (Descuento >= 0 AND Descuento <=
100),
Fecha DATETIME DEFAULT GETDATE(),
FOREIGN KEY (ClienteID) REFERENCES Clientes(ID),
FOREIGN KEY (ProductoID) REFERENCES Productos(ID)
);
GO

-- Vista encriptada: oculta el SELECT al usuario final


CREATE VIEW VistaProductosConEnc
WITH ENCRYPTION
AS
SELECT ID, Nombre, Precio, TipoProducto, Unidad FROM Productos;
GO

-- Vista de precios: muestra productos y precios, ordenados externamente al


consultar
CREATE VIEW VistaPreciosOrdenados AS
SELECT Nombre, Precio, Unidad
FROM Productos;
GO

-- Vista de ventas detalladas: une clientes, productos y calcula total pagado


CREATE VIEW VistaVentasDetalladas AS
SELECT
[Link] AS CompraID,
[Link] AS Cliente,
[Link],
[Link],
[Link] AS Producto,
[Link],
[Link],
[Link],
[Link],
[Link],
([Link] * [Link]) * (1 - [Link] / 100.0) AS TotalPagado,
[Link]
FROM Compras c
JOIN Clientes cl ON [Link] = [Link]
JOIN Productos p ON [Link] = [Link];
GO

-- Procedimiento: devuelve total gastado por un cliente (con descuentos)


CREATE PROCEDURE ObtenerTotalCompras
@cliente_id INT
AS
BEGIN
SELECT
[Link],
[Link],
SUM(([Link] * [Link]) * (1 - [Link] / 100.0)) AS
TotalGastado
FROM Compras c
JOIN Productos p ON [Link] = [Link]
JOIN Clientes cl ON [Link] = [Link]
WHERE [Link] = @cliente_id
GROUP BY [Link], [Link];
END;
GO

-- Procedimiento: devuelve todos los datos de un cliente por ID


CREATE PROCEDURE ObtenerDatosCliente
@cliente_id INT
AS
BEGIN
SELECT * FROM Clientes WHERE ID = @cliente_id;
END;
GO

-- Insertar cliente de ejemplo


INSERT INTO Clientes (Nombre, Cedula, Telefono, Email, TipoVehiculo,
TipoCliente)
VALUES ('Juan Perez', '001-1234567-8', '8091234567', 'juan@[Link]',
'Carro', 'Corporativo');
GO

-- Insertar productos ejemplo


INSERT INTO Productos (Nombre, Precio, TipoProducto, Unidad)
VALUES
('Gasolina Premium', 280.50, 'Combustible', 'Galon'),
('Gasolina Regular', 265.00, 'Combustible', 'Galon'),
('Diesel', 240.00, 'Combustible', 'Galon');
GO

-- Registrar inventario inicial


INSERT INTO Inventario (ProductoID, StockInicial, StockActual)
VALUES (1, 1000, 940), (2, 1000, 960), (3, 1000, 980);
GO

-- Insertar compras de prueba


INSERT INTO Compras (ClienteID, ProductoID, Cantidad, Descuento)
VALUES (1, 1, 20, 5), (1, 2, 15, 0);
GO

-- Ejecutar procedimientos y vistas de prueba


EXEC ObtenerTotalCompras @cliente_id = 1;
EXEC ObtenerDatosCliente @cliente_id = 1;
SELECT * FROM VistaProductosConEnc;
SELECT * FROM VistaPreciosOrdenados ORDER BY Nombre ASC;
SELECT * FROM VistaVentasDetalladas;

También podría gustarte