我们正在使用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总是将变量显示为与数据库的差异。