MAX (текст) возвращает Операнд типа данных текст недопустим для оператора макс.в SQL Server 2008 - PullRequest
8 голосов
/ 15 ноября 2011

Я использую text тип данных в одной из моих таблиц, а также я использую PIVOT с запросом. Я не могу использовать MAX(AttributeValue), где AttributeValue - это тип text. Возвращает следующую ошибку Operand data type text is invalid for max operator.. Как я могу использовать это здесь, потому что я вынужден использовать функцию aggregate с PIVOT.

Edit: Я подписался на пост http://msdn.microsoft.com/en-us/library/ms187993.aspx

Я пытался преобразовать тип данных в nvarchar(max).

ALTER TABLE dbo.MyTable
ALTER COLUMN AttributeValue NVARCHAR(MAX)

Также я должен использовать опцию Full Text Search. Я получаю следующую ошибку Cannot alter or drop column 'AttributeValue' because it is enabled for Full-Text Search.

SELECT 
 [6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
(   MAX(AttributeValue) 
    FOR AttributeID IN 
    (
         [6B93119B-263B-4FED-AA89-198D26A3A3C4]
        ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A]
    ) 
) ResultTable

Где AttributeValue имеет тип данных text. Я получаю следующую ошибку,

Текст типа операнда недопустим для оператора max.

Ну, я попытался привести поле к nvarchar (max). Это дает другой тип ошибки (в четвертой строке).

Incorrect syntax near '('

Я что-то пропустил?

Ответы [ 3 ]

10 голосов
/ 15 ноября 2011

Вы можете привести ваш текстовый столбец к varchar (max).

select max(cast(AttributeValue as varchar(max)))
from YourTable

Вы можете преобразовать свои данные в подзапрос.

SELECT 
 [6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM ( SELECT AttributeID, 
              CAST(AttributeValue as VARCHAR(MAX)) as AttributeValue
       FROM MyTable
     ) AS T
  PIVOT 
(   MAX(AttributeValue) 
    FOR AttributeID IN 
    (
         [6B93119B-263B-4FED-AA89-198D26A3A3C4]
        ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A]
    ) 
) ResultTable
2 голосов
/ 15 ноября 2011

Если то, что я помню, верно, текст в SQL Server не позволяет вам запускать множество команд против него. Единственное (наполовину) решение, с которым я столкнулся, - приведение текста к другому типу данных; к сожалению, это может означать написание некоторого кода и иметь дело только с фактически сохраненными текстовыми данными в разделах.

Кроме того, текст удаляется из будущих версий SQL Server: http://msdn.microsoft.com/en-us/library/ms187993.aspx

Итак, просто измените тип данных столбца на NVarChar (Max), и, надеюсь, запрос будет выполнен правильно.

0 голосов
/ 30 сентября 2014

Вы также можете использовать DATALENGTH () в MAX (), чтобы избежать приведения потенциально очень больших строк.

SELECT 
  6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB
 ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
(   MAX(DATALENGTH(AttributeValue)) 
    FOR AttributeID IN 
    (
         [6B93119B-263B-4FED-AA89-198D26A3A3C4]
        ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A]
    ) 
) ResultTable
...