我在执行包时收到以下消息.
文本被截断或目标代码页中的一个或多个字符不匹配.
我从一个SQL表中获取数据,该表具有task_teammember数据类型的字段名称VARCHAR(MAX).包裹执行在源头失败.I型铸造列task_teammber到VARCHAR(8000)其中没有任何错误信息执行该包.但是,目标只接收8000个字符,而源表中的字符数超过8000个.
当列定义为VARCHAR(MAX)?时,如何使用SSIS将所有数据从源表传输到目标表?
小智 44
您需要使用SSIS数据类型text stream [DT_TEXT]从数据类型的SQL Server表列中获取数据varchar(MAX)
下面是一个简单的示例,说明了SSIS如何自动从源中推断出数据类型.该示例使用SQL Server 2008 R2数据库和SSIS 2008 R2
在SQL Server数据库中创建以下表以存储源文本,并使用目标使用SSIS包插入文本.
CREATE TABLE [dbo].[SourceTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[SourceText] [varchar](max) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[DestinationTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DestinationText] [varchar](max) NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
将大长度的文本插入源表.在执行包之前,您可以看到源表中包含超过10,000个字符的数据,并且目标表为空.

使用数据库的连接管理器创建SSIS包.在控制流任务上放置数据流任务.在数据流任务,放置一个OLE DB源和OLE DB目标从传输数据dbo.SourceTable到dbo.DestinationTable.这里的屏幕截图显示了包的执行状态.

如果再次运行查询,您将看到目标表使用SSIS包填充源表中的文本而没有任何截断错误.

返回包的数据流任务选项卡,右键单击OLE DB Source,然后单击Show Advanced Editor...

在Advanced Editor for OLE DB Source,单击输入和输出属性选项卡.展开External Columns并选择SourceText.您会注意到SSIS stream [DT_TEXT]根据VARCHAR(MAX)源表上定义的数据类型将列数据类型设置为文本.

以下是SSIS中SQL Server数据类型VARCHAR(MAX)和NVARCHAR(MAX)的映射.
在MSDN Integration Services数据类型上阅读有关它的更多信息
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
62737 次 |
| 最近记录: |