Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择将表名存储在表中的时间_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 选择将表名存储在表中的时间

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

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

e、 g:

我想从两个方向比较每对表中的每一行,以便找出任何差异:

e、 g:


手动输入表格并不是一个真正的选项,因此我如何从位获取
,以查看我的“表格名称表”中的行?

正如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;