派生列转换问题

时间:2020-04-30 21:49:45

标签: sql-server ssis

我有一个int列,想根据条件加载数据,例如:

  • 如果该值为1,则加载插入的列
  • 值是2,然后使用DELETED加载列
  • 值是3,然后使用UPDATED加载列

但是当我尝试执行此操作时,出现以下错误:

Error at Data Flow Task [Derived Column [1666]]: Attempt to parse the expression "[Copy of operation]== "1" ? "INSERTED"" failed. The expression might contain an invalid token, an incomplete token, or an invalid element. It might not be well-formed, or might be missing part of a required element such as a parenthesis.    
Error at Data Flow Task [Derived Column [1666]]: Cannot parse the expression "[Copy of operation]== "1" ? "INSERTED"". The expression was not valid, or there is an out-of-memory error.    
Error at Data Flow Task [Derived Column [1666]]: The expression "[Copy of operation]== "1" ? "INSERTED"" on "Derived Column.Outputs[Derived Column Output].Columns[Derived Column 1]" is not valid.    
Error at Data Flow Task [Derived Column [1666]]: Failed to set property "Expression" on "Derived Column.Outputs[Derived Column Output].Columns[Derived Column 1]".

 (Microsoft Visual Studio)

===================================

Exception from HRESULT: 0xC0204006 (Microsoft.SqlServer.DTSPipelineWrap)

------------------------------
Program Location:

1 个答案:

答案 0 :(得分:1)

我认为问题是您的表达不完整。三元运算符? :包含三个部分(boolean expression) ? True bits : False bits

[Copy of operation]== "1" ? "INSERTED" : [Copy of operation]== "2" ? "DELETED" : [Copy of operation]== "3"? "UPDATED" : "UNKNOWN"

该表达式将显示为

  • 如果操作的列副本的值为1,则返回INSERTED
    • else如果操作的列副本的值为2,则返回DELETED
      • else如果操作的列副本的值为3,则返回UPDATED
        • 否则返回未知

这确实假定列Copy of operation的数据类型是字符串。如果是整数,则可以删除值1,2,3周围的双引号。

在注释中,您已指出__ $ operation将操作的值表示为where 1 = delete, 2 = insert, 3 = update (before change), and 4 = update (after change)

继续上述模式,并消除差异(在注释中删除1,在问题中插入1)以生成值。

不同方法是使用一个很小的查找表。您甚至可以使用内联查询定义它,并使用查找组件将您的操作描述添加到数据流中

SELECT
    OperationId
,   OperationName
FROM
(
    VALUES ('1', 'INSERTED')
    , ('2', 'DELETED')
   -- etc
)D(OperationId, OperationName);

再次,确保您的数据类型对齐

相关问题