2017-01-16 4 views
0

Ich versuche eine einfache SQL XML Suche durchzuführen, aber aufgrund der zufälligen Speicherung der Daten im XML finde ich es schwierig herauszufinden, wie man das XML sucht, um das XML anzuzeigen Suchparameter.XML SQL Suche ohne ID Feldname

Ich habe ein Feld namens ParameterStr, das XML-Daten wie unten gezeigt enthält. Ich muss den Knotenwert anzeigen.

Unten ist mein Code, aber alles, was ich bekomme, wenn ich versuche, die Suche nach der Null ist. Der Eintrag variiert je nach Auftrag, sodass ich diesen Knoten nicht abwählen kann.

Jede Hilfe wäre großartig. Code:

GO 
DECLARE @SearchForT1 NVARCHAR(100) 
set @SearchForT1 = 'T_Minus1'; 

select ParameterStr.exist ('/Parameters/Parameter[VariableName=sql:variable("@SearchForT1")]/valueasstring[0]') from tbl_TextXMLData 

XML IN Field: ParameterStr

<Parameters> 
    <Parameter> 
    <VariableID>(10203,14505)</VariableID> 
    <VariableName>RushFee</VariableName> 
    <ValueAsString>0</ValueAsString> 
    </Parameter> 
    <Parameter> 
    <ID>(132979,14030)</ID> 
    <VariableID>(10314,14505)</VariableID> 
    <VariableName>T_Minus3</VariableName> 
    <ValueAsString>01/13/2017 4:00PM</ValueAsString> 
    <ValueAsDateTime>01/13/2017 4:00PM</ValueAsDateTime> 
    </Parameter> 
    <Parameter> 
    <ID>(132978,14030)</ID> 
    <VariableID>(10313,14505)</VariableID> 
    <VariableName>T_Minus2</VariableName> 
    <ValueAsString>01/16/2017 4:00PM</ValueAsString> 
    </Parameter> 
    <Parameter> 
    <ID>(132977,14030)</ID> 
    <VariableID>(10312,14505)</VariableID> 
    <VariableName>T_Minus1</VariableName> 
    <ValueAsString>01/17/2017 4:00PM</ValueAsString> 
    </Parameter> 
</Parameters> 
+0

Es gibt so etwas wie eine SQL-Datenbank ** keine ** - SQL ist nur der Structured Query Language - eine Sprache, die von vielen Datenbanksystemen verwendet werden, aber es ist nicht eine Datenbank Produkt. Viele Dinge wie die XML-Unterstützung sind ** sehr ** herstellerspezifisch - also müssen wir wirklich wissen, welches Datenbanksystem ** (und welche Version) Sie verwenden ... (bitte aktualisieren Sie die Tags entsprechend). –

Antwort

0

Obwohl ich nicht sicher bin, ob die XPath-Anweisung Ihre Anforderung erfüllt, aber zumindest gibt true, wenn Sie den letzten Schritt in /ValueAsString ändern:

DECLARE @x xml 
SET @x = '<Parameters> 
    <Parameter> 
    <VariableID>(10203,14505)</VariableID> 
    <VariableName>RushFee</VariableName> 
    <ValueAsString>0</ValueAsString> 
    </Parameter> 
    <Parameter> 
    <ID>(132979,14030)</ID> 
    <VariableID>(10314,14505)</VariableID> 
    <VariableName>T_Minus3</VariableName> 
    <ValueAsString>01/13/2017 4:00PM</ValueAsString> 
    <ValueAsDateTime>01/13/2017 4:00PM</ValueAsDateTime> 
    </Parameter> 
    <Parameter> 
    <ID>(132978,14030)</ID> 
    <VariableID>(10313,14505)</VariableID> 
    <VariableName>T_Minus2</VariableName> 
    <ValueAsString>01/16/2017 4:00PM</ValueAsString> 
    </Parameter> 
    <Parameter> 
    <ID>(132977,14030)</ID> 
    <VariableID>(10312,14505)</VariableID> 
    <VariableName>T_Minus1</VariableName> 
    <ValueAsString>01/17/2017 4:00PM</ValueAsString> 
    </Parameter> 
</Parameters>'; 

DECLARE @SearchForT1 NVARCHAR(100) 
set @SearchForT1 = 'T_Minus1'; 

SELECT @x.exist('/Parameters/Parameter[VariableName=sql:variable("@SearchForT1")]/ValueAsString'); 

Ausgang:

(No column name) 
---------------- 
True 

Hoffe es hilft.

0

fand ich die Antwort:

ParameterStr.query('/Parameters/Parameter[VariableName=sql:variable("@SearchForT1")]/ValueAsString/text()[1]')