当数据库列定义为VARCHAR(MAX)时,如何使用SSIS传输数据?

use*_*874 25 ssis

我在执行包时收到以下消息.

文本被截断或目标代码页中的一个或多个字符不匹配.

我从一个SQL表中获取数据,该表具有task_teammember数据类型的字段名称VARCHAR(MAX).包裹执行在源头失败.I型铸造列task_teammberVARCHAR(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.SourceTabledbo.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)的映射.

VARCHAR(MAX)--->文本流[DT_TEXT]

NVARCHAR(MAX)---> Unicode文本流[DT_NTEXT]

MSDN Integration Services数据类型上阅读有关它的更多信息

希望有所帮助.