Импорт XML в SQL, где данные определены вместо идентификаторов столбцов

#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 для вставки в предварительно определенную таблицу.