sql-server - View 中的链接服务器与从另一台服务器远程调用 View
问题描述
我有一些应用程序使用的视图,其中包含对单个其他服务器的大量引用,作为链接服务器(我将调用本地服务器“目标”和远程服务器“源”) - 有点像这样:
SELECT
--[Columns]
FROM
[Source].[s_db].[dbo].[a_table] A
INNER JOIN [Source].[s_db].[dbo].[b_table] B ON A.[Id] = B.[Id]
LEFT JOIN [Source].[s_db].[dbo].[c_table] C ON B.[Id2] = C.[Id]
INNER JOIN [Source].[s_db].[dbo].[d_table] D ON C.[Id2] = D.[Id]
INNER JOIN [Source].[s_db].[dbo].[e_table] E ON D.[Id2] = E.[Id]
---- and so on
我讨厌这些观点,我想知道我是有道理还是有偏见。
有没有更好的方法来编写这些(性能、整洁、发布到不同服务器的能力等)?
到目前为止,我的想法是:
- 在远程服务器上为源 [Source_Companion] 创建一个伴随数据库
- 在 [Source_Companion] 数据库中重新创建视图,引用 [Source] 数据库
- 在 [Target] 数据库中创建视图
- 使用 openquery 调用 [Source] 数据库中的视图,并带有一个合理命名的链接服务器。
Create view [vw] as select * from openquery([Source],'SELECT * FROM vw') as t
这似乎是很多工作,我担心我只是让我的偏见占了上风。你认为我会从这些变化中看到任何好处吗?也许我应该做些其他的事情来改善这些观点,或者(上帝保佑)我应该把它吸干然后继续前进——你的意见是什么?并不是说他们现在的表现如此糟糕以至于引起评论,但我希望事情尽可能好和整洁。
解决方案
您的代码示例建议查询中使用的所有表都驻留在一台服务器上。因此,在该服务器上创建视图似乎是一个不错且合法的选择,因为所有加入和工作都可以在一台服务器上本地完成 - 与您拥有的当前状态相比,只需要通过链接服务器传输结果集。
推荐阅读
- javascript - 根据另一个对象定义 JavaScript 对象的属性
- javascript - 如何从此字符串中获取日期 Wed Dec 11 16:02:54 CET 2019
- wordpress - 如何检索用户自定义字段而不是默认的 WooCommerce 订单字段?
- java - 如何将 FireStore 逻辑分离到自己的类中
- excel - 范围VBA的最小值/最大值
- bash - 如何sshpass多跳?
- python - 尝试执行布尔 AND 时出现 TypeError
- prolog - 产生下一个素数的关系
- spring-boot - 微服务之间的身份验证:Amazon API Gateway
- wordpress - Wordpress 中的特殊字符未显示