Мы используем SSDT для создания конвейера сборки и развертывания с использованием Git и ADO. Для построения решения все перекрестные ссылки на базы данных должны иметь соответствующую ссылку на базу данных в проекте и на них следует ссылаться с помощью [$ (DatabaseVariable)]. Это означает, что каждый раз, когда изменение производится и синхронизируется с помощью Schema Compare, имена баз данных должны заменяться либо вручную, либо с помощью функции поиска и замены. Конечно, существует множество недостатков подхода «найти и заменить», в том числе тот факт, что он будет находить и заменять ссылки в файлах проекта, которые не должны быть переменными базы данных. Я надеюсь, что кто-то знает способ автоматизации этого процесса, который не использует такой метод грубой силы, как поиск и замена.
Я много раз искал это и не нашел ничего полезного.
Вот примерное представление, которое содержит ссылки на несколько баз данных:
CREATE view [Migration].[vwCHILDS_Allegation_Allegation]
as
with src as (
select
cast('' as nvarchar(50)) CEAllegationIdentifier
, (select AllegationTypeId from [$(CWNS_Migration)].Allegation.AllegationType where Code = dfrvmi1.DestinationDataFieldReferenceValueCode) AllegationTypeId
, cast(1 as int) SourceSystemId
, cast(src.IDNBR as nvarchar(64)) SourceSystemIdentifier
, src.IDNBR SourceSystemIdentifier_Numeric
, case when src.CRET_DT_TM = '0001-01-01' then null else src.CRET_DT_TM end SourceSystemCreatedDateTime
, case when src.MOD_DT_TM = '0001-01-01' then null else src.MOD_DT_TM end SourceSystemModifiedDateTime
, (
select
max(pe.PersonId)
from
[$(CWNS_Migration)].PersonIdentity.PersonIdentifier pe
join [$(CHILDSDB2)].VLCHA.STAFF_USERID st on cast(st.FK_STAFFFK_PERSID as nvarchar(64)) = pe.Identifier
and pe.PersonIdentificationSystemId = 4
where
st.USERID = ltrim(rtrim(src.MOD_USR_ID))) SourceSystemModifiedPersonId
from
[$(CHILDSDB2)].VLCHA.ALGTN src
left join [$(DataCatalog)].dbo.DataFieldReferenceValueMappingInfo dfrvmi1 on dfrvmi1.SourceDataFieldReferenceValueDataFieldId = 216
and dfrvmi1.SourceDataFieldReferenceValueCode = ltrim(rtrim(src.FK_ALGTN_PRIORICTG))
and dfrvmi1.DestinationDataFieldReferenceValueDataFieldId = 20605
)
select
src.*
from
src
left join [$(CWNS_Migration)].Allegation.Allegation tgt on tgt.SourceSystemId = src.SourceSystemId and tgt.SourceSystemIdentifier = src.SourceSystemIdentifier
left join [$(CWNS_Migration)].Quarantine.Allegation q on q.SourceSystemId = src.SourceSystemId and q.SourceSystemIdentifier = src.SourceSystemIdentifier
and q.QExecutionId = 1
where
q.QExecutionId is null
and (
isnull(src.AllegationTypeId, 0) <> isnull(tgt.AllegationTypeId, 0)
or isnull(try_cast(src.SourceSystemCreatedDateTime as datetime), '') <> isnull(tgt.SourceSystemCreatedDateTime, '')
or isnull(try_cast(src.SourceSystemModifiedDateTime as datetime), '') <> isnull(tgt.SourceSystemModifiedDateTime, '')
or isnull(src.SourceSystemModifiedPersonId, 0) <> isnull(tgt.SourceSystemModifiedPersonId, 0)
)
Я также надеюсь, что есть способ избежать, чтобы Schema Compare всегда показывал переменные как различия с базой данных.