#sql #xml #import
#sql #xml #импорт
Вопрос:
Я пытаюсь импортировать XML-файл в SQL с помощью Visual Studio. Помимо всех типов ошибок преобразования данных, в результате я получаю пустые таблицы. Попытался использовать функцию импорта Access XML, и я получил тот же результат — пустые таблицы. Проблема, по-видимому, в самом XML-файле, поскольку его данные записываются в поля идентификатора узла, как в примере ниже.
<SUMMARY ID="BWR1" _Name="MLSummary">
<_DATA_SET _Name="TotalBalance" _Value="125" />
<_DATA_SET _Name="TotalUnsecuredBalance" _Value="100" />
<_DATA_SET _Name="TotalCredit" _Value="20" />
<_DATA_SET _Name="Count" _Value="16" />
<_DATA_SET _Name="PublicCount" _Value="0" />
</SUMMARY>
В идеале я бы хотел, чтобы этот XML был преобразован в таблицу SQL с _Name и _Value в качестве столбцов, чтобы «TotalBalance», «TotalUnsecuredBalance», 125, 20 и т.д. Были значениями.
create test_table ([_Name] nvarchar(max), _Value(int))
Не могли бы вы, пожалуйста, сообщить мне, если у вас есть какие-либо идеи о том, как это сделать.
Ответ №1:
Я не на 100% уверен, что понимаю, что вы пытаетесь здесь сделать….
Попробуйте это:
DECLARE @input XML = '<SUMMARY ID="BWR1" _Name="MLSummary">
<_DATA_SET _Name="TotalBalance" _Value="125" />
<_DATA_SET _Name="TotalUnsecuredBalance" _Value="100" />
<_DATA_SET _Name="TotalCredit" _Value="20" />
<_DATA_SET _Name="Count" _Value="16" />
<_DATA_SET _Name="PublicCount" _Value="0" />
</SUMMARY>'
SELECT
DataSet.value('@_Name', 'varchar(25)') AS 'Name',
DataSet.value('@_Value', 'varchar(25)') AS 'Value'
FROM
@input.nodes('/SUMMARY/_DATA_SET') AS Summ(DataSet)
Это вернет набор строк, которые выглядят примерно так:
Name Value
TotalBalance 125
TotalUnsecuredBalance 100
TotalCredit 20
Count 16
PublicCount 0
Помогает ли это вообще? Если у вас есть этот список пар имя / значение — что вы хотите с этим сделать?? У вас есть таблица, в которую вы можете это вставить? Или вы хотите создать таблицу из этого?? Не совсем понятно по этому вопросу….
Комментарии:
1. Большое спасибо! Этот подход работает для меня. Я просто использую выходные данные вашего оператора select для вставки в предварительно определенную таблицу.