我将数据从源迁移到目标。某个映射指定如果某个字段不为null,则需要创建一个额外的记录并将其插入到目标表中。到目前为止,我的查询看起来像这样:
select Cast('' as nchar(18)) as Id,
Cast('' as nvarchar(255)) as Error,
case
when a.CONSTR_CASH_ALWNC_TYPE = 'Amount' then 'Amount'
when a.CONSTR_CASH_ALWNC_TYPE = 'Per Sq. Ft.' then 'Rate/SF'
end as TI_Input__c,
case
when a.CONSTR_CASH_ALWNC_TYPE <> null or a.CONSTR_CASH_ALWNC_TYPE <> '' then 'Cash Allowance'
end as Improvement_Type__c,
case
when a.CONSTR_CASH_ALWNC_TYPE = 'Amount' then a.CONSTR_CASH_ALWNC_AMT
when a.CONSTR_CASH_ALWNC_TYPE = 'Per Sq. Ft.' then a.CONSTR_CASH_ALWNC_PSF_RATE
end as Amount_Rate__c,
case
when a.LANDLORD_WORK_EST_CST <> null or a.LANDLORD_WORK_EST_CST <> '' then
-- append another row with different values for fields TI_Input__c,
-- Improvement_Type__c, Amount_Rate__c to be inserted
-- destination table
into [Migration_DataUpdate].dbo.Tenant_Improvement__c
-- source table
from [SSLE].dbo.Deal_Original_or_Amendment a
LEFT JOIN [SALESFORCE_LOCAL].dbo.[Opportunity] b on a.[DEAL_ID] = b.Opportunity_Id__c
如何在选择查询的插入过程中使用case语句附加行?
答案 0 :(得分:0)
我会创建一个临时表,用于使用两个查询暂存您的数据:
既然您的临时表具有完整的数据集,请将临时表中的所有内容插入到目标表中。
答案 1 :(得分:0)
如果这将是一段时间内正在进行的迁移和/或在迁移结束之前没有人将使用新数据库,您可以考虑在表上使用触发器。像这样:
<configuration>
<system.webServer>
<handlers>
<add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="..\approot\web.cmd" arguments="--ASPNET_ENV Development" stdoutLogEnabled="false" stdoutLogFile="..\logs\stdout.log" startupTimeLimit="3600"></httpPlatform>
</system.webServer>
</configuration>
完成迁移后,您可以禁用/删除触发器。