质疑XML问题

问题描述 投票:0回答:1

我现在使用此查询已超过一年。在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。

谢谢,科恩。

sql sql-server xml casting ssms
1个回答
1
投票

[/BOM/BO/Documents/NumAtCard需要更改为

/BOM/BO/Documents/Field[@Name="NumAtCard"]/Value
© www.soinside.com 2019 - 2024. All rights reserved.