I am trying to compare columns in two tables in SQL using following code;
DECLARE @Table1 VARCHAR(2048) = 'Table1',
@Table2 VARCHAR(2048) = 'Tbale2'
-- Table 1 Columns into #temp_table_1
SELECT DISTINCT
a.COLUMN_NAME AS [Column Name],
a.DATA_TYPE AS [Data Type],
a.CHARACTER_MAXIMUM_LENGTH,
a.NUMERIC_PRECISION,
a.NUMERIC_SCALE
INTO #temp_table1
FROM INFORMATION_SCHEMA.COLUMNS a
WHERE a.TABLE_NAME = @Table1
ORDER BY a.COLUMN_NAME
-- Table 2 Columns into #temp_table_2
SELECT DISTINCT
a.COLUMN_NAME AS [Column Name],
a.DATA_TYPE AS [Data Type],
a.CHARACTER_MAXIMUM_LENGTH,
a.NUMERIC_PRECISION,
a.NUMERIC_SCALE
INTO #temp_table2
FROM INFORMATION_SCHEMA.COLUMNS a
WHERE a.TABLE_NAME = @Table2
ORDER BY a.COLUMN_NAME
SELECT
@Table1 [Table 1],
isnull(t1.[Column Name],'') [Table 1 Column Name],
isnull(t2.[Column Name],'') [Table 2 Column Name],
@Table2 [Table 2],
isnull(t1.[Data Type],'') [Table 1 Column Type],
isnull(t2.[Data Type],'') [Table 2 Column Type],
isnull(cast(t1.CHARACTER_MAXIMUM_LENGTH as varchar(50)),isnull(cast(t1.NUMERIC_PRECISION as varchar(50)),'') + ',' +
isnull(cast(t1.NUMERIC_SCALE as varchar(50)),'')) [Table 1 Column Precision],
isnull(cast(t2.CHARACTER_MAXIMUM_LENGTH as varchar(50)),isnull(cast(t2.NUMERIC_PRECISION as varchar(50)),'') + ',' +
isnull(cast(t2.NUMERIC_SCALE as varchar(50)),'')) [Table 2 Column Precision],
--[Data Type Warning]
case when isnull(t1.[Column Name],'') = isnull(t2.[Column Name],'')
and (
isnull(t1.[Data Type],'') <> isnull(t2.[Data Type],'')
or
isnull(cast(t1.CHARACTER_MAXIMUM_LENGTH as varchar(50)),isnull(cast(t1.NUMERIC_PRECISION as varchar(50)),'') + ',' +
isnull(cast(t1.NUMERIC_SCALE as varchar(50)),''))
<>
isnull(cast(t2.CHARACTER_MAXIMUM_LENGTH as varchar(50)),isnull(cast(t2.NUMERIC_PRECISION as varchar(50)),'') + ',' +
isnull(cast(t2.NUMERIC_SCALE as varchar(50)),''))
)
then '*** Data Type Mismatch ***' else '' end
[Data Type Warning]
FROM #temp_table1 t1
FULL OUTER JOIN #temp_table2 t2 ON t1.[Column Name] = t2.[Column Name]
WHERE 1=1
DROP TABLE #temp_table1, #temp_table2
My two tables are located in separate databases within same SQL Server. Hence, upon executing above code either my "table1" or "table2"contents will get retrieved. I will have to switch between the databases to see each table contents.
How can I retrieve both table information without switching databases?
Any help would be appreciated.