INT 类型的源数据库字段通过 OLE DB 源读取。它最终被写入平面文件目标。目标平面文件连接管理器 > 高级页面将其报告为four-byte signed integer [DT_I4]
.
这种数据类型让我认为它表示二进制。显然,事实并非如此。我很惊讶它不是更通用的numeric [DT_NUMERIC]
.
我将此类型设置更改为single-byte signed integer [DT_I1]
。我预计这会失败,但事实并非如此。尽管该字段的值始终 > 127,但该过程产生了相同的结果。为什么这没有失败?
产生的一些值是
1679576722
1588667638
1588667638
1497758544
1306849450
1215930367
1215930367
1023011178
1932102084
显然,在a的范围之外single-byte signed integer [DT_I1]
.
作为一个相关的问题,是否可以将二进制数据输出到平面文件?如果是这样,应该使用什么设置以及在哪里?
数据类型验证
我认为这个问题与所使用的连接管理器有关,因为数据类型验证(在管道之外)不是由集成服务完成的,而是由服务提供者完成的:
- 适用于 Excel 和 Access 的 OLEDB
- 用于 SQL Server 的 SQL 数据库引擎
- ...
到那个时刻平面文件连接管理器, it 不保证任何数据类型的一致性因为所有的值都是存储为文本。例如,尝试添加平面文件连接管理器并选择包含名称的文本文件,尝试将列数据类型更改为日期并转到列预览选项卡,它将显示所有列,没有任何问题。它只处理行分隔符、列分隔符、文本限定符和用于从平面文件读取的通用属性。(类似于VB.NET中的TextFieldParser类)
数据类型可能导致异常的唯一情况是当您使用平面文件源时,因为平面文件源将创建一个外部柱当 SSIS 尝试从平面文件源读取时,在平面文件连接管理器中使用定义的元数据并将它们链接到原始列(您可以看到,当您打开平面文件源的高级编辑器时)外部列将抛出异常.
二进制输出
您应该在包内将该列转换为二进制并将其映射到目标列。例如,您可以使用脚本组件来执行此操作:
public override void myInput_ProcessInputRow(myInputBuffer Row)
{
Row.ByteValues=System.Text.Encoding.UTF8.GetBytes (Row.name);
}
我还没有尝试这是否适用于派生列或数据转换。
参考
- 将输入转换为 (DT_BYTES,20)
-
SSIS 中的 DT 字节
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)