Запросы на XML вопросов - PullRequest
1 голос
/ 15 января 2020

Я использую этот запрос уже более года. Он отлично работает при использовании этого на UTF-8 XML.

Столбец XML в настоящее время имеет тип NVARCHAR(MAX), поэтому я должен сначала привести его к XML.

SELECT REPLACE(
  XML,
  '<MetaData04></MetaData04>',
  '<MetaData04>' + cast([XML] as XML).query(N'/BOM/BO/Documents/NumAtCard').value('.', 'varchar(30)') + '</MetaData04>'
) 
FROM table1 
WHERE state = 1

Теперь это прекрасно работает на этом XML:

<?xml version="1.0" encoding="utf-8"?>
<BOM>
  <BO>
    <Documents>
      <NumAtCard>1234</NumAtCard>
      <MetaData04>test</MetaData04>
    </Documents>
  </BO>
</BOM>

Но не на этом XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<BOM>
  <BO>
    <Documents>
      <Field Name="NumAtCard" Multi="No">
        <Value>1234</Value>
      </Field>
      <Field Name="MetaData04" Multi="No">
        <Value>test</Value>
      </Field>  
    </Documents>
  </BO>
</BOM>

Есть ли способ .query на этом ISO-8859-1 XML?

Я использую SQL Server Management Studio (SSMS) 2017.

Заранее спасибо, Коэн.

1 Ответ

2 голосов
/ 15 января 2020

/BOM/BO/Documents/NumAtCard необходимо изменить на

/BOM/BO/Documents/Field[@Name="NumAtCard"]/Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...