SQL Server"Text"数据类型的WHERE子句

mmc*_*ynn 83 t-sql sql-server sql-server-2005

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

SELECT *
FROM   [Village]
WHERE  [CastleType] = 'foo' 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TEXTVARCHAR数据类型在等于运算符中不兼容.

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

Mar*_*ith 95

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

DECLARE @Village TABLE
        (CastleType TEXT)

INSERT INTO @Village
VALUES
  (
    'foo'
  )

SELECT *
FROM   @Village
WHERE  [CastleType] LIKE 'foo' 
Run Code Online (Sandbox Code Playgroud)

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

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


Emm*_*apa 18

请试试这个

SELECT *
FROM   [Village]
WHERE  CONVERT(VARCHAR, CastleType) = 'foo'
Run Code Online (Sandbox Code Playgroud)


Don*_*nie 13

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


小智 5

如果您不能将表本身上的数据类型更改为使用varchar(max),则将查询更改为:

SELECT *
FROM   [Village]
WHERE  CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'
Run Code Online (Sandbox Code Playgroud)