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中,使用除
外,而不是减
。