首页 > 解决方案 > 如何使用 SSIS 将文档(文本、csv、excel)或 BLOB 文件加载到 varbinary(MAX) 数据库列中

问题描述

我尽我所能寻找任何资源,但我只看到将图像加载到varbinary(max)SQL Server 中的列中的示例。我想将实际文档转换为varbinary格式,并将它们加载到数据库列中。

我会担心以后转换它们。我知道你会说“当你可以只存储文件的目录并从服务器上的文件位置检索文件时,你为什么要这样做?” 这是因为我们正在创建一个用于发送通知的框架,而我们正在加载的 BLOB 文件将是文档 - 或任何类型的附件。这正是我老板想要的方式。

CREATE TABLE [dbo].[AEI_Notification_Artifacts]
(
    [artifact_id] [BIGINT] IDENTITY(1,1) NOT NULL,
    [notification_id] [BIGINT] NOT NULL,
    [artifact] [VARBINARY](MAX) NULL,

    CONSTRAINT [PK_AEI_Notification_Artifacts] 
        PRIMARY KEY CLUSTERED ([artifact_id] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

我正在尝试通过平面文件和导入列任务加载文件并在 SSIS 中转换它们......但我发现的资源仅适用于图像。我想我需要创建一个手动复杂的脚本来转换数据然后流式传输。

标签: c#sqlssisblob

解决方案


我们无需在 SSIS 中使用脚本任务即可处理此问题。

这是一个小例子。在您的情况下,您可以将 Source 组件替换为您的 FlatFile 源。FlatFile 源应该输出一列,它是C:\support\yourfile.bin您希望导入的文件的文件路径(例如:)。

基本数据流示例

接下来,我们将配置 Import Column 组件:

首先让我们选择要用作输入的列,这应该是上面的文件路径列。 示例数据流示例

接下来我们需要添加我们要导入的列。首先选择导入列输出/输出列,然后按下Add Column按钮。接下来设置DataType[DT_IMAGE](这将varbinary(MAX)在写入目标时转换为)。最后记下 LineageID。 配置添加的导入列设置

现在回到 Import Column Input\Input Columns\FilePath。选择该列,然后Customer Properties设置FileDataColumnID为我们之前提到的 LineageID。 将 LineageID 分配给输入列

现在您应该准备好将数据放入您选择的目的地。

[编辑:错别字]


推荐阅读