Conectar dos bases de datos

Post on 20-Dec-2015

221 views 1 download

description

Explicacomo conectar dos bases de datos en SQL Server

Transcript of 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

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

3. Creación de la BD

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,

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)

)

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());

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

(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