Click here to Skip to main content
15,886,519 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi,
Is there any tool or query inorder to get the difference between 2 tables in sql server..

Thanks,
P.Siva
Posted

Hi, this should get you work. This query returns the columns that exist only in the first table.

SQL
SELECT * FROM (SELECT t.name AS table_name,
			SCHEMA_NAME(schema_id) AS schema_name,
			c.name AS column_name
			FROM sys.tables AS t
			INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
			WHERE t.name = 'Table1') T1
LEFT JOIN (
			SELECT t.name AS table_name,
			SCHEMA_NAME(schema_id) AS schema_name,
			c.name AS column_name
			FROM sys.tables AS t
			INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
			WHERE t.name = 'Table2') T2 ON T2.column_name=T1.column_name
WHERE T2.column_name Is Null
 
Share this answer
 
Comments
Member 9848727 22-Jul-13 3:20am    
This is not working. I will clearly explain you.
I have two tables as following

tableA:
EMPid name company

TableB
EMPId Name qualification company

Now i want the output as follows
Qualification

It should return only one column(Qualification) because it is the only column which is different between 2 tables
Maciej Los 22-Jul-13 5:19am    
Do not repost anwers! Better way is to use "Improve question" widget.
If I understood correctly. Just edit the query to return the difference of the second table
SQL
SELECT T2.column_name FROM (SELECT t.name AS table_name,
			SCHEMA_NAME(schema_id) AS schema_name,
			c.name AS column_name
			FROM sys.tables AS t
			INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
			WHERE t.name = 'tableA') T1
RIGHT JOIN (
			SELECT t.name AS table_name,
			SCHEMA_NAME(schema_id) AS schema_name,
			c.name AS column_name
			FROM sys.tables AS t
			INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
			WHERE t.name = 'tableB') T2 ON T2.column_name=T1.column_name
WHERE T1.column_name Is Null
 
Share this answer
 
SQL
select c.name as 'colname'
from sys.tables t , sys.columns c
where t.object_id = c.object_id and t.name  like '%tableA%'

except

select c.name as 'colname'
from sys.tables t , sys.columns c
where t.object_id = c.object_id and t.name  like '%tableB%'


-----------------------------------------------------------------------------------------

SQL
select c.name as 'colname'
from sys.tables t , sys.columns c
where t.object_id = c.object_id and t.name  like '%TableB%'

except

select c.name as 'colname'
from sys.tables t , sys.columns c
where t.object_id = c.object_id and t.name  like '%TableA%'



Please execute above queries together to know the differences
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900