【问题标题】:SQL Server 2014 DISTINCT with INNER JOINSQL Server 2014 DISTINCT 与 INNER JOIN
【发布时间】:2026-02-20 00:05:01
【问题描述】:

大家好,我正在尝试以下查询:

SELECT DISTINCT 
    APL.Status
    ,APL.DateModified
    ,APL.PID
    ,APL.PType
    ,APL.PName
    ,APL.PostDate
    ,APL.TID
    ,APL.HRate
    ,APL.Amount
    ,APL.PContact
    ,APL.PMail
    ,APL.PPhone
    ,APL.PFax
    ,APL.RDate
    ,PS.Comments 
FROM 
    [billing].[dbo].[x_APL] AS APL 
INNER JOIN 
    [billing].[dbo].[tblPS] AS PS ON APL.ProjectID = PS.ProjectID 
WHERE 
    APL.PID = '5879'

我得到的错误是:

ntext 数据类型不能选择为 DISTINCT,因为它不可比较。

我怎样才能解决这个问题并仍然使用INNER JOIN

【问题讨论】:

  • 您现在应该考虑将数据类型更改为 nvarchar。您可能可以使用 nvarchar(4000) 因为这是很多信息。如果数据不适合那里,您可能必须使用 nvarchar(max)。我已经做了很多就地 ddl 修改,没有任何问题。但是您当然应该首先在测试环境中执行此操作。

标签: sql-server inner-join distinct sql-server-2014


【解决方案1】:

假设您的 COMMENTS 是 ntext,使用 CAST 函数将数据类型转换为 NVARCHAR。

代替

PS.Comments

你可以写

cast(PS.Comments as nvarchar(4000)) as [Comments]

【讨论】:

  • 完成了这项工作。谢谢 Dance-Henry。
【解决方案2】:

您无法比较 Ntext、image、text 数据类型...作为一种解决方法,尝试将所有这些数据类型转换为 Nvarchar 或 Varchar..

示例:

cast(textdatatye as varchar(10))

我建议也更换它们,因为they will be removed in future version of SQLServer..

ntext、text 和 image 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

【讨论】:

  • 你很接近,但缺少像 Dance-Henry 的例子那样的 as
最近更新 更多