sql - 使用 CTE 的结果在没有游标的情况下从表中查询

标签 sql sql-server common-table-expression

我需要从 CTE 查询的结果表中进行查询,例如

;WITH CTE
AS
( 
  SELECT TableName
    FROM dbo.TableContainingListOfTableNames        
)
SELECT * FROM CTE

这将返回我需要从中查询数据的表的名称。

Names of tables returned from table store

我可以使用CTE从相应的表中查询,例如从 dbo.[1006UN] 选择*?我知道我可以使用临时表来存储这些值并使用游标来迭代动态 sql,但如果可能的话,我不想使用游标。

我尝试过一些简单的方法:

SELECT * FROM dbo.[CTE]

这给了我错误:

Invalid object name 'dbo.CTE'.

并进一步尝试将动态 SQL 与 CTE 结合使用:

DECLARE @query1 VARCHAR(MAX)
SELECT @query1 = N';WITH CTE
AS
(
  SELECT TableName  
    FROM dbo.TableContainingListOfTableNames    
)
SELECT * FROM dbo.["' + CTE + '"] '

EXECUTE(@query1)

这给了我错误:

Invalid column name 'CTE'.

首先,有可能实现这一目标吗?如果没有,是否有任何替代方案可以实现此目的(避免游标)?

最佳答案

可以做到。是否使用 CTE 并不重要。获得表名称后,您可以创建并连接动态 SELECT 语句。

DECLARE @query NVARCHAR(MAX) = '';

WITH CTE AS
( 
  SELECT TableName
  FROM dbo.TableContainingListOfTableNames        
)
SELECT @query = @query + 'SELECT * FROM ' + QUOTENAME(TableName) + '; '
FROM CTE;

PRINT @query; --run print first to check
EXEC (@query);

关于sql - 使用 CTE 的结果在没有游标的情况下从表中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45212031/

相关文章:

hive - 如何评估 HIVE 中的 CTE(通用表表达式)

sql - 使用 CTE 和窗口函数获得预算内的招聘人数

sql - 为什么 PostgreSQL 比其他数据库更难管理/维护

sql - 自动检查两个 SQL 查询在语义上是否相等

sql-server - T-SQL 条件 AND 语句

sql-server - 如何在不恢复报表服务器的情况下将 SSRS 数据源从一台服务器迁移或复制到另一台服务器

sql - 如何保证 Postgres 中的递归 CTE 至少返回 N 行

sql - 给定日期和 SQL 中的通用值,从查询中提取行数据

java - 如何使用 Java Access MS Access 查询(不是普通表)?

php - Codeigniter 请求 sql 但我的代码返回错误