Я создаю форум, поэтому создал стол с сообщениями. Одним из полей является Body
с типом XML
. Теперь я хотел бы создать запрос, который возвращает все сообщения и количество детей каждого сообщения. Я делаю это с помощью агрегатной функции. Мне нужно использовать группу, когда я использую функцию агрегата. Когда я использую поле в group by
, я получаю следующее исключение: тип данныхКак добавить тип данных XML в предложение GROUP BY?
XML, нельзя сравнивать или сортирует, за исключением того, при использовании IS NULL оператора.
Как это можно решить?
Мой запрос:
SELECT
Post.PostId, Post.[Body], Count(Children.PostId)
FROM
dbo.Post Post,
dbo.Post Children
WHERE
Children.ParentId = Post.PostId
GROUP BY
Post.PostId,
Post.[Body]
Будет ли это обрезать XML, если он длиннее 8000 байт? Или это теперь не проблема в новых версиях SQL Server? –
Я добавил запрос. Производительность очень важна, поэтому я не уверен, что кастинг - это правильный путь. –
@MattFellows - Нет 'varchar (max)' позволяет до 2 ГБ, так же как и XML, хотя на самом деле я, вероятно, должен был сказать «nvarchar (max)» вместо этого, но в любом случае опубликовал лучшее предложение, теперь мы видели запрос. –