Sql server 派生列转换的问题
我有一个int列,希望根据条件加载数据,例如: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
- 如果该值为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