データベースの動的リスト(テーブルに格納されている)に対して実行されたクエリから1つの結果セットを返すビューまたはテーブル値関数を作成する必要があります。すべてのデータベースの構造は同じであり、view / tvfには、databases_table内の各データベースのすべてのクエリの和集合に相当するものが含まれている必要があります。これらすべての全体像は、このクエリの結果をODBC経由で利用できるようにする必要があるということです。
オンラインで多くのことを調べた後、私はいくつかの潜在的な解決策を思いつきましたが、私が達成しようとしていることに完全に適合するものはありません。
私が最初に調べたのは、個別のデータベースごとに選択されたビューがあり、すべてが結合されていることでした。これは、私が想像できる限り保守可能とはほど遠いという事実を除いて、完全に機能しました。これらの種類のマルチデータベースクエリは25〜100個あり、それらはすべて、絶えず変化するデータベースのセットに対して実行する必要があります。
私はまだこの方法を使用することを検討しており、ビューを動的に作成するためのストアドプロシージャを作成していますが、このプロセス全体をハンズフリーにするように求められているため、これはまだあまり役に立ちません。この方法で行うには、ODBCを介してビューに接続する前に、誰かがビューの更新をトリガーする必要があります。なるべく避けたいと思います。
私が調べた2番目のことは、私が必要なものにかなり近づいたことです。sp_msforeachdbストアドプロシージャを使用し、データベースがリストにあるかどうかを確認し、リストにある場合は、クエリの結果をテーブル変数に追加しました。これは問題なく機能しますが、問題は、動的SQLにより、テーブル値の関数またはビューにラップすることが不可能になることでした...
Declare @RETURNTABLE Table(variable1 varchar(20), variable 2 varchar(30))
INSERT INTO @RETURNTABLE
exec sp_msforeachdb 'IF "?" IN (SELECT DatabaseName FROM DatabaseList) BEGIN SELECT "?" [DatabaseName], variable1 , variable2 from [?].dbo.myTable END'
SELECT * FROM @DBINFO
これは、ms ssmsからのクエリから実行すると完全に機能しますが、私が言ったように、veiwまたはtvfに配置することは私の能力を超えていることが証明されています。私の知る限り、動的SQLはtvfの使用を排除し、ビューは変数を操作できません。
上記のコードの結果をODBC経由で利用できるようにする方法はありますか?私が見逃している代替ソリューションはありますか?