当列是NTEXT时,SQL Server:IN('asd')不工作

时间:2011-05-14 14:39:36

标签: sql-server tsql sql-server-2005 sqldatatypes in-operator

如何解决此问题?

where someNtext IN ('asd',asd1')

给出错误:

  

Msg 402,Level 16,State 1,Line XXXXX
  数据类型ntext和varchar在等于运算符中不兼容。

3 个答案:

答案 0 :(得分:5)

IN列表只是OR条件的简写。 LIKE子句适用于NTEXTTEXT字段。因此,您可以将这两个想法结合起来:

WHERE (
       someNtext LIKE N'asd'
OR     someNtext LIKE N'asd1'
      )

但是,正如@marc_s在对问题的评论中所建议的那样,NVARCHAR(MAX)是首选,因为所有字符串函数都适用于它(以及TEXTNTEXT和{{1}自SQL Server 2005起,数据类型已被弃用。您可以执行内联转换,例如:

IMAGE

但可能与使用WHERE CONVERT(NVARCHAR(MAX), someNtext) IN (N'asd', N'asd1') 条件的LIKE子句的效果不同。

请注意:使用OR / NTEXT / NVARCHAR / NCHAR数据时,最好始终< / em>前缀字符串文字,大写“N”。如果不这样做,可能会导致与数据库默认排序规则关联的代码页不支持的任何字符丢失数据。

有关在SQL Server中使用归类/编码/ Unicode /字符串的更多信息,请访问:https://Collations.Info/

答案 1 :(得分:0)

来自http://msdn.microsoft.com/en-us/library/ms187993.aspx

  

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

答案 2 :(得分:-1)

NText与您搞砸了不相上下,如果您需要比较使用nvarchar(MAX),请不要使用它