0

アプリがさまざまなデータソースからデータを取得するための単一のインターフェイスを作成するために、すべてのデータ アクセス/処理ルーチンを保持しようとする 1 つのストアド プロシージャを作成しました。現在の状況:

  • Sql Server sp は固定数のパラメーターを受け取り、リモート サーバーから取得したレコードセットを返す必要があります。
  • Sql Sqrver Express の両側に基づくリンク サーバーとして表されるリモート サーバー。
  • 一部のリンク サーバーは、ローカルの OLE DB ファイル データソースにつながる単なる接続ポイントです (他のサーバーは SQL Server 自体にデータベースを持っています)。
  • リモートデータ構造は大きく異なり、リンクサーバーごとに、変数を処理するクエリの特別なリストを保持する必要があります。

クエリの例:

select * from OPENQUERY(linkedA,
'select f1 as id,f2 as name
from  openrowset(''VFPOLEDB'',''c:\program\db\Table.FPT'';'''';
'''',''SELECT *  FROM Table  where f1=1'')')

ソースが SQL Server ベースの場合:

select * from OPENQUERY(linkedB,
'select f3 as id,f4 as name from [db].[dbo].[Table] where f3=1')

接続プロパティ (リンクされたサーバー名) だけでなく、クエリ パラメーター (db、スキーム) と変数 (ローカル sp ランタイムで宣言および存在) を処理する必要があるため、いくつかの問題があります。

  1. デフォルトのクエリを作成するのは面倒です。パラメーターと変数の解析により、コードが読めなくなります。
  2. 変数をsp_executesql処理するため、プロセスを簡素化するために必要になる可能性があります。
  3. クエリ コードを保持する方法がわからない - config_tablexml または smth である必要があります。
<Config id="1" name="linkedB" db="dblinkedB" scheme="dbo" version="1.0.1">
  <Actions>
    <Action id="0" name="Query 1">select * from OPENQUERY(linkedB,'select f3 as id,f4 as name from [db].[dbo].[Table] where f3=1')')</Action>
  </Actions>
</Config>

質問: 利用可能なベストプラクティスはありますか?
このトピックの主題によると、デフォルトまたは特別なコードを使用する可能性があるいくつかのパラメーターを渡すだけで、クエリテンプレートを整理する最良の方法を探しています。

4

0 に答える 0