查询 XML 个问题
Querying on XML issues
我使用这个查询已经一年多了。在 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。
提前致谢,Koen。
/BOM/BO/Documents/NumAtCard
需要改为
/BOM/BO/Documents/Field[@Name="NumAtCard"]/Value
我使用这个查询已经一年多了。在 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。
提前致谢,Koen。
/BOM/BO/Documents/NumAtCard
需要改为
/BOM/BO/Documents/Field[@Name="NumAtCard"]/Value