我在执行包时收到以下消息。
文本被截断,或者目标代码页中的一个或多个字符不匹配。
我从SQL表中获取数据,该表的字段名称为task_teammember
,数据类型为VARCHAR(MAX)
。包裹执行在源头失败。我键入了将列task_teammber
转换为 VARCHAR(8000)
,它执行包而没有任何错误消息。但是,目标只接收 8000 字符,而源表中只有 8000 字符。
当列定义为VARCHAR(MAX)
时,如何使用SSIS将所有数据从源表传输到目标表?
答案 0 :(得分:41)
您需要使用SSIS数据类型 text stream [DT_TEXT]
从数据类型 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]
将大长度的文本插入源表。在执行包之前,您可以看到源表中包含超过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 Data Types
上详细了解相关信息希望有所帮助。