I am using SQL Server 2008 (v10.0 SP3) as my database.
I am trying to find how to compare two almost identical table structures, and only return the column name and the value of columns that do not match.
I have two tables.
Table A contains about 260 columns and a unique identifier for each record. It comes from a view on another server.
Table B is a copy of table A in the structure with an insert date column and an action column.
IF OBJECT_ID('tempdb..
DROP TABLE
IF OBJECT_ID('tempdb..#TableB') IS NOT NULL
DROP TABLE
CREATE TABLE
UniqueID INT,[Name] CHAR(3),[Address] CHAR(15),
HairColor CHAR(6),ImportDate DATETIME
)
CREATE TABLE
UniqueID INT,[Name] CHAR(3),[Address] CHAR(15),
HairColor CHAR(6),ImportDate DATETIME,
AuditDate DATETIME,[Action] CHAR(10)
)
INSERT INTO
VALUES (1,'Joe','1 Main St.','Brown','12/1/2013')
INSERT INTO
VALUES (2,'Jen','1 Main St.','Red','12/1/2013')
INSERT INTO
VALUES (2,'Jen','1 Main St.','Blonde','10/1/2013','12/1/2013','CHANGE')
INSERT INTO
VALUES (2,'Jen','1 Baker St.','Blonde','4/1/2010','10/1/2013','CHANGE')
INSERT INTO
VALUES (2,'Jen','4 Deer Ave.','Black','6/1/2004','4/1/2010','CHANGE')
SELECT * FROM
SELECT * FROM
Table a
ββββββββββββ¦βββββββ¦βββββββββββββ¦ββββββββββββ¦βββββββββββββ
β UniqueID β Name β Address β HairColor β ImportDate β
β βββββββββββ¬βββββββ¬βββββββββββββ¬ββββββββββββ¬βββββββββββββ£
β 1 β Joe β 1 Main St. β Brown β 12/1/2013 β
β 2 β Jen β 1 Main St. β Red β 12/1/2013 β
ββββββββββββ©βββββββ©βββββββββββββ©ββββββββββββ©βββββββββββββ
Table B
ββββββββββββ¦βββββββ¦ββββββββββββββ¦ββββββββββββ¦βββββββββββββ¦ββββββββββββ¦βββββββββ
β UniqueID β Name β Address β HairColor β ImportDate β AuditDate β Action β
β βββββββββββ¬βββββββ¬ββββββββββββββ¬ββββββββββββ¬βββββββββββββ¬ββββββββββββ¬βββββββββ£
β 2 β Jen β 1 Main St. β Blonde β 10/1/2013 β 12/1/2013 β CHANGE β
β 2 β Jen β 1 Baker St. β Blonde β 4/1/2010 β 10/1/2013 β CHANGE β
β 2 β Jen β 4 Deer Ave. β Black β 6/1/2004 β 4/1/2010 β CHANGE β
ββββββββββββ©βββββββ©ββββββββββββββ©ββββββββββββ©βββββββββββββ©ββββββββββββ©βββββββββ
A , , A ( A) , A ( A).
A , A, A B insertdate DELETED .
A , A, A B insertdate ADDED .
A , , AI, A B insertdate CHANGE .
, B , A, A .
. . 260 B, A, TableA.UniqueID = TableB.UniqueID
UniqueID A - :
ββββββββββββ¦βββββββββββββ¦ββββββββββββββ¦βββββββββββββ¦ββββββββββββ¦βββββββββ
β UniqueID β ColumnName β Value β ImportDate β AuditDate β Action β
β βββββββββββ¬βββββββββββββ¬ββββββββββββββ¬βββββββββββββ¬ββββββββββββ¬βββββββββ£
β 2 β HairColor β Blonde β 10/1/2013 β 12/1/2013 β CHANGE β
β 2 β Address β 1 Baker St. β 4/1/2010 β 10/1/2013 β CHANGE β
β 2 β HairColor β Blonde β 4/1/2010 β 10/1/2013 β CHANGE β
β 2 β Address β 4 Deer Ave. β 6/1/2004 β 4/1/2010 β CHANGE β
β 2 β HairColor β Black β 6/1/2004 β 4/1/2010 β CHANGE β
ββββββββββββ©βββββββββββββ©ββββββββββββββ©βββββββββββββ©ββββββββββββ©βββββββββ
, .
. ORDINAL_POSITION INFORMATION_SCHEMA.COLUMNS ?
SELECT a.ORDINAL_POSITION,a.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS AS a
JOIN INFORMATION_SCHEMA.COLUMNS AS b ON a.COLUMN_NAME = b.COLUMN_NAME
WHERE a.TABLE_NAME = 'TableA' AND a.TABLE_SCHEMA='dbo'
AND b.TABLE_NAME = 'TableB' AND b.TABLE_SCHEMA='dbo'