2017-01-16 9 views
0

私は簡単なSQL XML検索をしようとしていますが、データがランダムにXMLに格納されているために、XMLを検索して検索パラメータ。XML SQL IDなしのフィールド名の検索

以下に示すようなXMLデータを保持するParameterStrというフィールドがあります。 ノードの値を表示する必要があります。

以下は私のコードですが、ゼロを検索しようとするとすべてが表示されます。注文エントリごとに変わるので、私はそのノードから離れることはできません。

助けがあれば助かります。 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: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

** SQLデータベースのようなものはありませんが、** - SQLだけで構造化照会言語である - 多くのデータベースシステムで使用される言語が、それはデータベースではありません製品。 XMLサポートのような多くのものは、**ベンダー固有のもの** **です。使用しているデータベースシステム**(およびどのバージョン)を知る必要があるのですか?(それに応じてタグを更新してください) –

答えて

0

私は、XPath文があなたの要件を満たしているが、あなたは/ValueAsStringに最後のステップを変更した場合、少なくともそれはtrueを返すかどうかわからないけど。

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'); 

出力:

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

希望します。

0

私は答えた:

ParameterStr.query('/Parameters/Parameter[VariableName=sql:variable("@SearchForT1")]/ValueAsString/text()[1]') 
関連する問題