我需要从查询结果为CTE
的表中查询,例如,使用CTE的结果从无光标的表进行查询
;WITH CTE
AS
(
SELECT TableName
FROM dbo.TableContainingListOfTableNames
)
SELECT * FROM CTE
这将返回我,我需要从查询的数据表的名称。
可否使用CTE
从各表例如查询SELECT * FROM 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不在'dbo'模式中。它在您的批次中临时构建,并且仅在此处可用。因此,通过'dbo。[CTE]'处理它不会工作,因为这样的对象不存在。 – Adwaenyth
只是尝试'选择*从CTE' - 因为CTE只是一个“内联,内存中”的对象,它没有存储到任何模式中...... –
你的表名实际上是'dbo。[TableName]'你'重新将cte的结果与动态sql混合,从表中读取。 – Jamiec