Sql 什么';比较NTEXT列和常量值的正确方法是什么?

Sql 什么';比较NTEXT列和常量值的正确方法是什么?,sql,sql-server,tsql,ntext,Sql,Sql Server,Tsql,Ntext,如果我使用类似 [ntext2] <> '1,032.5', [ntext2]“1032.5”, 我得到这个错误: 数据类型ntext和varchar在not equal to运算符中不兼容 最好的解决方案是对任何列类型以相同的方式实现比较。(运算符同时适用于NVARCHAR和INT)。不赞成使用ntext数据类型,而赞成使用NVARCHAR(max)数据类型。如果您可以更改表中的数据类型,那将是最好的解决方案。那么将它与varcharliteral进行比较就没有问题了 否则,您

如果我使用类似

[ntext2] <> '1,032.5',
[ntext2]“1032.5”,
我得到这个错误:

数据类型ntext和varchar在not equal to运算符中不兼容


最好的解决方案是对任何列类型以相同的方式实现比较。(运算符同时适用于NVARCHAR和INT)。

不赞成使用
ntext
数据类型,而赞成使用
NVARCHAR(max)
数据类型。如果您可以更改表中的数据类型,那将是最好的解决方案。那么将它与
varchar
literal进行比较就没有问题了

否则,您必须在比较之前强制转换该值:

cast([ntext2] as nvarchar(max)) <> '1,032.5'
cast([ntext2]作为nvarchar(max))'1032.5'

您也可以考虑使用NVARCHAR文字,它解决了一些类似的数据类型问题:

cast([ntext2] as nvarchar(max)) <> N'1,032.5'
cast([ntext2]作为nvarchar(max))N'1032.5'

如果您不想强制转换,您可以在某些情况下使用
例如
PATINDEX
,如此MSDN线程所示:

没有通配符的LIKE表达式(在本例中)大致相当于相等性测试

在这种情况下,表达式为:

[ntext2] NOT LIKE '1,032.5'

不幸的是,这不是一个选项,因为MS自己使用ntext,尽管它同时声明不推荐使用它。我将尝试N前缀和强制转换,谢谢你的回答。将其转换为NVARCHAR(MAX)和所有字符串函数将为你提供。。。NTEXT很凌乱,它已被弃用-扔掉它!如果有人要求M$将其CRM DB的NTEXT转换为NVARCHARs,我将在请愿书上签名;)LIKE要求对数据库进行适当的索引(AFAIK)。我想避免这个要求。@noober:like子句从索引中没有多少好处,除非它们不包含前导通配符。强制转换可能会忽略现有索引。如果您关心性能,那么最好在有索引和无索引的情况下测试每个选项(cast,like,patindex)的性能。如果我今天有时间,我会检查一下。不,我只是在不同的DBs上用NTEXTs进行了测试,但其中一个失败了。就是不能执行。问题在于指数。所以我不能确定LIKE在任何地方都能起作用。@noober:如果你不介意的话,我很想看看这个错误。哎呀。。。现在可以了。很奇怪。如果我再看到这个,我会告诉你的。