如何更正此SQL查询以读取C:\Files\文件夹中存在的所有XML文件,而不仅仅是Test.xml文件?

CREATE TABLE Projet 
(
    UID int, 
    nom varchar(50), 
    prenom varchar(50), 
    matricule varchar(50), 
    lien varchar(100)
)

INSERT INTO Projet (UID, nom, prenom, matricule, lien)
    SELECT
        page.value('(item[@name="UID(Zonal OCR)"]/@value)[1]', 'INT') AS UID,
        page.value('(item[@name="nom(Zonal OCR)"]/@value)[1]', 'VARCHAR(50)') AS nom,
        page.value('(item[@name="prenom(Zonal OCR)"]/@value)[1]', 'VARCHAR(50)') AS prenom,
        page.value('(item[@name="matricule(Zonal OCR)"]/@value)[1]', 'VARCHAR(50)') AS matricule,
        page.value('(item[@name="lien"]/@value)[1]', 'VARCHAR(100)') AS lien 
    FROM 
        (SELECT 
             CAST(MY_XML AS xml)
         FROM 
             OPENROWSET(BULK 'C:\Files\Test.xml', SINGLE_BLOB) AS T(MY_XML)) AS T(MY_XML)
    CROSS APPLY 
        MY_XML.nodes('root/page') AS MY_XML (page);

推荐答案

与其try 完全从SQL执行此操作,而不是使用正确的脚本语言(如PowerShell)将数据推送到SQL中,因为它不是为执行直接文件访问而设计的,并且充满了问题.

您可以使用dbaTools' Invoke-DbaQuery来执行带参数的SQL命令.只需获取所需文件的内容,并将它们作为SQL参数推送到管道中.

$sql = @"
INSERT INTO Projet (UID, nom, prenom, matricule, lien)
    SELECT
        page.value('(item[@name="UID(Zonal OCR)"]/@value)[1]', 'INT') AS UID,
        page.value('(item[@name="nom(Zonal OCR)"]/@value)[1]', 'VARCHAR(50)') AS nom,
        page.value('(item[@name="prenom(Zonal OCR)"]/@value)[1]', 'VARCHAR(50)') AS prenom,
        page.value('(item[@name="matricule(Zonal OCR)"]/@value)[1]', 'VARCHAR(50)') AS matricule,
        page.value('(item[@name="lien"]/@value)[1]', 'VARCHAR(100)') AS lien 
    FROM (VALUES(CAST(@xml AS xml)) v1(xml)
    CROSS APPLY v1.xml.nodes('root/page') AS MY_XML (page);
"@;

Get-ChildItem -Path 'C:\Files\' |
  Get-Content -Raw |
  Invoke-DbaQuery -SqlInstance 'YourServer' -Database 'YourDB' -Query $sql -SqlParameter @{ xml = $_ };

Sql相关问答推荐

SQL查询以创建手头的流动余额?

SUM(条件)在Oracle?

如何转换和汇总行数

SQL查询视图与连接?

SQL将 Select 查询作为新列添加到另一个 Select 查询

雅典娜嵌套Json提取液

基于是否具有某些数据的关联表覆盖SELECT语句中的列值

使用拆分器将已分组的不同值连接在一起

插入具有预期逻辑的查询以Forking 表

SQL OR子句如何在JOINON查询中工作?

如何在android房间中进行多个加入

使用 XML 作为 SQL 表

对于小数据集,EF / SQL 语句花费的时间太长

获取上个月和上一年的值

根据不同日期标准分配组的逻辑

如何在sparksql查询中使用日期值?

正则表达式:停在第一个匹配的其中一个字符位置上

带有数组输入参数的Snowflake UDF优化

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

BigQuery 错误:SELECT 列表表达式引用 esthetician.LICENSE_TYPE,它既未在 [49:8] 分组也未聚合