Sql 选择将表名存储在表中的时间
我有一个包含两列的表,两列中都有表名 e、 g: 我想从两个方向比较每对表中的每一行,以便找出任何差异: e、 g:Sql 选择将表名存储在表中的时间,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个包含两列的表,两列中都有表名 e、 g: 我想从两个方向比较每对表中的每一行,以便找出任何差异: e、 g: 手动输入表格并不是一个真正的选项,因此我如何从位获取,以查看我的“表格名称表”中的行?正如Yuriy在问题的注释中所述,动态SQL是一种方法。这是我会做的(过去也曾做过)。这应该让你开始 DECLARE @SQL NVARCHAR(MAX) SET @ SQL = N'' SELECT @SQL = @SQL + N' SELECT * FROM [' + sourceT
手动输入表格并不是一个真正的选项,因此我如何从位获取
,以查看我的“表格名称表”中的行?正如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
是否有多个模式?@YuriyGalanter。干杯,你能详细说明一下吗?@BankySQL检查一下TSQL的EXEC
和sp_executesql
命令。它们允许您在VARCHAR变量中动态生成SQL语句,您可以在运行时向其中添加表名,然后执行这些语句。@YuriyGalanter。谢谢,这看起来很有希望。这将导致语法错误-除了
,您需要在前面加空格。您还应该使用分号终止查询,并在表名周围加上方括号以防万一。谢谢@AaronBertrand!我在贴出答案后注意到了这一点。我已经编辑了我的答案。
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;
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
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;