为了为应用程序从不同数据源获取数据创建单一界面,我创建了一个存储过程,我尝试在其中保留所有数据访问/处理例程。现在的情况:
- 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 运行时声明并存在)我有一些问题:
- 进行默认查询是一团糟——参数和变量解析使代码不可读;
- 由于处理变量,我可能需要求助于
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>
问题:
是否有可用的最佳实践?
根据本主题的主题,我正在寻找组织查询模板的最佳方法,只需将一些参数传递给它们,并可能使用默认或特殊代码。