SQL Server“Text”数据类型的WHERE子句

时间:2010-12-03 21:33:55

标签: sql-server sql-server-2005 tsql

其中[CastleType]在SQL Server中设置为数据类型“text”,查询为:

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

我收到错误:

  

数据类型 TEXT VARCHAR 在等于运算符中不兼容。

我是否可以使用WHERE子句查询此数据类型?

7 个答案:

答案 0 :(得分:91)

您可以使用LIKE代替=。没有任何通配符,这将产生同样的效果。

DECLARE @Village TABLE
        (CastleType TEXT)

INSERT INTO @Village
VALUES
  (
    'foo'
  )

SELECT *
FROM   @Village
WHERE  [CastleType] LIKE 'foo' 

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

数据可能有多大?如果您要进行相等比较,理想情况下您希望将此列编入索引。如果您将列声明为宽于900字节的列,则无法执行此操作,但您可以添加可用于加速此类查询的计算checksumhash列。

答案 1 :(得分:17)

请试试这个

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

答案 2 :(得分:12)

您无法将text=运算符进行比较,而是必须使用列出here列出的其中一个比较函数。另请注意页面顶部的大型警告框,这很重要。

答案 3 :(得分:4)

如果您无法更改表本身的数据类型以使用varchar(max),请将查询更改为:

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

答案 4 :(得分:2)

这不是错误消息所说的内容。它表示您无法使用=运算符。试试LIKE 'foo'

答案 5 :(得分:0)

另一种选择是:

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

答案 6 :(得分:0)

这适用于MSSQL和MySQL:

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