如何修复“文本、ntext 和图像数据类型无法比较或排序,除非使用 IS NULL 或 LIKE 运算符。”

zfe*_*mer 4 t-sql sql-server sql-server-2008

这是我到目前为止:

SELECT 
    account, ' ', message_type, 
    MAX(message_no) as max_message_no, message_text
FROM
    (SELECT 
         account, message_type, message_no, message_text
     FROM  
         messages m 
     INNER JOIN 
         receivables r ON m.account = r.aracct
     WHERE 
         m.account IN (SELECT r.aracct AS account 
                       FROM receivables r 
                       WHERE r.balance <> 0)
         AND m.message_type = 'N') t1
GROUP BY 
    t1.account, t1.message_type, t1.message_text
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息:

除非使用 IS NULL 或 LIKE 运算符,否则无法比较或排序 text、ntext 和 image 数据类型。

我基本上想要message_no每个帐户的最大值,我希望它显示message_text,但它不允许它,因为它是一种text数据类型。

Shn*_*ugo 5

TEXT,NTEXTIMAGE已弃用,应替换为相应的类型VARCHAR(MAX),NVARCHAR(MAX)VARBINARY(MAX)。你可能会用你的TEXT-column

CAST(t1.message_text AS VARCHAR(MAX))
Run Code Online (Sandbox Code Playgroud)

在您的子选择中执行一次可能就足够了:

SELECT account, ' ', message_type, MAX(message_no) as max_message_no, message_text
FROM
(
SELECT account, message_type, message_no, CAST(message_text AS VARCHAR(MAX)) AS message_text
    FROM messages m INNER JOIN receivables r ON m.account = r.aracct
        WHERE m.account IN (SELECT r.aracct AS account FROM receivables r WHERE r.balance <> 0)
        AND m.message_type = 'N'
) t1
GROUP BY t1.account, t1.message_type, t1.message_text
Run Code Online (Sandbox Code Playgroud)