表名存储在表中时的SELECT

时间:2013-11-05 18:51:10

标签: sql sql-server sql-server-2008 tsql

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

e.g:

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

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

e.g:

SELECT * FROM sourceTable1
EXCEPT  
SELECT * FROM destinationTable1

SELECT * FROM destinationTable1
EXCEPT  
SELECT * FROM sourceTable1

手动输入表格实际上不是一个选项,那么如何让FROM位查看“表名”表中的行?

2 个答案:

答案 0 :(得分: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

是否有多个架构?

答案 1 :(得分: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;