我需要從查詢結果爲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