我在SQL表中有一个包含Parameters的字符串列。例如:
<ParameterValues>
<ParameterValue>
<Name>Sub</Name>
<Value>E23DD735-DCF4-4878-8810-EAC2594C58A4</Value>
</ParameterValue>
<ParameterValue>
<Name>OperatorId</Name>
<Value>1001</Value>
</ParameterValue>
</ParameterValues>
任何人都可以帮助我使用SQL查询,例如,从Operator字段中返回值,其中OperatorId值为1001.在这种情况下,答案是“E23DD735-DCF4-4878-8810-” EAC2594C58A4&#39;
答案 0 :(得分:2)
用它来测试它:
DECLARE @tbl TABLE (ID INT IDENTITY,YourXmlAsString NVARCHAR(MAX));
INSERT INTO @tbl VALUES
('<ParameterValues>
<ParameterValue>
<Name>Sub</Name>
<Value>E23DD735-DCF4-4878-8810-EAC2594C58A4</Value>
</ParameterValue>
<ParameterValue>
<Name>OperatorId</Name>
<Value>1001</Value>
</ParameterValue>
</ParameterValues>');
直接调用以获得您正在寻找的一个值:
WITH Casted AS (SELECT ID,CAST(YourXmlAsString AS XML) AS TheXml FROM @tbl AS t)
SELECT TheXml.value(N'(/ParameterValues/ParameterValue[Name="Sub"]/Value)[1]','uniqueidentifier') AS TheID
FROM Casted
WHERE TheXml.exist(N'/ParameterValues/ParameterValue[Name="OperatorId"]/Value[text()="1001"]')=1
返回
E23DD735-DCF4-4878-8810-EAC2594C58A4
尝试这样来获取派生表:
WITH Casted AS (SELECT ID,CAST(YourXmlAsString AS XML) AS TheXml FROM @tbl AS t)
SELECT ID
,pv.value(N'(Name/text())[1]',N'nvarchar(max)') AS Parameter_Name
,pv.value(N'(Value/text())[1]',N'nvarchar(max)') AS Parameter_Value
FROM Casted
CROSS APPLY Casted.TheXml.nodes(N'/ParameterValues/ParameterValue') AS A(pv)
结果
ID Parameter_Name Parameter_Value
1 Sub E23DD735-DCF4-4878-8810-EAC2594C58A4
1 OperatorId 1001