在TableAdapter中使用Sql LIKE获取int值

时间:2015-03-27 19:33:50

标签: c# sql sql-server sql-like tableadapter

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

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

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

因为>>语法错误new')',很明显。

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

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

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

  

将varchar值'%'转换为数据类型int时,转换失败。

而且很明显,因为我在指向int数据类型的查询中使用了''%'。

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

提前致谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

我不确定您使用的sql是什么,如果它的Sql Server变体然后尝试

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

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

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

答案 2 :(得分:0)

你可以完全避免VARCHAR混乱。

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