我有一个包含两列的表,两列都有表名。
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
位查看“表名”表中的行?
答案 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;