3

別のデータベースのいくつかのテーブルを含むいくつかのテーブルからのデータを集約するSQLServerのユーザー定義テーブル関数があります。これはクエリでデータベースの名前をハードコーディングして行われますが、データベース名を構成可能にしたいです(データベースは通常、他のアプリケーションのデータベースとサーバーを共有しているため)。

構成テーブルに格納されているデータベース名を使用して、関数内に動的クエリ文字列を作成しようとしましたが、次のようになりました。

  1. exec(@sqlStatement)SQL Serverを試したところ、関数内で文字列の実行は許可されていないと言われました。
  2. 次に、試しexec sp_executesql @sqlStatementて関数を作成しましたが、実行すると、SQL Serverは、関数内では拡張関数とプロシージャしか実行できないと言っています。

したがって、問題は、データベース名が異なる場合に関数を再作成することなく、別のデータベースのテーブルにアクセスする関数またはストアドプロシージャを作成できるかどうかです。

TIA。

4

1 に答える 1

3

動的 SQL を使用するというこの問題全体を回避できるように、固定データベース名に落ち着くことを強くお勧めします。your_company_name_XYZやのような一意のデータベース名を思いつくことはできませんyour_company_name_ABCか? それができない場合は、多くの動的 SQL を実行することになるので、Erland Sommarskog による The Curse and Blessings of Dynamic SQL を読む必要があります。

質問で言及したすべての制限は、SQL Server 機能の制限です。ストアド プロシージャ内で問題なく動的 SQL を生成して実行できます。

于 2010-03-17T13:26:22.453 に答える