我在执行包时收到以下消息。
文本被截断或目标代码页中的一个或多个字符不匹配。
我正在从具有task_teammember
数据类型的字段名称的 SQL 表中获取数据VARCHAR(MAX)
。包执行在源头失败。我输入了执行包的列task_teammber
,VARCHAR(8000)
没有任何错误消息。但是,目标仅接收8000 个字符,而源表中有超过8000 个字符。
当列定义为时,如何使用 SSIS 将所有数据从源表传输到目标表VARCHAR(MAX)
?
我在执行包时收到以下消息。
文本被截断或目标代码页中的一个或多个字符不匹配。
我正在从具有task_teammember
数据类型的字段名称的 SQL 表中获取数据VARCHAR(MAX)
。包执行在源头失败。我输入了执行包的列task_teammber
,VARCHAR(8000)
没有任何错误消息。但是,目标仅接收8000 个字符,而源表中有超过8000 个字符。
当列定义为时,如何使用 SSIS 将所有数据从源表传输到目标表VARCHAR(MAX)
?
您需要使用 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.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 集成服务数据类型上阅读有关它的更多信息
希望有帮助。