Я использую этот запрос уже более года. Он отлично работает при использовании этого на 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.
Заранее спасибо, Коэн.