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

2019-07-19 06:32发布

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

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

我从其中有一个字段名称的SQL表提取数据task_teammember数据类型为VARCHAR(MAX) 该包装exeuction在源失效。 I型铸造列task_teammberVARCHAR(8000)其没有任何错误信息执行该包。 然而,尽管有在源表中超过8000个字符的目的地只接收8000个字符。

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

Answer 1:

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

插入大长度的文本到源表。 你可以看到的数据包含超过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)在源表中定义。

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

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

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

了解更多关于它的MSDN Integration Services数据类型

希望帮助。



文章来源: How to transfer data using SSIS when database columns are defined as VARCHAR(MAX)?
标签: ssis