错误的记录计数与唯一标识符和转换为nvarchar在TSQL为xml路径



以下是一些示例记录

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?

因为您的"子查询"没有搜索表。也许你的意思是:

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子句,子查询中对ParentIdId的引用引用了e1中的列值(正如我现在所别名的那样),并且这些列值不相等。

最新更新