Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Can';使用SSI将DT_NTEXT转换为numeric_Sql_Ssis - Fatal编程技术网

Sql Can';使用SSI将DT_NTEXT转换为numeric

Sql Can';使用SSI将DT_NTEXT转换为numeric,sql,ssis,Sql,Ssis,我们通过Power Query从web加载CSV。在其他列中,有三个数据类型为DT_NTEXT的money列作为输出列。我已经尝试使用数据转换任务作为第一件事,将列转换为DT_WSTR(4000),然后在下面的派生列任务中使用以下表达式将它们转换为数值(17,5): TRIM(price_conv) == "" ? NULL(DT_NUMERIC,17,5) : ((DT_NUMERIC,17,5)TRIM(price_conv)) 不幸的是,这仍然失败 错误消息: [派生

我们通过Power Query从web加载CSV。在其他列中,有三个数据类型为DT_NTEXT的money列作为输出列。我已经尝试使用数据转换任务作为第一件事,将列转换为DT_WSTR(4000),然后在下面的派生列任务中使用以下表达式将它们转换为数值(17,5):

TRIM(price_conv) == "" ? NULL(DT_NUMERIC,17,5) : ((DT_NUMERIC,17,5)TRIM(price_conv))
不幸的是,这仍然失败

错误消息:

[派生列[2]]错误:SSIS错误代码DTS_E_inducedTransfersFailureOnError。“派生列”失败,因为发生了错误代码0xC0049063,“派生列的输出[派生列的输出],“列的[price_-Derived]”上的错误行处理指定错误时失败。指定组件的指定对象上发生错误。在此之前可能会发布错误消息,其中包含有关故障的更多信息

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“erived column”(2)上的ProcessInput方法在处理输入“Inputof The derived column”(3)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关故障的更多信息

PS:错误消息部分翻译自德语

我还尝试在Power查询源的高级编辑器中设置DT_WSTR,但也失败了


有人有什么想法吗?

问题是,从ntext到数字、引用没有隐式或显式转换:

修剪首先会失败,因此您可能需要按照billinkc的建议进行双重转换,转换为wstr、修剪,然后转换为数值:

(DT_NUMERIC,17,5)TRIM((DT_WSTR,20)(price_conv))

我不得不对分隔符(.and,)使用replace函数,然后它就工作了

#1使用数据转换任务或在派生列任务中转换为DT_WSTR

#2注意分离器,必要时使用更换功能进行更换

例如:

TRIM(origprice_conv) == "" ? NULL(DT_NUMERIC,17,5) : ((DT_NUMERIC,17,5)REPLACE(TRIM(origprice_conv),".",",")) 
origprice_conv已转换为DT_WSTR

遗憾的是,SSIS在这里没有给出有意义的错误消息


我的问题有两个方面,但Data Viewer帮助确定了问题。第一个问题是,
origprice\u conv
的值可能为空,默认的转换不起作用。我通过将null转换为正确的DT_数字规范来解决这个问题。第二个问题是源数据在数据中使用了美式小数位。在德国,转换期望字符串为“123,45”,而不是“123.45”。请注意,句号是德国的千位分隔符。

如果将几个派生列任务链接在一起会发生什么?DT_NTEXT至DT_WSTR(4000)。将dt_wstr转换为数值的派生列,但在dt_wstr的输出和dt_数值之前添加数据查看器。这里的数据合适吗?有空的吗?本地化呢?鉴于您的错误消息是从德语翻译过来的,我不知道转换后的字符串是“123,45”还是“123.45”,即使句点是DEThank you的千位分隔符。这是一个暗示。而且,分隔带是金色的。表达式:TRIM(origprice_conv)==“”?NULL(DT_NUMERIC,17,5):((DT_NUMERIC,17,5)REPLACE(TRIM(origprice_conv),“,”,“,”)origprice_conv已转换为DT_WSTR。我已经尝试过了。错误如分隔符所述。