2 xml sql-server xquery sql-server-2005
我试图从Xml数据类型中获取一些值.数据看起来像:
<Individual xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FirstName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Lirria</FirstName>
<LastName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Latimore</LastName>
</Indvidual>
Run Code Online (Sandbox Code Playgroud)
注意元素FirstName和LastName中是否存在xmlns - 这是在我们通过序列化ac#业务对象创建xml时添加的.无论如何,似乎元素中存在这个命名空间会导致XQuery表达式失败,例如:
SELECT MyTable.value('(//Individual/LastName)[1]','nvarchar(100)') AS FirstName
Run Code Online (Sandbox Code Playgroud)
返回null.但是当我从xml中的元素中删除命名空间时(例如,使用Replace T-SQL语句),上面返回一个值.但是必须有更好的方法 - 是否有一种方法可以使这个查询工作,即不首先更新xml?
谢谢
约翰戴维斯
您需要正确命名要选择的元素.请参阅使用WITH XMLNAMESPACES添加命名空间.以下是使用XML的示例:
declare @x xml;
set @x = N'<Individual
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FirstName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Lirria</FirstName>
<LastName xmlns="http://nswcc.org.au/BusinessEntities.Crm">Latimore</LastName>
</Individual>';
with xmlnamespaces (N'http://nswcc.org.au/BusinessEntities.Crm' as crm)
select @x.value(N'(//Individual/crm:LastName)[1]',N'nvarchar(100)') AS FirstName
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2236 次 |
| 最近记录: |