【问题标题】:Add index with SQL Server XML Import使用 SQL Server XML 导入添加索引
【发布时间】:2018-09-07 14:09:00
【问题描述】:

在 SQL Server 中,我尝试使用 XML 函数导入文件,如下所示:

SELECT 
    file.value('@registrationnumber[1]', 'nvarchar(100)') AS [registrationnumber],
    report.value('@nihil[1]', 'nvarchar(100)') AS [nihil],
    report.value('@period[1]', 'nvarchar(100)') AS [period],
    report.value('@formulaid[1]', 'nvarchar(100)') AS [formulaid],
    report.value('@frequention[1]', 'nvarchar(100)') AS [frequention],
    report.value('@versieon[1]', 'nvarchar(100)') AS [version],
    variant.value('@type[1]', 'nvarchar(100)') AS [varianttype],
    variant.value('@value[1]', 'nvarchar(100)') AS [variantvalue],
    post.value('@cube[1]', 'nvarchar(100)') AS [cube],
    post.value('@row[1]', 'nvarchar(100)') AS [row],
    post.value('@rownr[1]', 'nvarchar(100)') AS [rownr],
INTO
    [#parsed]
FROM
    @xmlData.nodes('file') AS a(file)
CROSS APPLY
    file.nodes('report') AS b(report)
CROSS APPLY
    report.nodes ('post') AS c(post)
OUTER APPLY
    report.nodes ('variant') AS d(variant)

我想知道是否可以为加载的每个报告自动添加一个具有唯一索引的附加列。

我无法在谷歌上找到解决方案,因为我认为我使用了错误的搜索词。

【问题讨论】:

    标签: sql sql-server xml xml-parsing


    【解决方案1】:

    使用ROW_NUMBER():

    SELECT 
        file.value('@registrationnumber[1]', 'nvarchar(100)') AS [registrationnumber],
        report.value('@nihil[1]', 'nvarchar(100)') AS [nihil],
        report.value('@period[1]', 'nvarchar(100)') AS [period],
        report.value('@formulaid[1]', 'nvarchar(100)') AS [formulaid],
        report.value('@frequention[1]', 'nvarchar(100)') AS [frequention],
        report.value('@versieon[1]', 'nvarchar(100)') AS [version],
        variant.value('@type[1]', 'nvarchar(100)') AS [varianttype],
        variant.value('@value[1]', 'nvarchar(100)') AS [variantvalue],
        post.value('@cube[1]', 'nvarchar(100)') AS [cube],
        post.value('@row[1]', 'nvarchar(100)') AS [row],
        post.value('@rownr[1]', 'nvarchar(100)') AS [rownr],
        ROW_NUMBER() OVER (ORDER BY (SELECT 1)) YourSequentialIndex
    INTO
        [#parsed]
    FROM
        @xmlData.nodes('file') AS a(file)
            CROSS APPLY
        file.nodes('report') AS b(report)
            CROSS APPLY
        report.nodes ('post') AS c(post)
            OUTER APPLY
        report.nodes ('variant') AS d(variant)
    

    【讨论】:

    • 感谢您的快速回答!我的问题不清楚,但我想索引 XML 中的每个 而不是 SQL 表中的每一行。使用您的解决方案,我能够解决问题:DENSE_RANK() OVER (ORDER BY report)
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 2013-05-26
    • 2023-03-16
    • 2010-11-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多