我正在研究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的新手,对数据类型知之甚少。请帮忙。 如果我的描述不明确,请道歉,因为这是我的第一篇文章。
答案 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服务器数据类型的更多信息,请点击以下链接: