SSIS - 传递给存储过程时变量截断/转换

时间:2014-11-18 16:15:25

标签: sql sql-server stored-procedures ssis

我正在处理从CSV文件获取数据的SSIS包,其中有1列,每行的数据作为参数传递给存储过程。每行是9个数字和1个字母(即10个字符串)。

包的结构如下:

For loop that iterates over files in a given directory.
Data Flow ( Flat File Source getting CSV file -> Recordset Destination )
-> For loop that iterates over each record.
Execute SQL Task calls stored procedure with the value from each record as a parameter.

问题:

基于存储过程中的调试代码,这是传递的内容:

Actual data: 111111111X, 222222222Y, 333333333Z. What's received: 1, 2, 3.

我添加了一些断点并观察了用于存储字符串的变量,我可以看到它在每次迭代期间的值是正确的,即在存储过程调用之前和之后的完整10-char字符串。

基于一些谷歌搜索,这使我认为在数据从变量传递到执行SQL任务和调用之间发生了一些类型转换。

此链接表示任务有时会投放数据:

https://social.msdn.microsoft.com/forums/sqlserver/en-US/eadaee01-33b0-47f3-8702-34a40d2fe333/debug-execute-sql-task-what-parameter-value-is-passed

我排除了类型/长度的废话并且观察到的变量确认了。我也尝试在声明中投票,但没有用。

任何人都可以确认我的假设和/或提供解决方案吗?

1 个答案:

答案 0 :(得分:0)

在以下情况下可能会发生:

检查源平面文件是否为UNICODE文件 和

设置目标列定义为nvarchar(max)。