比较不同2个数据库中的表的列

时间:2013-07-22 06:42:23

标签: sybase sybase-ase

我在2个不同的数据库中有1个表,在数据库中,列数是284列,在另一个数据库中,列数为281列,因此缺少3列。
是否有一个查询(不是一个工具,因为我发现了一些名为比较它的东西),它可以帮助找到缺少的列?
例如:

  

数据库1
  COLUMN1
  列2
  栏3
  column4
  column5
  column6
  

     

数据库2
  COLUMN1
  列2
  栏3

     

column5
  column6


在上面的示例中,缺少第4列,sybase中是否有查询可以告诉我缺少的列是什么?

1 个答案:

答案 0 :(得分:2)

为两个不同数据库中的两个表创建两个临时表,假设为#TableColumns1和#TableColumns2

CREATE TABLE #TableColumns1(ColumnName VARCHAR(255))
CREATE TABLE #TableColumns2(ColumnName VARCHAR(255))

INSERT INTO #TableColumns1
SELECT SC.column_name
FROM SYS.SYSCOLUMN SC, SYS.SYSTABLE ST 
WHERE SC.table_id = ST.table_id AND ST.table_name = '<DatabaseName1.TableName1>';

INSERT INTO #TableColumns1
SELECT SC.column_name
FROM SYS.SYSCOLUMN SC, SYS.SYSTABLE ST 
WHERE SC.table_id = ST.table_id AND ST.table_name = '<DatabaseName2.TableName2>';

现在再创建一个临时表#MissingTableColumns,其中包含缺失列的实际结果

CREATE TABLE #MissingTableColumns(ColumnName VARCHAR(255), TableName VARCHAR(255))

INSERT INTO #MissingTableColumns
(ColumnName, TableName)
SELECT ColumnName, '<Table1Name>'
FROM #TableColumns1, #TableColumns2 
WHERE #TableColumns1.ColumnName *= #TableColumns2.ColumnName

INSERT INTO #MissingTableColumns
(ColumnName, TableName)
SELECT ColumnName, '<Table2Name>'
FROM #TableColumns1, #TableColumns2 
WHERE #TableColumns1.ColumnName =* #TableColumns2.ColumnName

希望这能解决您的问题。