Sql 查找表1和表2中存在哪些额外列

Sql 查找表1和表2中存在哪些额外列,sql,sql-server,Sql,Sql Server,我试图找出与表2相比,表1中存在哪些额外的列。因此,我考虑使用sys.columns中的信息,如下所示 但是,我认为我在这里没有得到正确的结果,因为我的表1包含90列,而表2包含50,所以我希望我的结果只有40行。然而,它有更多的优点 SELECT NAME FROM sys.columns WHERE object_id = Object_id('CardioVascular.AcuteCareHeartFailureInpatientCoded') EXCEPT (SELECT NAM

我试图找出与
表2
相比,
表1
中存在哪些额外的列。因此,我考虑使用
sys.columns
中的信息,如下所示

但是,我认为我在这里没有得到正确的结果,因为我的表1包含
90
列,而表2包含
50
,所以我希望我的结果只有
40
行。然而,它有更多的优点

SELECT NAME
FROM   sys.columns
WHERE  object_id = Object_id('CardioVascular.AcuteCareHeartFailureInpatientCoded')
EXCEPT
(SELECT NAME
 FROM   sys.columns
 WHERE  object_id = Object_id('CardioVascular.HeartFailureInpatientCoded')) 
我也在一个网站上看到了
减号
关键字,并打算使用它,但出现了一些错误

SELECT NAME
FROM   sys.columns
WHERE  object_id = Object_id('CardioVascular.AcuteCareHeartFailureInpatientCoded')
minus
SELECT NAME
FROM   sys.columns
WHERE  object_id = Object_id('CardioVascular.HeartFailureInpatientCoded') 

我发现信息模式在这些情况下非常有用

SELECT *
FROM (
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'AcuteCareHeartFailureInpatientCoded') t1
FULL OUTER JOIN (
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'HeartFailureInpatientCoded') t2 ON t1.COLUMN_NAME = t2.COLUMN_NAME

你可以这样做

SELECT TABLE_NAME, 
       COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1' AND 
      COLUMN_NAME NOT IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table2')

只需将“表1”和“表2”替换为您的表名

算法90-50=40不必适用。两个表之间相同的列不能超过50列,但相同的数字可以是0到50之间的任意数字。因此,不匹配的数字可以是40到90之间的任意数字。在SQL Server中,使用
外,而不是