我现在使用此查询已超过一年。在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>
在此ISO-8859-1 XML上是否有.query
的方法?
我正在使用SQL Server Management Studio(SSMS)2017。
谢谢,科恩。
[/BOM/BO/Documents/NumAtCard
需要更改为
/BOM/BO/Documents/Field[@Name="NumAtCard"]/Value