在 TableAdapter 中对 int 值使用 Sql LIKE

Use Sql LIKE in TableAdapter for int values

我想在 TableAdapter 配置向导中使用参数创建自己的查询。

所以在此之后我使用了这段代码,但它是错误的:

SELECT Name, ProjID
FROM ProjectTable
WHERE (ProjID LIKE @ProjID% )

因为>>语法错误 new ')',很清楚.

经过一番搜索,有同样问题的人建议使用这样的东西:

SELECT Name, ProjID
FROM ProjectTable
WHERE (ProjID LIKE @ProjID + '%')

但它仍然是错误的,在运行时给我这个错误:

Conversion failed when converting the varchar value '%' to data type int.

也很清楚,因为我在指向 int 数据类型的查询中使用了 +'%'。

那么,我该如何解决这个问题(我的意思是在 TableAdapter 中专门为 int 数据类型创建一个查询参数)?

提前致谢

您只能对字符串执行LIKE 操作。所以你可以这样做:

SELECT        Name, ProjID
FROM            ProjectTable
WHERE        CAST(ProjID AS varchar(31)) LIKE CAST(@ProjID AS varchar(31))+'%' 

听起来@ProjID 是一种数字数据类型。在将 % 附加到它之前,您需要将其转换为 varchar。

我不确定您使用的 sql 是什么,如果是 Sql 服务器变体,请尝试

SELECT        Name, ProjID
FROM            ProjectTable
WHERE        (cast(ProjID as varchar(30) LIKE cast(@ProjID as varchar(30)) +'%' )

您可能需要将 varchar(30) 调整为更大或更小的值以适应您的值的大小。 ProjID 将自动转换为 varchar 以进行比较,但最好也专门转换它。

这不是最有效的查询。由于对列名进行了强制转换(隐式或显式),它不会使用您为其定义的任何索引。

你完全可以避免 VARCHAR 混乱。

SELECT Name, ProjID
FROM ProjectTable
WHERE ProjID = @ProjID OR ProjID >= 10 * @ProjID