Xpath, der NULL für den gültigen Xpath-Ausdruck zurückgibt

Ich verwende eine ziemlich einfache Xpath-Abfrage (unten), um eine SQL server 2008-databasespalte abzufragen, deren Werte alle der Form des Beispiels folgen (darunter). Meine Abfrage gibt NULL für alle Zeilen zurück, anstatt die Werte des example (zB "VALUE"), obwohl das example für jede Zeile definiert ist, die ich abfrage.

Ich habe versucht, die xsd und xsi Namespaces in meinem Xquery-Ausdruck zu deklarieren und aus mehreren verschiedenen Attributnamen auszuwählen, aber keiner hatte Wirkung. Was vermisse ich?

Abfrage :

 select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(15)') [Result] from TableName 

XML-Beispielknoten (aktuelles XML enthält viele weitere Attribute, die ich weggelassen habe):

 <RootNode xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://intranet" example="VALUE"> <IsValid>true</IsValid> </RootNode> 

Versuchte Abfrage mit Namespaces, mit dem gleichen Ergebnis :

 select ColumnName.value(' declare namespace xsd="http://www.w3.org/2001/XMLSchema"; declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; (/RootNode/@example)[1]', 'nvarchar(15)') [Result] from TableName 

Sie müssen den Standard-Namespace für Ihre XML-data hinzufügen und die Xpath-Abfrage wahrscheinlich ändern.

Ich habe nicht laufen, um zu testing, aber es ist meine beste Vermutung und sollte Sie gehen:

 WITH XMLNAMESPACES (N'http://intranet' as intra) SELECT ColumnName.value('/intra:RootNode[@example]/intra:IsValid[1]', 'nvarchar(15)') [Result] FROM TableName 

Diese Abfrage funktioniert. Das Problem ist, dass die dataknoten einen benutzerdefinierten Standard-Namespace deklarieren.

 select ColumnName.value(' declare default element namespace "http://intranet"; (/RootNode/@example)[1]', 'nvarchar(15)') [Result] from TableName