Добавить индекс с помощью импорта XML SQL Server

В 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)

Мне было интересно, можно ли автоматически добавить дополнительный столбец с уникальным индексом для загруженного каждый отчет.

Мне не удалось найти решение в Google, потому что я думаю, что использую неправильные условия поиска.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
33
1

Ответы 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)

Спасибо за быстрый ответ! Я не совсем понял свой вопрос, но я хотел проиндексировать каждый <report> </report> в моем XML, а не каждую строку в таблице SQL. С вашим решением мне удалось решить проблему: DENSE_RANK () OVER (отчет ORDER BY)

Jack 07.09.2018 17:16

Другие вопросы по теме