我做了这个手术
ALTER proc [dbo].[adenti]
(
@entra nvarchar(max)
)
as
DECLARE @sql varchar(4000);
SET @sql = 'INSERT INTO provaxml (arquivo) SELECT CAST(BulkColumn AS XML) FROM OPENROWSET(BULK ''' + @entra + ''', SINGLE_BLOB) as arquivo';
EXEC( @sql );上面的代码起作用。
是否可以使用Integration将路径中的所有XML文件插入SQL表?
发布于 2012-10-10 18:04:47
你可以做两种不同的方法。
第一个是user569711概述的,使用一个ForEach枚举器并调用您现有的存储过程。这样做的好处是,您的行为应该与您当前所经历的完全相同,并且您的测试应该只需要专注于确保SSIS包获得正确的文件。
第二种方法是使用SSIS的开箱即用功能来处理导入BLOB类型。
控制流
您需要根据您的方法定义1到2个变量。这两种类型都是字符串数据类型。我创建了SourceFolder和CurrentFileName。前者定义了文件的来源,并在这两种方法中使用。后者在ForEach循环容器中用于捕获“当前”文件。

数据流
要使数据流工作,您需要获得添加到管道中的文件名的完全限定列表。最简单的方法是使用脚本转换,充当源代码,并将其添加到满足条件的所有文件(*.xml)中。

前路集装箱
按此配置
集合

可变映射

执行SQL任务
配置


脚本源
此任务将将可用文件添加到数据流中。次要注意,这将遍历子文件夹,这与我们如何配置Foreach不同。这是对第三个参数(或省略)的简单更改,使其仅限于顶层。
标识您的变量,以便它在脚本任务中可用

添加适当的输出列。你的长度可能因环境而异。

剧本在这里
using System;
using System.Data;
using System.IO;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
string fileMask = string.Empty;
string sourceFolder = string.Empty;
fileMask = @"*.xml";
sourceFolder = this.Variables.SourceFolder;
foreach (string fileName in Directory.GetFiles(sourceFolder, fileMask, SearchOption.AllDirectories))
{
Output0Buffer.AddRow();
Output0Buffer.FileName = fileName;
Output0Buffer.SourceName = "Dataflow";
}
}
}导入列变换
像这样配置

请注意这里的ID

用名称将ID绑定回列

OLE DB目的地
配置。不支持快速加载选项。


参考文献
关于使用导入列变换的很好的文章
https://stackoverflow.com/questions/12817099
复制相似问题