Для генерации тегов нулевого типа в SQL Server 2005 Express 2005 - PullRequest
0 голосов
/ 20 апреля 2011

Привет, я попробовал ниже, но он не генерирует элемент XML для пустых / нулевых значений. Может ли кто-то указать мне на ошибку, которую я делаю. Вывод XML, я ожидаю

  <Board>
    <BoardId>1</BoardId>
    <Title>Introduction to modal popup control</Title>
    <Desc>The ModalPopup extender allows you to display content in an element that</Desc>
  </Board>
  <Comment>
    <CommentId>1</CommentId>
    <Comment>Typing a comment and sending it is such a neat stuff</Comment>
    <Date>2011-03-25T15:24:43</Date>
  </Comment>
  <Comment>
    <CommentId>2</CommentId>
    <Comment>Board comment 123 123 123</Comment>
    <Date></Date>
  </Comment>
</Board>

Обратите внимание на пустой элемент даты в последнем элементе тега комментария. Фактический объем производства,

  <Board>
    <BoardId>1</BoardId>
    <Title>Introduction to modal popup control</Title>
    <Desc>The ModalPopup extender allows you to display content in an element that</Desc>
  </Board>
  <Comment>
    <CommentId>1</CommentId>
    <Comment>Typing a comment and sending it is such</Comment>
    <Date>2011-03-25T15:24:43</Date>
  </Comment>
  <Comment>
    <CommentId>2</CommentId>
    <Comment>Board comment 123 123 123</Comment>
  </Comment>
</Board>

обратите внимание, что тег даты вообще отсутствует. Вот код sql

SELECT
Board.BoardId  'Board/BoardId',
Board.BoardTitle 'Board/Title',
ISNULL(Board.BoardDesc,'')  'Board/Desc',
(
SELECT 
Comments.CommentId 'CommentId',
Comments.Comment 'Comment',
isnull(Comments.CreatedOn,'') 'Date'
from us_boardcomments comments where comments.boardId = board.boardid
for xml path('Comment'),type
)
FROM US_Board Board where boardId = '1'
for xml path('Board')

2. Также, если я добавлю OrderBy или GroupBy или Distict, я получу ошибку.

Подробнее: Xml действует как DataSource для DataSet, который читается с использованием метода ReadXml класса DataSet.

1 Ответ

2 голосов
/ 20 апреля 2011

Я на самом деле не вижу точно, что вы видите Я получаю значение 1900-01-01T00:00:00, когда CreatedOn is null.

Я полагаю, это связано с тем, что CreatedOn - это datetime. Если XML проверен на соответствие XSD, пустые теги для xs: dateTime недопустимы.

Чтобы получить то, что вы хотите, вы можете сделать это так.

isnull(convert(varchar(19), Comments.CreatedOn, 126), '') 'Date',

Результат (для меня) <Date />, когда CreatedOn is null

Редактировать 1 Пустой тег комментария с пустыми тегами, когда нет комментариев

SELECT
Board.BoardId  'Board/BoardId',
Board.BoardTitle 'Board/Title',
ISNULL(Board.BoardDesc,'')  'Board/Desc',
(
SELECT 
isnull(convert(varchar(10), Comments.CommentId), '') 'CommentId',
isnull(Comments.Comment, '') 'Comment',
isnull(convert(varchar(19), Comments.CreatedOn, 126),'') 'Date'
from US_Board Board2
  left outer join us_boardcomments comments
    on comments.boardId = Board2.boardid
  where Board2.boardid = Board.boardid
for xml path('Comment'),type
)
FROM US_Board Board where boardId = '1'
for xml path('Board')

Результат

<Board>
  <Board>
    <BoardId>1</BoardId>
    <Title>Introduction to modal popup control</Title>
    <Desc>The ModalPopup extender allows you to display content in an element that</Desc>
  </Board>
  <Comment>
    <CommentId />
    <Comment />
    <Date />
  </Comment>
</Board>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...