0

为了为应用程序从不同数据源获取数据创建单一界面,我创建了一个存储过程,我尝试在其中保留所有数据访问/处理例程。现在的情况:

  • Sql Server sp 接收固定数量的参数,并应返回从远程服务器获取的记录集;
  • 远程服务器表示为基于 Sql Sqrver Express 双方的链接服务器;
  • 一些链接服务器只是指向本地 OLE DB 文件数据源的连接点(其他在 Sql Server 本身上有 db);
  • 远程数据结构变化很大,对于每个链接服务器,应保留带有变量处理的特殊查询列表;

查询示例:

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、scheme)和变量(在本地 sp 运行时声明并存在)我有一些问题:

  1. 进行默认查询是一团糟——参数和变量解析使代码不可读;
  2. 由于处理变量,我可能需要求助于sp_executesql简化流程;
  3. 不确定保留查询代码的方式 - 它应该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>

问题: 是否有可用的最佳实践?
根据本主题的主题,我正在寻找组织查询模板的最佳方法,只需将一些参数传递给它们,并可能使用默认或特殊代码。

4

0 回答 0