2013-01-22 52 views
2

我有一个SQL Server 2000数据库,看起来像这样的表:SQL Server 2000的抱怨比较TEXT/NTEXT列,但列是VARCHAR

ModifyTime datetime 
CompanyID smallint 
ProductID smallint 
ComponentID int 
Disposition varchar(10) 
Note text 
NoteType varchar(256) 

查询失败:

UPDATE NoteTable 
SET Disposition = 'Modified' 
WHERE Disposition = '' 
    AND CompanyID = 10 
    AND ProductID = 13 
    AND ComponentID = 1 
    AND NoteType = 'Customer' 

错误是:

文本,ntext和图像数据类型无法进行比较或排序,除非使用IS NU LL或LIKE运营商。

有一个TEXT列,但它根本不参与查询。这两个文本字段都是VARCHAR

我经常在NoteType字段上做JOIN s,并按Disposition排序,没有这个错误。

任何线索?

+1

你确定列数据类型?如果你改变NoteType LIKE'Customer'会发生什么? – YvesR

+8

桌子上有触发器吗?在查询分析器/管理工作室中运行此更新时,能否发布整个错误消息,包括“Msg xxx,...”等部分? –

回答

0

经常发生的情况是,当简化问题到这里问问题时,我将问题的实际原因分解了。

实际上,UPDATE发生在一个ASP应用程序中,并且我在这里表示为'Customer'的值作为参数传递给准备好的语句。在创建参数时,我使用了长度为256的adLongVarChar,而不是长度为256的adVarChar。所以它实际上是我比较VARCHAR(256)NoteType列的常量,这是问题所在。当我将参数类型固定到准备好的语句时,问题就消失了。

对不起,打扰你,谢谢你的帮助。 :-)