29

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

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

我正在从具有task_teammember数据类型的字段名称的 SQL 表中获取数据VARCHAR(MAX)。包执行在源头失败。我输入了执行包的列task_teammberVARCHAR(8000)没有任何错误消息。但是,目标仅接收8000 个字符,而源表中有超过8000 个字符。

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

4

1 回答 1

48

您需要使用 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]

将大长度的文本插入源表。执行打包前可以看到源表中的数据超过10000个字符,目的表为空。

前

创建一个带有数据库连接管理器的 SSIS 包。在控制流任务上放置一个数据流任务。在数据流任务中,放置一个 OLE DB Source 和 OLE DB Destination 以将数据从 传输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 集成服务数据类型上阅读有关它的更多信息

希望有帮助。

于 2013-02-05T11:08:00.037 回答