SQL server Xml Abfrage mit nicht deklariertem Präfix

Ich habe eine Variable in SQL server 2008, die einen Teil einer XML-Spalte enthält und ich habe Probleme bei der Abfrage. Das XML kann ein Präfix "ns0" enthalten oder nicht. Ich möchte [aus] aus dem xml abrufen. Die Frage, die ich versuchte, war das:

DECLARE @Params XML SET @Params = '<filter> <ns0:from>2016-09-19</ns0:from> <ns0:to>2017-01-01<ns0:to> </filter>'; SELECT @Params.value('(/*:filter/*:from)[1]', 'Varchar(max)') AS [from] 

Ich habe keinen XML-Header, um einen Namespace zu deklarieren. Wenn ich versuche, das auszuführen, bekam ich diesen Fehler:

  XML parsing: line 1, character 10, undeclared prefix 

Aber wenn ich das versuche, geht alles gut:

 SET @Params = '<filter> <from>2016-09-19<from> <to>2017-01-01<to> </filter> SELECT @Params.value('(/*:filter/*:from)[1]', 'Varchar(max)') AS [from] 

Wie kann ich [aus] mit einer XPath-Abfrage mit dem obigen xml-Beispiel mit einem Präfix oder ohne Präfix abrufen?

Ihr Beispiel ist auf zwei Arten ungültig:

  1. Es ist nicht erlaubt, ein Namespace-Präfix ohne entsprechende Namensraum-Deklaration zu haben.
  2. Ihre schließungs- Tags enthalten nicht die / überall …

Das ist ein hässlicher Hack, aber du kannst es versuchen:

 DECLARE @Params XML SET @Params = REPLACE('<filter> <ns0:from>2016-09-19</ns0:from> <ns0:to>2017-01-01</ns0:to> </filter>','ns0:',''); SELECT @Params.value('(/*:filter/*:from)[1]', 'date') AS [from]; 

Wenn du nicht alle Namespace-Präfixe im Voraus kenst, wird das wirklich knifflig …