2

我有一个包含两列的表,这两列都有表名。

例如:

sourceTableName  |  destinationTableName
---------------  |  -------------------
sourceTable1     |  destinationTable1
sourceTable2     |  destinationTable2
sourceTable3     |  destinationTable3
sourceTable4     |  destinationTable4
sourceTable5     |  destinationTable5   ...

我想在两个方向上比较每对表中的每一行,以发现任何差异:

例如:

SELECT * FROM sourceTable1
EXCEPT  
SELECT * FROM destinationTable1

SELECT * FROM destinationTable1
EXCEPT  
SELECT * FROM sourceTable1

手动输入表格并不是一个真正的选择,所以我怎样才能FROM查看我的“表名表”中的行?

4

2 回答 2

0

正如 Yuriy 在问题的评论中所说,动态 SQL 是要走的路。这就是我会做的事情(过去也做过)。这应该让你开始。

DECLARE @SQL NVARCHAR(MAX)

SET @ SQL = N''

SELECT
  @SQL = @SQL + N' SELECT * FROM [' + sourceTableName + N'] EXCEPT SELECT * FROM [' + destinationTableName + N'];'
FROM
  tblOfTableNames

EXEC sp_executesql @SQL

是否有多个模式?

于 2013-11-05T19:20:05.823 回答
0
DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'SELECT * FROM dbo.' + QUOTENAME(sourceTableName)
 + ' EXCEPT SELECT * FROM dbo.' + QUOTENAME(destinationTableName)
 + ';
' FROM dbo.we_have_no_idea_what_your_table_is_called;

PRINT @sql;
-- EXEC sp_executesql @sql;
于 2013-11-05T19:20:20.420 回答