SSIS 派生列将 numeric(6,0) 转换为 ANSI 字符串,删除前导数字

发布于 2024-11-30 14:11:09 字数 583 浏览 1 评论 0原文

我有一个从 Oracle 数据源读取表的包。 SSIS 为表(标识列)的代理键分配了数字(6,0) 数据类型。

当我将该列放入派生列组件并将其转换为 (DT_STR,100,1252) 以存储在下游的查找表中时,字符串列会产生不正确的输出 - 但以一种非常奇怪的方式。

下面是一些示例输出:

ID  ID_AS_STRING
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10   0
11  11
12  12
.
.
20   0
21  21
22  22
.
.
.
30   0
.
.
40   0

基本上,如果 ID 能被 10 整除,它就会丢弃 ID 的前导数字(这种情况会持续到成百上千,即 740 变成 40,9920 变成 920。)

不用说,这是双重错误,因为它会错过一些用于查找的 ID,并创建其他 ID 的重复项。

如果将初始列数据类型更改为四位整数,它就可以正常工作,因此在某种程度上,这个问题只是学术性的。但是谁能解释一下 SSIS 中发生了什么事情,从而删除了 mod-10 数字的前导数字呢?

I have a package that's reading a table from an Oracle data source. The surrogate key for the table (an identity column) was assigned a numeric(6,0) data type by SSIS.

When I take that column into a Derived Column component and cast it as (DT_STR,100,1252) to store in a lookup table downstream, the string column produces incorrect output - but in a very strange way.

Here's some sample output:

ID  ID_AS_STRING
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10   0
11  11
12  12
.
.
20   0
21  21
22  22
.
.
.
30   0
.
.
40   0

Basically, it drops the leading digit of the ID if it's divisible by 10 (this goes on into the hundreds and thousands, i.e. 740 becomes 40, 9920 becomes 920.)

Needless to say, this is doubly wrong, since it misses some IDs for the lookup and creates duplicates of others.

If you change the initial column data type to four-bit integer it works fine, so in a way this question is merely academic. But can anyone explain what's going on in SSIS to drop that leading digit of a mod-10 number?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文