我尝试进行简单的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>
答案 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]')