0

我最近将数据库中的所有 ntext 列类型转换为 nvarchar(max)。然后我为相关视图运行 EXECUTE sp_refreshview。

然而,当我在视图上运行以下参数查询(来自经典 ASP)时,出现错误:查询:

SELECT   CARID 
FROM     vwCAR 
WHERE    (1=1) 
AND      (Description LIKE '%'+ ? + '%') 
ORDER BY CARID;

错误:数据类型 nvarchar 和 ntext 在 add 运算符中不兼容(但不再有任何 ntext 列!)

但是,如果我直接运行相同的查询而不使用?参数为:查询:

SELECT  CARID 
FROM    vwCAR 
WHERE   (1=1) 
AND     (Description LIKE '%test%') 
ORDER BY CARID; 

我尝试在查询中使用转换,但结果相同:查询:

SELECT   CARID 
FROM     vwCAR 
WHERE    (1=1) 
AND      (CONVERT(NVARCHAR(MAX), Description) LIKE N'%'+ ? + '%') 
ORDER BY CARID; 

我究竟做错了什么?

附加信息:我将类型更改为 nVarChar(4000) 而不是 (MAX) 并且一切正常。这是一种解决方法,但它解决了问题。

就这样我将来会知道,是否可以在 nVarChar(Max) 类型列上使用 LIKE 条件运行参数查询?

(感谢@McNets 的帖子清理……我是新手)

4

2 回答 2

0

尝试设置之前:

设置@value = '%' + @value + '%' ;

然后使用:

(类似 @value 的描述)

于 2017-06-11T22:18:13.053 回答
0

我在参数中使用了错误的字段类型 adLongVarWChar (203)。应该使用 adVarWChar (202) 作为 nvarchar(max) 类型。

当我如下所述直接从数据库中检索字段类型时出现了混淆,它为 nvarchar(max) 类型返回 203,因此我假设基于该类型设置参数会起作用。
For each ofield in objRS.Fields Redim Preserve FieldTypes(1,x) FieldTypes(0,x) = ofield.type FieldTypes(1,x) = ofield.definedsize x = x + 1 Next

于 2017-06-14T11:35:25.553 回答