MAX (text) возвращает тип данных операнда text недопустим для оператора max. в sql server 2008

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

3 ответов


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

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

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

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

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

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

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


вы также можете использовать 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