在SQL Server中将[CastleType]设置为数据类型“文本”,查询为:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
我得到错误:
数据类型TEXT和VARCHAR在等于运算符中不兼容。
我不能使用WHERE子句查询此数据类型吗?
Answers:
您可以使用LIKE
代替=
。没有任何通配符,将具有相同的效果。
DECLARE @Village TABLE
(CastleType TEXT)
INSERT INTO @Village
VALUES
(
'foo'
)
SELECT *
FROM @Village
WHERE [CastleType] LIKE 'foo'
text
不推荐使用。更改为varchar(max)
将更容易使用。
数据可能还会有多大?如果您要进行相等比较,则理想情况下,您希望对该列建立索引。如果您将列声明为大于900字节的任何内容,则无法实现,尽管您可以添加可用于加快此类查询速度的计算列checksum
或hash
列。
请尝试这个
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR, CastleType) = 'foo'
这不是错误消息所说的。它说您不能使用=
运算符。例如尝试LIKE 'foo'
。
Col IN ('foo', 'bar')
基本上Col = 'foo' or Col = 'bar'
和都会有相同的问题
另一种选择是:
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
like 'foo'
可能会提供比这种方法更好的基数估计,但不确定100%。
VARCHAR(MAX)
代替TEXT
-不赞成使用该数据类型