我该如何解决这个问题?
where someNtext IN ('asd',asd1')
给出一个错误:
Msg 402, Level 16, State 1, Line XXXXX
数据类型 ntext 和 varchar 在等于运算符中不兼容。
我该如何解决这个问题?
where someNtext IN ('asd',asd1')
给出一个错误:
Msg 402, Level 16, State 1, Line XXXXX
数据类型 ntext 和 varchar 在等于运算符中不兼容。
IN
列表只是 OR 条件的简写。该LIKE
子句适用于NTEXT
和TEXT
字段。所以,你可以结合这两个想法来做到这一点:
WHERE (
someNtext LIKE N'asd'
OR someNtext LIKE N'asd1'
)
但是,正如@marc_s 在对问题的评论中建议的那样,NVARCHAR(MAX)
由于所有字符串函数都可以使用它(并且自SQL Server 2005 起已弃用 、 和 数据类型)TEXT
,NTEXT
所以首选它。IMAGE
您可以进行内联转换,例如:
WHERE CONVERT(NVARCHAR(MAX), someNtext) IN (N'asd', N'asd1')
但可能不会像使用带有条件的LIKE
子句那样好。OR
请注意:在处理 ///NTEXT
数据NVARCHAR
时,最好始终使用大写“N”作为字符串文字的前缀。不这样做可能会导致与数据库的默认排序规则关联的代码页不支持的任何字符的数据丢失。NCHAR
XML
有关在 SQL Server 中使用排序规则/编码/Unicode/字符串的更多信息,请访问:https ://Collations.Info/
来自http://msdn.microsoft.com/en-us/library/ms187993.aspx:
在 Microsoft SQL Server 的未来版本中,将删除 ntext、text 和 image 数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
NText 不是你搞砸的可比性,如果你需要比较使用 nvarchar(MAX),请不要使用它