2015-09-28 7 views
0

Я пытаюсь использовать переменную вместо XML String при запросе поля XML в моей таблице.SQL Server XML Querying

CASE 
WHEN t.value('(./meta/node()[2]/value)[1]','VARCHAR(100)') = '101' THEN 'ABC' 
WHEN t.value('(./meta/node()[2]/value)[1]','VARCHAR(100)') = '201' THEN 'SLM' 
WHEN t.value('(./meta/node()[2]/value)[1]','VARCHAR(100)') = '251' THEN 'SPR' 
WHEN t.value('(./meta/node()[2]/value)[1]','VARCHAR(100)') = '301' THEN 'FYT' 
WHEN t.value('(./meta/node()[2]/value)[1]','VARCHAR(100)') = '350' THEN 'PRR' 
... 

Это саз есть около 20 элементов к нему, и я пытаюсь сделать что-то вроде

DECLARE @XMLString AS XML 
SET @XMLString = './meta/node()[2]/value)[1]' 

И затем использовать переменный вместо того, чтобы писать строковую каждый раз и сделать мой код более динамичным , Сейчас это работает, но я уверен, что есть способы сделать его более динамичным и быстрее, чем 5 секунд.

ответ

0

Не знаю, что именно вы хотите. Если вы хотите получить более подробную информацию, вы должны предоставить структуру своего XML и то, что именно вы хотите достичь.

Вам нужно будет узнать о CTE, CROSS APPLY и nodes(). Ваш XPath -выражение очень вероятно сложно.

Просто пример:

DECLARE @xml XML = 
'<root> 
    <meta> 
     <value>Value1.1</value> 
     <value>Value1.2</value> 
     <value>Value1.3</value> 
     <value>Value1.4</value> 
    </meta> 
    <meta> 
     <value>Value2.1</value> 
     <value>Value2.2</value> 
     <value>Value2.3</value> 
    </meta> 
    <meta> 
     <value>Value3.1</value> 
     <value>Value3.2</value> 
    </meta> 
</root>'; 

SELECT value.onevalue.value('.','varchar(max)') 
FROM @xml.nodes('/root/meta/value') AS value(onevalue); 

--You can use this directly in a case (lot of typing) 
--or you could select the needed value directly to use it with less typing 

SELECT MyApply.myValue 
FROM @xml.nodes('/root/meta/value') AS value(onevalue) 
CROSS APPLY(SELECT value.onevalue.value('.','varchar(max)') AS myValue) AS MyApply; 
+0

@WesPalmer, если этот ответ помог вам, это будет своего рода вы пометить его как принято и/или нажмите на upvote.Thx! – Shnugo