SQL Server XML: массажный формат XML вне SQL или в рамках хранимых процедур SQL? - PullRequest
2 голосов
/ 20 июля 2010

Я прочитал несколько отличных ответов, уже связанных с выходными записями SQL XML, хотя мне может не понадобиться: а) лучше всего делать внутри хранимого процесса и б) невозможно внутри хранимого процесса.

Мой вопрос такой:

У меня есть простая таблица; col1, col2, col3, col4 .. в качестве примера все они являются просто полями varchar.

Я пытаюсь получить эти столбцы в формате xml в определенном формате. Один пост выглядел очень похожим на то, что мне было нужно с помощью оператора FOR XML PATH .. он имел:

FOR XML PATH('cell'), ROOT('rows')

хотя это, конечно, выглядело частично правильно, но у меня все еще были фактические имена полей, вложенные в тег ...

Но в любом случае мне нужно:

<rows>
   <cell row='1'>field 1 contents</cell>
   <cell row='2'>field 2 contents</cell>
   ....
</rows>

Так что, поскольку мне нужно повторить тег без фактического имени поля, я не уверен, смогу ли я добиться этого ?? есть идеи ???

Дополнительный особый бонус, спасибо, если бы я мог также сделать:

<rows totalcount='xxxx' recordsperpage='yyyy'>

Так, где xxxx = общее количество записей из select, а yyyy = количество записей на странице, что, конечно, я, вероятно, буду либо иметь в качестве переменной, либо параметра ..

Большое спасибо за любой отзыв.

РЕДАКТИРОВАТЬ !!!!!!!!!!! OOPS!

Извините, формат, который я ищу, это:

<rows>
  <row id='1'>
       <cell>field 1 contents</cell>
       <cell>field 2 contents</cell>
  </row>
</rows>

Doh! в любом случае .. пока что есть отличные идеи .. большое спасибо!

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Вероятно, более красноречивый способ сделать это, но эй, это XML + T-SQL.Этот пример кода должен служить руководством для получения желаемого формата XML:

declare @table table (col1 varchar(50), col2 varchar(50), col3 varchar(50))

insert into @table 
values ('val1', 'val2', 'val3'), ('val4', 'val5', 'val6')

SELECT 1 as '@totalcount', 2 as '@recordsperpage'
,(
    SELECT
    col1 as 'cell/@col1',
    col2 as 'cell/@col2',
    col3 as 'cell'
    FROM @table
    FOR XML PATH(''), TYPE
) 
FOR XML PATH('row')
0 голосов
/ 20 июля 2010

Ваш желаемый вывод мне не ясен относительно того, как строки в наборе результатов разграничены в XML

Моя попытка

WITH R AS
(
SELECT 'field 1 contents' as [1], 'field 2 contents' as [2], 'field 3 contents' as [3], 'field 4 contents' as [4]
UNION ALL
SELECT 'field 1 contents B' as [1], 'field 2 contents B' as [2], 'field 3 contents B' as [3], 'field 4 contents B' as [4]
)
SELECT cell[@row] , row [text()] FROM 
R  UNPIVOT  (row FOR cell IN 
      ([1], [2], [3], [4])
)AS unpvt
FOR XML PATH('cell'), ROOT('rows'), TYPE 

Что дает

<rows>
<cell row="1">field 1 contents</cell>
<cell row="2">field 2 contents</cell>
<cell row="3">field 3 contents</cell>
<cell row="4">field 4 contents</cell>
<cell row="1">field 1 contents B</cell>
<cell row="2">field 2 contents B</cell>
<cell row="3">field 3 contents B</cell>
<cell row="4">field 4 contents B</cell>
</rows>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...