【问题标题】:SQL Server: IN ('asd') not working when column is NTEXTSQL Server:当列为 NTEXT 时,IN ('asd') 不起作用
【发布时间】:2011-08-25 13:00:29
【问题描述】:

我该如何解决这个问题?

where someNtext IN ('asd',asd1')

给出一个错误:

消息 402,第 16 级,状态 1,第 XXXXX 行
数据类型 ntext 和 varchar 在等于运算符中不兼容。

【问题讨论】:

  • 'asd1' 参数缺少的前导 ' 只是一个错字吗??
  • NTEXT 被认为是一种很难处理的数据类型 - 我建议切换到NVARCHAR(MAX),它更易于使用和使用!!

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


【解决方案1】:

IN 列表只是 OR 条件的简写。 LIKE 子句适用于 NTEXTTEXT 字段。所以,你可以结合这两个想法来做到这一点:

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

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

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

但可能不会像使用带有OR 条件的LIKE 子句那样执行。

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

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

【讨论】:

  • 我认为最好避免使用这种类型,你不觉得吗?
  • 如果您在创建列时可以选择,那么可以,请务必避免使用 TEXT、NTEXT 和 IMAGE,因为它们已被弃用,并且可能会从 SQL Server 的未来版本中删除。但是,如果在 SQL Server 2000 中完成然后升级到较新版本的系统上工作,并且您无法更改列数据类型,那么使用 LIKE 子句就可以了。理想情况下,您将有机会使用 NVARCHAR(MAX) 数据类型重建表,但有时人们处理来自 3rd 方开发人员的包并且无法进行更改。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    NText 不是你搞砸的可比性,如果你需要比较使用 nvarchar(MAX),请不要使用它

    【讨论】:

    • 请删除此答案,因为它特别错误。使用 LIKE 子句可以比较 NTEXT 字段。
    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多