2015-10-21 23 views
0

我正在将数据从源迁移到目标。某个映射指定如果一个字段不为空,则会创建一个额外的记录并将其插入到目标表中。我的查询看起来像这样至今:从选择查询插入期间追加行

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语句SELECT查询插入过程中附加一个行?

回答

0

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

  1. 插入从源表中的所有记录到临时表
  2. 插入在您的所有不为空记录的其他记录将您的源表添加到临时表中

既然您的临时表具有完整的数据集,那么将暂存表中的所有内容都插入到目标表中。

0

如果这将是一段时间内正在进行的迁移,并且/或者没有人会在迁移结束之前使用新数据库,那么可以考虑在表上使用触发器。例如:

CREATE TRIGGER trg_Tenant_Improvement_Insert 
ON dbo.Tenant_Improvement__c 
AFTER INSERT 
    INSERT INTO SecondaryInsertTable (Field1, Field2, ....) 
    SELECT FieldA, FieldB, ...... 
    FROM INSERTED 
    WHERE INSERTED.FieldX IS NOT NULL 
GO 

而且一旦完成迁移,您可以禁用/放弃触发器。