货币数据类型溢出

时间:2017-11-24 09:42:38

标签: sql-server ssis casting etl currency

我正在研究SSIS 2008.我的任务是从OLE BD中的表中获取统计信息并将其保存在平面文件中。我在OLE DB中保存的表中使用两个字段,字段是NVARCHAR数据类型。金额和货币是两个字段。一世 想要Amount的SUM,所以尝试使用Decimal和Numeric来进行投射,但它没有用,所以使用了Money,它起作用了。

我的查询是:

select sum(cast(PAID_AMOUNT as money)) as Amount, CUR as AmountCurrency, COUNT(*) as Records 
from Raw_table group by CUR order by 2

我正在使用OLE DB源编辑器 - SQl命令选项来查询语句。单击预览按钮显示结果,没有任何错误。

但是当我执行任务时,我收到一个错误:

  

[Inv Stats [1]]错误:输出列" Amount"出现错误(17)关于输出" OLE DB源输出" (11)。返回的列状态为:"转换失败,因为数据值溢出指定的类型。"。

所以我通过重定向错误来捕获导致平面文件中的行的错误。和捕获的文件:

Amount,AmountCurrency,Records,ErrorCode,ErrorColumn
3073904391,JPY,9806,-1071607691,17

我是SSIS的新手,对数据类型知之甚少。请帮忙。 如果我的描述不明确,请道歉,因为这是我的第一篇文章。

2 个答案:

答案 0 :(得分:1)

来自SQL查询的值money的值为3073904391的值将溢出[DT_I4]类型的列。我不确定你是如何在[DT_I4]中使用OLE DB Source使用该查询结果的(当我从头开始设置它时默认为currency [DT_CY]),但是我建议将Advanced Editor > Input and Output Properties > Output Columns中的数据类型更改为currency [DT_CY]

答案 1 :(得分:1)

根据此MSDN article,如果sql server中的SUM()函数应用于Money数据类型,则返回类型为Money的值

Money的相关SSIS数据类型为DT_CY,因此您必须确保Amount列数据类型为DT_CY,只需右键单击OLEDB源并转到高级编辑器检查这个。

OLE DB源 - >右键单击"高级编辑器" - >输入/输出属性 - > OLE DB源输出 - >扩展"输出列" - >点击Amount列,将数据类型从属性更改为DT_CY

如果您想了解有关SSIS数据类型和相关SQL服务器数据类型的更多信息,请点击以下链接: