CTE
というクエリの結果であるテーブルからクエリを実行する必要があります。CTEの結果をカーソルなしのテーブルからクエリする
;WITH CTE
AS
(
SELECT TableName
FROM dbo.TableContainingListOfTableNames
)
SELECT * FROM CTE
これにより、データのクエリに必要なテーブルの名前が返されます。
私はそれぞれのテーブルからクエリするCTE
を使用でき、例えばSELECT * FROM dbo.[1006UN]
?私は一時テーブルを使用してこれらの値を格納し、動的SQLで反復するためにカーソルを使用することができますが、私は可能な限りカーソルを使用したくありません。
Invalid object name 'dbo.CTE'.
そしてCTEと、動的SQLを使用しようとすることがさらに行きましています:
DECLARE @query1 VARCHAR(MAX)
SELECT @query1 = N';WITH CTE
AS
(
SELECT TableName
FROM dbo.TableContainingListOfTableNames
)
SELECT * FROM dbo.["' + CTE + '"] '
EXECUTE(@query1)
私にエラーを与える
SELECT * FROM dbo.[CTE]
:
は私がような単純なものを試してみました
私にエラーが表示される:
Invalid column name 'CTE'.
だから、これを達成することは可能でしょうか?そうでない場合は、これを達成できる代替手段があります(カーソルを避ける)?
「dbo」スキーマ内には存在しません。あなたのバッチ内で一時的に構築され、そこにしか存在しません。したがって、 'dbo。[CTE]'を介してそれを扱うことは、そのようなオブジェクトが存在しないために機能しません。 – Adwaenyth
ちょうど 'SELECT * FROM CTE'を試してください - CTEはインラインメモリ内のオブジェクトなので、スキーマには格納されません.... –
テーブル名は実際に' dbo。[TableName] 'you ' cteからの結果を動的SQLと混合してテーブルから読み込みます。 – Jamiec