没有ID字段名称的XML SQL搜索

时间:2017-01-16 22:41:39

标签: sql xml

我尝试进行简单的SQL XML搜索,但由于数据是如何随机存储在XML中的,我很难弄清楚如何搜索XML以显示搜索参数。

我有一个名为ParameterStr的字段,它保存XML数据,如下所示。 我需要显示节点值。

下面是我的代码,但是当我尝试搜索时,我得到的只是零。每个订单输入有所不同,所以我无法关闭该节点。

任何帮助都会很棒。 代码:

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字段: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>

2 个答案:

答案 0 :(得分:0)

虽然我不确定xpath语句是否符合您的要求,但如果您将最后一步更改为true,则至少返回/ValueAsString

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

希望它有所帮助。

答案 1 :(得分:0)

我找到了答案:

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