我理解创建连接并比较两个表中特定列的值。在这种情况下,我只想比较两个不同表之间的列,而不是值。
我想检查一下我新表中的列数是否正确,以及新表中每列的拼写是否与另一列匹配。基本上,这是一种QC新表格模式的方法。
有关SQL查询执行此操作的建议吗?
答案 0 :(得分:2)
您可以使用下表:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = SOME DB
AND TABLE_NAME = SOME TBL
或者您也可以类似地使用sys.columns
。
答案 1 :(得分:0)
您想要检查数据定义是否正确。您无法在这些表格上使用数据查询。
但是,SQL Server将有关表中的表的信息存储在其他表中。请参阅:https://msdn.microsoft.com/en-us/library/ms186778.aspx
在这种情况下,您可以使用INFORMATION_SCHEMA.COLUMNS
表格上的查询获得所需内容。
答案 2 :(得分:0)
;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)