sql-server - SQL Server : IN ('asd' ) not working when column is NTEXT

标签 sql-server t-sql sql-server-2005 sqldatatypes in-operator

如何解决这个问题?

where someNtext IN ('asd',asd1')

出现错误:

Msg 402, Level 16, State 1, Line XXXXX
The data types ntext and varchar are incompatible in the equal to operator.

最佳答案

IN list 只是 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/

关于sql-server - SQL Server : IN ('asd' ) not working when column is NTEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6002514/

相关文章:

sql-server - 导出sql将日期时间转换为yyyy-mm-ddTHH :MM:SS

sql - 从派生表中选择sql异常

database - Hibernate 和 Sql Server 最佳实践

sql - 将列中的 XML 节点连接到另一个表中的字段

mysql - SQL组查询从两个表中获取数据

sql-server - 查询计划优化器是否适用于连接/过滤的表值函数?

c# - 在 C# 中退出控制台应用程序之前处理 EF DbContext 的重要性

sql-server - SQL Server : How do I add a constraint to an existing table but only if the constraint does not already exist?

asp.net - 如何从具有报表的报表查看器的 ASP.NET 页面将参数传递到 SSRS 报表

python - 将 PC 数据与在线数据同步