Использование переменной в TSQL + XQuery - PullRequest
1 голос
/ 13 сентября 2010

Все,

У меня есть следующий код:

--xml is already declared and populated with an xml document

SELECT
ent.query('TradeId').value('.','VARCHAR(10)') TradeId
FROM                 
@xml.nodes('//table/trade[1]') Col(ent)  

Как мне получить выражение // table / trade [1] в качестве переменной, чтобы я мог увеличить [1] в цикле?Например, я хотел бы что-то вроде ниже, который не работает:

DECLARE @KLM varchar(100)
SET @KLM= '//table/trade[1]'
SELECT
ent.query('TradeId').value('.','VARCHAR(10)') TradeId
FROM                 
@xml.nodes(@KLM) Col(ent) 

Есть идеи?

Спасибо,

M

1 Ответ

1 голос
/ 30 ноября 2010

Если вы удалите позиционную ссылку из вашего метода .nodes (), вы должны получить набор результатов, содержащий все значения TradeId.

SELECT 
ent.query('TradeID').value('.','VARCHAR(10)') TradeId 
FROM                  
@xml.nodes('//table/trade') Col(ent)

После этого вы сможете выполнять итерацию по этому набору результатов, хотяЯ хотел бы добавить стандартное предостережение о «итерации в реляционной модели, как правило, плохая идея».

Помогает ли это?Если нет, есть ли что-то еще в истории?

...