Conectar dos bases de datos

9
UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO FACULTAD DE ESTUDIOS SUPERIORES PLANTEL ACATLAN TRABAJO PARCIAL Alumnos: Hernández Hernández Elihu Miranda Hernández Marco Antonio Materia: Base de datos distribuidas Profesor: Javier Rosas Hernández Marzo 2015

description

Explicacomo conectar dos bases de datos en SQL Server

Transcript of Conectar dos bases de datos

Page 1: Conectar dos bases de datos

UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO

FACULTAD DE ESTUDIOS SUPERIORES

PLANTEL ACATLAN

TRABAJO PARCIAL

Alumnos:

Hernández Hernández Elihu

Miranda Hernández Marco Antonio

Materia: Base de datos distribuidas

Profesor: Javier Rosas Hernández

Marzo 2015

Page 2: Conectar dos bases de datos

1. Introducción

El siguiente trabajo toma ejemplifica una transacción en la que se necesita transferir el saldo de una

cuenta a otra.

Se indica que se requiere transferir un saldo de la cuenta A a la cuenta B, considerando que el cliente

tiene un número de operaciones. Además cada operación se guarda en un histórico y en una bitácora

con fines de auditoria.

Mediante el proceso que se describe anteriormente es necesario que validemos que la cuenta

“origen” como la cuenta “destino” exista y que en la primera tenga saldo suficiente para poder

transferirlo a la segunda, tampoco debe tener saldo negativo.

2. Modelo E/R

Page 3: Conectar dos bases de datos

3. Creación de la BD

Page 4: Conectar dos bases de datos

4. Código SQL

El código SQL generado de las pantallas anteriores se muestra a continuación:

Para crear las tablas:

USE banco_transaccion

GO

CREATE TABLE CLIENTE

(

IDcliente int not null, /*Llave Primaria la cual será llave*/

Nombre nvarchar(50) not null,

Apellido1 nvarchar(50) not null,

Apellido2 nvarchar(50) not null,

Page 5: Conectar dos bases de datos

Telefono varchar(16),

IFE nvarchar(30),

RFC nvarchar(14),

email varchar(35),

PRIMARY KEY(IDcliente)

)

CREATE TABLE CUENTA

(

IDcuenta int not null,

saldo Decimal(10,2) check (saldo >=2),

Tipocuenta nvarchar(50) check (Tipocuenta in ('Cuenta de Cheques','Ahorros','Nomina')),

fecha_apertura datetime,

IDcliente int not null, /* LLave foranea referenciada de la tabla cliente*/

PRIMARY KEY(IDcuenta),

FOREIGN KEY(IDcliente) References CLIENTE(IDcliente)

)

CREATE TABLE HISTORICO

(

IDhistorico int not null,

Tipotransaccion nvarchar(25) check (Tipotransaccion in ('Deposito','Retiro','Transferencia')),

saldo_inicial Decimal(10,2),

saldo_final Decimal(10,2),

fecha datetime,

IDcuenta int not null,

PRIMARY KEY(IDhistorico),

FOREIGN KEY(IDcuenta) References CUENTA(IDcuenta)

)

CREATE TABLE BITACORA

(

IDbitacora int not null,

Actividad nvarchar(50) check (Actividad in ('Deposito','Retiro','Transferencia')),

IDcuenta int not null,

PRIMARY KEY(IDbitacora),

FOREIGN KEY(IDcuenta) References CUENTA(IDcuenta)

)

Page 6: Conectar dos bases de datos

Para insertar los registros:

USE banco_transaccion

GO

INSERT INTO CLIENTE (IDcliente,Nombre,Apellido1,Apellido2,Telefono,IFE,RFC,email)

VALUES(1,'Marco','Miranda','Hernandez',57381446,302607400,'MIHM881125AI1','miranda@exam

ple.com');

INSERT INTO CUENTA(IDcliente,IDcuenta,Saldo,Tipocuenta,fecha_apertura)

VALUES(1,410091852,10500.00,'Nomina',getdate());

INSERT INTO CLIENTE(IDcliente,Nombre,Apellido1,Apellido2,Telefono,IFE,RFC,email)

VALUES(2,'Elihu','Henandez','Hernandez',53233842,406307500,'EHH891014HDF','hernandez@exam

ple.com');

INSERT INTO CUENTA(IDcliente,IDcuenta,Saldo,Tipocuenta,fecha_apertura)

VALUES(2,306270040,20500.00,'Nomina',getdate());

Page 7: Conectar dos bases de datos

Se muestra a continuación los registros creados:

Finalmente para realizar la TRANSACCION ejecutamos el siguiente código SQL: USE [banco_transaccion] GO DECLARE @importe DECIMAL(10,2), @CuentaOrigen int, @CuentaDestino int SET @importe = 500 SET @CuentaOrigen = '410091852' SET @CuentaDestino = '306270040' BEGIN TRANSACTION BEGIN TRY /* Para descontar el importe de la cuenta origen */ UPDATE CUENTA SET saldo = saldo - @importe WHERE IDcuenta = @CuentaOrigen INSERT INTO HISTORICO

Page 8: Conectar dos bases de datos

(saldo_inicial, saldo_final,fecha) SELECT saldo + @importe, saldo, getdate() FROM CUENTA WHERE IDcuenta = @CuentaOrigen /* Para incrementar el importe a la cuenta destino */ UPDATE CUENTA SET saldo = saldo + @importe WHERE IDcuenta = @CuentaDestino INSERT INTO HISTORICO (saldo_inicial, saldo_final,fecha) SELECT saldo - @importe, saldo, getdate() FROM CUENTA WHERE IDcuenta = @CuentaDestino COMMIT TRANSACTION END TRY BEGIN CATCH /* En caso de error*/ ROLLBACK TRANSACTION PRINT 'Se ha producido un error' END CATCH

Page 9: Conectar dos bases de datos