ale*_*ero 0 sql sql-server ssis sql-server-2008
我有这个程序
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 );
Run Code Online (Sandbox Code Playgroud)
上面的代码有效.
是否可以使用Integration Services将路径中的所有XML文件插入到SQL表中?
bil*_*nkc 11
您可以采用两种不同的方法.
第一个是user569711概述并使用ForEach枚举器并调用现有的存储过程.这样做的好处是您的行为应该与您当前遇到的完全一样,并且您的测试应该只关注确保SSIS包正在拾取正确的文件.
第二种是使用SSIS的开箱即用功能来处理导入BLOB类型.
您将需要根据您的方法定义1到2个变量.两者都是字符串数据类型.我创造了SourceFolder和CurrentFileName.前者定义了文件的来源,并用于任何一种方法.后者在ForEach循环容器中用于捕获"当前"文件.

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

这样配置
采集

变量映射

这样配置


此任务将可用文件添加到数据流中.小注意,这将遍历子文件夹,这与我们配置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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
像这样配置

在这里记下ID

将该ID与名称绑定回列

配置.不支持快速加载选项.


关于使用导入列转换的好帖子
| 归档时间: |
|
| 查看次数: |
4675 次 |
| 最近记录: |