以下是一些示例记录
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
子句,子查询中对ParentId
和Id
的引用引用了e1
中的列值(正如我现在所别名的那样),并且这些列值不相等。