Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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/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
Sql server 如何使SSI截断平面文件目标中的数字字段_Sql Server_Ssis - Fatal编程技术网

Sql server 如何使SSI截断平面文件目标中的数字字段

Sql server 如何使SSI截断平面文件目标中的数字字段,sql-server,ssis,Sql Server,Ssis,我想要一些关于在SSIS中处理截断问题的建议。我在表中有一列Col1,它是MONEY。我想把它输出到一个文本文件中(固定宽度,右边参差不齐)。在输出文件中,包含Col1的列的宽度必须仅为8个字符 在OLEDB数据源中,Col1被指定为: 货币[dtu CY]在外部列和输出列选项卡中 在平面文件连接管理器的高级选项卡中,Col1被指定为: currency[DT_CY],将InputColumnWidth设置为8 如果我用123456789.00填充Col1并执行任务,OLEDB源将成功并将行传递

我想要一些关于在SSIS中处理截断问题的建议。我在表中有一列Col1,它是
MONEY
。我想把它输出到一个文本文件中(固定宽度,右边参差不齐)。在输出文件中,包含Col1的列的宽度必须仅为8个字符

在OLEDB数据源中,Col1被指定为:
货币[dtu CY]
在外部列和输出列选项卡中

在平面文件连接管理器的高级选项卡中,Col1被指定为:
currency[DT_CY]
,将
InputColumnWidth
设置为8

如果我用123456789.00填充Col1并执行任务,OLEDB源将成功并将行传递到目标,但任务失败,原因是:

错误:在DFT_测试时0xC02020A1,FFDEST_测试[3955]:数据转换 失败。列“Col1”的数据转换返回状态值4 “和状态文本”文本被截断或一个或多个字符没有 在目标代码页中匹配。“

错误:干膜厚度试验时0xC02020A0, FFDEST_测试[3955]:无法复制或转换列的平面文件数据 “Col1”

我希望避免这些截断错误。在源代码的错误输出中,我将Col1的截断属性从Fail组件更改为Ignore Failure。我本以为这会解决问题,但执行任务仍然会出现同样的错误


是否有人可以提供一些指导,让SSI简单地将列截断为8个字符?

使用
派生列
任务创建一个8个字符的列,并从
money
列填充它。然后在Destination组件中,将
派生列
映射到Col1 Destination,而不是原始列


或者,更好的是,在源组件中,使用SQL查询将货币列转换为varchar(8)或char(8)列。

我意识到可以通过源组件中的T-SQL实现这一点,但我想知道的是如何在SSIS中配置组件来实现这一点。在DTS中,复制列转换默认截断。在SSIS中,我们有派生列或数据转换转换。我意识到我可以使用SSIS中的数据转换转换将货币值转换为字符串,然后取最左边的8个字符。但有几十个领域。要为每个公式执行此操作,需要花费大量时间单击并手动输入公式。在T-SQL中,我可以将列名列表输入Excel,创建一个公式,并在几秒钟内获得执行转换所需的SELECT语句。我认为这是另一个“在T-SQL中这样做是因为在SSIS中这样做是混乱的/耗时的/容易出错的/不可能的”的例子!如果你想学习BiML,你可以只使用SSI来模拟excel的功能。这是一个很好的建议。我用谷歌搜索了一下,它看起来很有前途。