我想在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
数据类型创建一个查询参数?)
提前致谢
答案 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