アプリがさまざまなデータソースからデータを取得するための単一のインターフェイスを作成するために、すべてのデータ アクセス/処理ルーチンを保持しようとする 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 ランタイムで宣言および存在) を処理する必要があるため、いくつかの問題があります。
- デフォルトのクエリを作成するのは面倒です。パラメーターと変数の解析により、コードが読めなくなります。
- 変数を
sp_executesql
処理するため、プロセスを簡素化するために必要になる可能性があります。 - クエリ コードを保持する方法がわからない -
config_table
xml または 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>
質問:
利用可能なベストプラクティスはありますか?
このトピックの主題によると、デフォルトまたは特別なコードを使用する可能性があるいくつかのパラメーターを渡すだけで、クエリテンプレートを整理する最良の方法を探しています。