从“选择查询”插入期间附加行

时间:2015-10-21 16:31:59

标签: sql-server tsql

我将数据从源迁移到目标。某个映射指定如果某个字段不为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语句附加行?

2 个答案:

答案 0 :(得分:0)

我会创建一个临时表,用于使用两个查询暂存您的数据:

  1. 将源表中的所有记录插入临时表
  2. 将源表中所有非空记录的附加记录插入临时表
  3. 既然您的临时表具有完整的数据集,请将临时表中的所有内容插入到目标表中。

答案 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>

完成迁移后,您可以禁用/删除触发器。