SQL Server“文本”数据types的WHERE子句

在SQL Server中将[CastleType]设置为数据types“text”,查询为:

SELECT * FROM [Village] WHERE [CastleType] = 'foo' 

我得到的错误:

数据typesTEXTVARCHAR在等于运算符中是不兼容的。

我不能用WHERE子句查询这个数据types吗?

你可以使用LIKE而不是= 。 没有任何通配符,这将有相同的效果。

 DECLARE @Village TABLE (CastleType TEXT) INSERT INTO @Village VALUES ( 'foo' ) SELECT * FROM @Village WHERE [CastleType] LIKE 'foo' 

text已弃用。 更改为varchar(max)将更容易处理。

数据可能有多大? 如果你打算进行相等的比较,那么你最好想索引这个列。 这是不可能的,如果你声明列的宽度超过900个字节,虽然你可以添加一个计算checksumhash列,可用于加快这种types的查询。

请试试这个

 SELECT * FROM [Village] WHERE CONVERT(VARCHAR, CastleType) = 'foo' 

您不能与使用=运算符的text进行比较,而是必须使用此处列出的其中一个比较函数。 还要注意页面顶部的大警告框,这很重要。

这不是错误信息所说的。 它说你不能使用=操作符。 试试例如LIKE 'foo'

如果无法将表本身上的数据types更改为使用varchar(max),那么将您的查询更改为:

 SELECT * FROM [Village] WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo' 

另一种select是:

 SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0 

我正在使用MySQL,这个查询适用于我:

 SELECT * FROM @Village WHERE CastleType LIKE '%foo%';