【发布时间】:2020-02-05 09:39:23
【问题描述】:
我有一些应用程序使用的视图,其中包含对单个其他服务器的大量引用,作为链接服务器(我将调用本地服务器“目标”和远程服务器“源”) - 有点像这样:
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
这似乎是一项艰巨的工作,我担心我只是让我的偏见占了上风。你认为我会从这些变化中看到任何好处吗?也许我应该做些其他的事情来改善这些观点,或者(上帝保佑)我应该把它吸干然后继续前进——你的意见是什么?他们现在的表现并没有那么糟糕以至于引起评论,但我希望事情尽可能好和整洁。
【问题讨论】:
标签: sql-server performance view linked-server openquery