Здесь есть только одно реальное решение, как было упомянуто в другом ответе: «исправьте» имена баз данных на ваших серверах, сделайте их последовательно именованными. Это означает, что имя базы данных на всех серверах должно быть одинаковым. Исходя из вашего вопроса, это будет PatientDemographics_Migration
и Encounter_Migration
.
. Вы можете переименовать базу данных, как описано в документации :
USE master;
GO
ALTER DATABASE MyTestDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy ;
GO
ALTER DATABASE MyTestDatabaseCopy SET MULTI_USER
GO
Очевидно, замените MyTestDatabase
и MyTestDatabaseCopy
соответствующими именами.
Конечно, переименование ваших баз данных также может нарушить другой код, если вы использовали 3 части именования в другом месте, так что вы будете после того, как вы переименуете базу данных, нужно также исправить определения этих объектов.
Как я уже упоминал в своем комментарии к вопросу, VIEW
объекты не могут динамически ссылаться на объекты. Это должно быть четко определено как ссылка, указывающая c объекты, и может содержать только оператор SELECT
(допускаются CTE, поскольку они являются выражениями).
Однако они могут использовать синонимы, которые может быть полезным в этих обстоятельствах. Эти синонимы по-прежнему необходимо создавать и определять специально для каждого экземпляра, однако тогда ваше определение VIEW
будет иметь следующий вид: c.
Во-первых, вы создадите SYNONYM
:
USE {Database containing the VIEW};
GO
CREATE SYNONYM dbo.PatientDemographics FOR [PatientDemographics_Migration].[dbo].[PatientDemographics];
GO
CREATE SYNONYM dbo.PatientEncounter FOR [Encounter_Migration].[dbo].PatientEncounter;
GO
Эти синонимы будут отличаться для каждого экземпляра, который имеет другое имя для базы данных. Таким образом, для суффикса _P
это будет:
CREATE SYNONYM PatientDemographics FOR [PatientDemographics_Migration_P].[dbo].[PatientDemographics];
Затем, как только вы создадите синонимы на заказ для экземпляра, в базе данных будет создан VIEW
в, вы можете создать VIEW
, используя определение stati c во всех случаях:
CREATE VIEW [dbo].[vw_migration_Demographics]
AS
SELECT DISTINCT
patdemo.NHI AS [NHI],
demo.FamilyName AS [Surname],
demo.FirstName AS [FirstName],
demo.Prefix AS [Title],
demo.Gender AS [Gender]
FROM
[dbo].[PatientDemographics] demo --Notice no 3 part naming as it references the synonym in the same database
INNER JOIN
[dbo].PatientEncounter pe ON pe.NHI = demo.nhi; --Notice no 3 part naming as it references the synonym in the same database