我需要从 CTE
查询的结果表中进行查询,例如
;WITH CTE
AS
(
SELECT TableName
FROM dbo.TableContainingListOfTableNames
)
SELECT * FROM CTE
这将返回我需要从中查询数据的表的名称。
我可以使用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/