2017-03-02 5 views
1

パラメータを含むSQLテーブルに文字列があります。たとえば:名前と値のペアを持つSQL XMLクエリ

<ParameterValues> 
    <ParameterValue> 
     <Name>Sub</Name> 
     <Value>E23DD735-DCF4-4878-8810-EAC2594C58A4</Value> 
    </ParameterValue> 
    <ParameterValue> 
     <Name>OperatorId</Name> 
     <Value>1001</Value> 
    </ParameterValue> 
</ParameterValues> 

誰もが、例えば、OperatorId値は、この場合、1001であるサブフィールドから値を返すために、SQLクエリで私を助けることができる、答えは「E23DD735-DCF4-だろう4878-8810-EAC2594C58A4 '。

答えて

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

直接呼び出しは、あなたが探している1つの値を取得する:

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 
+0

ブリリアント、感謝Shnugo – David

関連する問題