如何解决这个问题?
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
子句适用于 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
/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/