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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当列是NTEXT时,SQL Server:IN('asd')不工作相关的知识,希望对你有一定的参考价值。

我该如何解决这个问题?

where someNtext IN ('asd',asd1')

给出错误:

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

答案

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

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

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

WHERE CONVERT(NVARCHAR(MAX), someNtext) IN (N'asd', N'asd1')

但可能不会像在LIKE条件下使用OR子句一样好。

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

有关在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)不要使用它

以上是关于当列是NTEXT时,SQL Server:IN('asd')不工作的主要内容,如果未能解决你的问题,请参考以下文章

PySpark:当列是列表时,将列添加到 DataFrame

当列是现有列的布尔测试时,为啥向 Pandas DataFrame 添加列会返回 SettingWithCopy 警告?

当列具有默认约束时,SQL Server 2012获取列不能为空。

当列是 JSON 数组而不是字符串时如何过滤 ANTD 表

当列是整数和小数的混合时,创建表时使用哪种数据类型?

当列值更改时,如何将组号添加到 SQL Server 2012 中的顺序记录?