我明白创建一个连接并比较两个表中特定列的值。在这种情况下,我只想比较两个不同表中的列,而不是值。如何比较两个表的列,SQL Server?
我想检查我的新表中是否有正确数量的列,并且我新表中每列的拼写与其他列匹配。从本质上讲,一种QC方法来检验新表格的模式。
任何SQL查询执行此建议的建议?
我明白创建一个连接并比较两个表中特定列的值。在这种情况下,我只想比较两个不同表中的列,而不是值。如何比较两个表的列,SQL Server?
我想检查我的新表中是否有正确数量的列,并且我新表中每列的拼写与其他列匹配。从本质上讲,一种QC方法来检验新表格的模式。
任何SQL查询执行此建议的建议?
您可以使用下表:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = SOME DB
AND TABLE_NAME = SOME TBL
或者您可以使用sys.columns
类似。
您想检查数据定义是否正确。您无法在这些表上使用数据查询。
但是,SQL Server将有关表中的表的信息存储在其他表中的数据库中。请参阅:https://msdn.microsoft.com/en-us/library/ms186778.aspx
在这种情况下,您可能会在INFORMATION_SCHEMA.COLUMNS
表上使用查询获取所需内容。
;WITH cteTable1Columns AS (
SELECT
c.object_id
,c.name
FROM
sys.columns c
WHERE
c.object_id = object_id('A')
)
, cteTable2Columns AS (
SELECT
c.object_id
,c.name
FROM
sys.columns c
WHERE
c.object_id = object_id('B')
)
SELECT
OBJECT_NAME(c1.object_id) as Table1Name
,c1.name as Table1ColName
,OBJECT_NAME(c2.object_id) as Table2name
,c2.name as Table2ColName
FROM
cteTable1Columns c1
FULL JOIN cteTable2Columns c2
ON c1.name = c2.name
WHERE
c1.object_id is NULL
OR c2.object_id IS NULL
如果使用这样的方法来确定每个表中的列然后做一个完全外部连接的名称会告诉你所有你的问题,如果有的话。 (注意,你也可以使用INFORMATION_SCHEMA.COLUMNS)
你可以比较每个表的SELECT * FROM sys.columns WHERE Object_ID = Object_ID(N'tableName')'[我在这个答案上找到了查询](http://stackoverflow.com/a/133057/1804496)。 – Zack