У меня есть некоторые представления, используемые приложением, которые содержат множество ссылок на один другой сервер, в качестве связанного сервера (я назову локальный сервер «Target» и удаленный сервер «Source») - немного похоже на это :
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
Я ненавижу эти взгляды и хочу знать, оправдан ли я или просто предубежден.
Есть ли лучший способ написать это (производительность, аккуратность, способность публиковать sh на другой сервер и т. Д. c)?
До сих пор мои мысли были таковы:
- Создайте сопутствующую базу данных для источника [Source_Companion] на удаленном компьютере. сервер
- Повторно создайте представление в базе данных [Source_Companion], ссылаясь на базу данных [Source]
- Создайте представление в базе данных [Target]
- Вызовите представление в [ Source] база данных с использованием openquery, с разумно названным связанным сервером.
Create view [vw] as select * from openquery([Source],'SELECT * FROM vw') as t
Это похоже на большую работу, и я беспокоюсь, что просто позволяю своим предубеждениям одолеть меня. Как вы думаете, я вижу какую-то выгоду от этих изменений? Может быть, я должен сделать что-то еще, чтобы улучшить эти взгляды, или (не дай бог), я должен просто смириться с этим и двигаться дальше - каково ваше мнение? Не то, чтобы они выступали так плохо, чтобы вызывать комментарии прямо сейчас, но я хочу, чтобы все было как можно лучше и аккуратнее.