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

时间:2013-02-05 10:44:42

标签: ssis

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

  

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

我从SQL表中获取数据,该表的字段名称为task_teammember,数据类型为VARCHAR(MAX)。包裹执行在源头失败。我键入了将列task_teammber转换为 VARCHAR(8000) ,它执行包而没有任何错误消息。但是,目标只接收 8000 字符,而源表中只有 8000 字符。

当列定义为VARCHAR(MAX)时,如何使用SSIS将所有数据从源表传输到目标表?

1 个答案:

答案 0 :(得分:41)

您需要使用SSIS数据类型 text stream [DT_TEXT] 从数据类型 varchar(MAX)

的SQL Server表列中获取数据

这是一个简单的示例,说明了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]

将大长度的文本插入源表。在执行包之前,您可以看到源表中包含超过10,000个字符的数据,并且目标表为空。

Before

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

Execution

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

After

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

Advanced editor

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

Data type

以下是SSIS中SQL Server数据类型VARCHAR(MAX)和NVARCHAR(MAX)的映射。

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

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

MSDN Integration Services Data Types

上详细了解相关信息

希望有所帮助。