SQL Server 2005 Xquery命名空间

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?

谢谢

约翰戴维斯

Rem*_*anu 7

您需要正确命名要选择的元素.请参阅使用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)