Sql server 派生列转换的问题

Sql server 派生列转换的问题,sql-server,ssis,Sql Server,Ssis,我有一个int列,希望根据条件加载数据,例如: 如果该值为1,则使用插入的 值为2,然后加载列并删除 值为3,然后使用更新的 但当我尝试这样做时,我得到了以下错误: Error at Data Flow Task [Derived Column [1666]]: Attempt to parse the expression "[Copy of operation]== "1" ? "INSERTED"" failed. The expression might contain an inv

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

  • 如果该值为1,则使用插入的
  • 值为2,然后加载列并删除
  • 值为3,然后使用更新的
但当我尝试这样做时,我得到了以下错误:

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:

我想问题是你的表情不完整。三元运算符
?:包含三个部分
(布尔表达式)?真位:假位

[Copy of operation]== "1" ? "INSERTED" : [Copy of operation]== "2" ? "DELETED" : [Copy of operation]== "3"? "UPDATED" : "UNKNOWN"
这句话的意思是

  • 如果操作的“复制”列的值为1,则返回INSERTED
    • 否则,如果操作的列copy的值为2,则返回DELETED
      • 否则,如果操作的列copy的值为3,则返回UPDATED
        • 否则返回未知
这确实假设操作副本的列
的数据类型为字符串。如果它是一个整数,那么您需要删除值1、2、3周围的双引号

在注释中,您已经指出了_$operation将操作的值表示为
,其中1=删除,2=插入,3=更新(更改前),4=更新(更改后)

继续使用上述模式,同时更改差异(1在注释中删除,1在问题中插入),以生成值

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

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

同样,确保数据类型对齐

这是您的表达式吗<代码>[操作副本]==“1”?“INSERTED”
yes Correct billinkc,这是执行的操作的更改数据捕获列,例如显示更改操作类型的_u$operation,其中1=删除,2=插入,3=更新(更改前),4=更新(更改后)。我希望列数据看起来应该是删除的,而不是1