0

MS SQL 2008 R2を使用する 希望の出力を構築するためにcteを使用するクエリがあります。これは1つのデータベースでうまく動作しますが、現在は複数のデータベースで同じクエリを取得し、その結果をすべて1つの結果セットに戻す必要があります。私が持っている極端な詳細なし:UNION複数のデータベースでCTEで作成されたSQLクエリ

;with cte1 as (my query from db1), 
cte2 as (another query from cte1), 
cte3 as (yet another one from cte2) 
Select 'db1.Name' as dbName, * from cte3 

これは私が関連付けられているデータベース名を持つ第一列に必要なデータを提供します。今私は、同じスキーマと同じ出力で30以上のデータベース上のすべてを、これを実行する必要があるが、私がしようとすると、この:

;with cte1 as (my query from db1), 
cte2 as (another query from cte1), 
cte3 as (yet another one from cte2) 
Select 'db1.Name' as dbName, * from cte3 

Union (or Union All) 

;with cte1 as (my query from db2), 
cte2 as (another query from cte1), 
cte3 as (yet another one from cte2) 
Select 'db2.Name' as dbName, * from cte3 

Union (or Union All) 

... till we reach the 30+ 

私が苦情を取得します「;」そして組合/組合はすべて。どのようにすべてのデータベースからの最終的なselect文の出力をすべて1つの結果セットにするか

答えて

0

CTEは、グローバルな一時テーブルを作成し、テーブルを埋める問題を解決するために、最後に選択します。..

をこのように動作しません。 2つの列column1のとcolumn2のがあると仮定し

IEのサンプルは、これは私がグローバル一時テーブルを使用することを考えていなかった、あなたに感謝必要なものであるcte3

CREATE TABLE ##result 
    (dbname varchar(50); 
     column1 varchar(50), 
     column2 varchar(50)) 


    ;with cte1 as (my query from db1), 
    cte2 as (another query from cte1), 
    cte3 as (yet another one from cte2) 

    INSERT INTO ##result (dbname ,column1 ,column2) 
    Select 'db1.Name' as dbName, * into ##result from cte3 

    ;with cte1 as (my query from db1), 
    cte2 as (another query from cte1), 
    cte3 as (yet another one from cte2) 

    INSERT INTO ##result (dbname ,column1 ,column2) 
    Select 'db1.Name' as dbName, * into ##result from cte3 


    select * from ##result ; 
+0

から生成されています。今私はSSRSで動作するようにする必要があります:)あなたの助けをありがとう! –

関連する問題