Неверный счетчик записей с уникальным идентификатором и приведением к nvarchar в TSQL для пути xml - PullRequest
0 голосов
/ 14 декабря 2011

Вот несколько примеров записей

ID(UniqueIdentifier)                 UserId title   description version     parentid    
8362AB94-946F-4092-97C2-ABD957CC2E20    3   title   desc    0   0   
C4E3FCC1-49B5-4310-931F-B8EE48B3F38E    3   title2  desc2   0   1           8362AB94-946F-4092-97C2-ABD957CC2E20
C622113B-C6E6-4ED1-B727-E4F864643CD2    3   title3  desc3   0   2           8362AB94-946F-4092-97C2-ABD957CC2E20

Записи представляют собой иерархические правки текстовых данных.Например, при сохранении редактирования ParentBoard создается новая запись с инкрементным номером версии, например 1, 2 (все это происходит в приложении).Интересующие столбцы:

ID - Unique Identifier

ParentId - NVARCHAR(50)

Я пытаюсь создать XML следующим образом:

<Edits>
  <Id>314BA459-3749-4BC1-8AA4-E72B882539F5</Id>
  <Title>Parent Title</Title>
  <Description>Parent Description</Description>
  <Version>0</Version>
  <ParentId></ParentId>
  <SubBoardCount>2</SubBoardCount>
</Edits>

Запрос

SELECT
            Id  'Id',
            Title   'Title',
            [Description]   'Description',
            Version     'Version',
            ParentId    'ParentId',
            (select COUNT(*) WHERE ParentId =  (CAST(Id AS NVARCHAR(50)))) 'SubBoardCount',
    FROM    Edits
    WHERE ParentId IS NULL OR ParentId = ''
    FOR XML PATH('Edits')

Проблема

Почему я всегда получаю SubBoardCount as 0, а не 2?

1 Ответ

3 голосов
/ 14 декабря 2011

Потому что ваш «подзапрос» не ищет в таблице.Возможно, вы имели в виду:

SELECT
    Id 'Id',
    Title 'Title',
    [Description] 'Description',
    Version 'Version',
    ParentId 'ParentId',
    (SELECT COUNT(*) 
     FROM Edits e2 
     WHERE e2.ParentId =  (CAST(e1.Id AS NVARCHAR(50)))) 'SubBoardCount',
FROM    
    Edits e1
WHERE 
    ParentId IS NULL OR ParentId = ''
FOR XML PATH('Edits')

Без дополнительного условия FROM Edits e2 ссылки на ParentId и Id в подзапросе ссылались на значения этих столбцов из e1 (как я сейчас назвалэто), и они никогда не равны.

...