XQuery в Sql Server 2005 - найти узел в той же позиции - PullRequest
0 голосов
/ 04 апреля 2011

Я пытаюсь решить следующую проблему, которая приводит к сериализации объектов, представляющих вычисления в базе данных. Я пытаюсь выполнить запрос в целях отчетности, и мне нужно найти узел в той же позиции в другой части иерархии XML (это происходит из-за сериализации атрибутов string[] и double[] объекта). Например, у меня есть что-то вроде

...<parent>
      <Names>
        <string>Name1</string>
        <string>Name2</string>
        <string>Name3</string>
      </Names>

and

...<parent>
      <Weights>
         <double>0.5</double>
         <double>0.13</double>
         <double>0.2</double>
      </Weights>

Я хочу иметь возможность запрашивать блоб XML и извлекать пары «имя-вес» для каждого блоба XML, чтобы я мог запрашивать в SQL, а не десериализовать объекты. Я могу вытащить Имена и вытащить веса, но если я объединю их, это будет перекрестный запрос, так как я изо всех сил стараюсь сопоставить их по позициям. Я подумал, что ответ, возможно, состоит в том, чтобы создать два представления, одно для имен и одно для весов, и соединить их по позиции, но position () не допускается в запросе, если это не что-то вроде [position() < 6].

1 Ответ

0 голосов
/ 04 апреля 2011

Решил проблему, создав 2 отдельных представления, а затем агрегирующее представление. Я использовал

ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Id) as ItemPosition

как один из столбцов в каждом запросе / просмотре. Затем я присоединился к Id и ItemPosition. Не уверен, что это лучший способ сделать это, но, по крайней мере, он сопоставляет соответствующие элементы.

...