今天我有一个新情况,其中客户问以下问题:
我们在一个文件夹中有 XML 文件。我们需要将这些文件加载到 SQL Server 表列(具有 XML 数据类型)中;我们没有将 XML 输出加载到各种 SQL Server 表中,而是将 XML 文件本身加载到 SQL Server 数据库中具有 XML 数据类型的列中。
根据客户的要求,这应该只在SSIS中完成。所以我以这种方式使用执行 SQL 任务。(除了 XML 文件,我们还需要ImportDate
,FileName
等)
连接类型为 OLE DB;我的 SQL 语句如下:
INSERT INTO dbo.tablename (IncomingXMLfile, ImportDate)
-- I am using just 2 columns as an example for this table--
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'C:\Mic\...........\API_Schemas\ABC.xml', SINGLE_BLOB) AS x;
当我只用一个文件进行硬编码时,这很好用。现在,在C:\Mic\...\API_Schemas
文件夹中,有许多 XML 文件,我需要加载它们中的每一个,除此之外,获取它们ImportDate
(即GETDATE()
),以及文件本身的名称(我暂时没有在插入语句)。我必须使用 ForEachLoop 容器,并将执行 SQL 任务放在这个容器中。
所以这个问题有2个方面:
在执行 SQL 任务中参数化文件名。
使用 ForEachLoop Container(并将此 Execute SQL Task 放入其中)运行文件夹中的每个 XML 文件。
我使用了一个名为Filename
(字符串数据类型)的用户变量,它的值ABC.xml
是(文件夹中一系列 XML 文件中的第一个文件);我以这种方式参数化上述 TSQL 查询(见下文):
INSERT INTO dbo.tablename (IncomingXMLfile, ImportDate)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'C:\Mic\...........\API_Schemas\?', SINGLE_BLOB) AS x;
我将此参数 ( ) 映射到此?
执行 SQL 任务 (ParameterMapping
选项卡) 中的用户变量文件名。查询在执行 SQL 任务中正确解析!但是,当我执行此 SQL 任务时,我收到此错误:
“参数名称无法识别。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。
当我将 XML 文件中的数据(使用 XML 源编辑器,使用数据访问模式(来自变量的 XML 数据)等)加载到 SQL Server 表中时,这种情况完全不同。在我们的例子中,我们将 XML 文件本身加载到具有 XML 数据类型的 SQL Server 表 COLUMN 中,并获取有关从文件夹加载的各种 XML 文件的信息。结果我不确定如何使用变量来运行这个包。
谁能首先帮助我如何正确参数化文件名?
以及稍后如何配置 ForEachLoop 容器以从文件夹中读取每个文件?
我对如何在这种情况下使用用户变量感到困惑。