Inicio > Sql Server 2005 - 2008, Transact-SQL > Encontrar la diferencia de datos entre dos conjuntos de datos …

Encontrar la diferencia de datos entre dos conjuntos de datos …


  Encontrar la diferencias de los registros entre 2 tablas de la misma estructura

DECLARE @vSQL VARCHAR(MAX)
DECLARE @vCols VARCHAR(MAX)

— Crear tablas de prueba
CREATE TABLE vTable1 (ID INT, IDEstudiante INT, Departamento VARCHAR(10),IDLibro INT)
CREATE TABLE vTable2 (ID INT, IDEstudiante INT, Departamento VARCHAR(10),IDLibro INT)
— Ingresamos datos de prueba
INSERT INTO vTable1
SELECT 1,123,‘CS’,465 UNION ALL
SELECT 2,123,‘CS’,345 UNION ALL
SELECT 3,223,‘TE’,190
INSERT INTO vTable2
SELECT 1,123,‘CS’,465 UNION ALL
SELECT 2,223,‘TE’,345 UNION ALL
SELECT 3,223,‘TE’,190

— Obtener los nombres de las columnas del esquema con las declaraciones
— para obtener 0 o 1 como resultado, esto dependerá de las columnas de las tablas reales

SELECT @vCols = Stuff((Select ‘,case when a.’ + [name] + ‘ = b.’ + [name] + ‘ then Cast(b.’ + [name] +
‘ as varchar(10)) else cast(b.’ + [name] + ‘ as varchar(max)) + ”(anterior)” + ” ” + Cast(a.’ + [name] +
‘ as varchar(10)) + ”(nuevo)” end as ‘ + [name]
FROM sys.columns
WHERE Object_id = Object_id(‘vTable1’) FOR XML PATH(”)),1,1,”)

— Utilizar @vCols con el select para obtener las diferencias
SET @vSQL = ‘ Select a.id,’ + @vCols + ‘ From vTable1 a Inner Join vTable2 b on b.ID = a.ID ‘

PRINT @vSQL
EXEC (@vSQL)

— Flag de las columnas para ver las diferencias
SELECT @vCols = Stuff((SELECT ‘,Case when a.’ + [name] + ‘ = b.’ + [name] + ‘ Then 1 Else 0 End as ‘ + [name]
FROM sys.columns
WHERE Object_id = Object_id(‘vTable1’) FOR XML PATH()),1,1,)

— Utilizar @vCols con el select para obtener las diferencias
— 1 : si los datos son los mismos     0 : si los datos son diferentes
SET @vSQL = ‘ Select a.id,’ + @vCols + ‘ From vTable1 a Inner Join vTable2 b on b.ID = a.ID ‘

PRINT @vSQL
EXEC (@vSQL)

DROP TABLE vTable1
DROP TABLE vTable2

Ver imagen :

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: