Sql 转换nvarchar值时转换失败';%';到数据类型int

Sql 转换nvarchar值时转换失败';%';到数据类型int,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我有一个对象数据源,它从数据库中提取信息,如果我们没有这个特定参数的值,那么我们需要获取所有记录。所以我有一个LIKE语句,我使用一个通配符返回所有条目,但这会给我错误消息 System.Data.SqlClient.SqlException(0x80131904):将nvarchar值“%”转换为数据类型int时,转换失败 相关列的表格结构为: [columnName] VARCHAR(50) SQL类似于: SELECT [columns] from [table] where [colu

我有一个对象数据源,它从数据库中提取信息,如果我们没有这个特定参数的值,那么我们需要获取所有记录。所以我有一个LIKE语句,我使用一个通配符返回所有条目,但这会给我错误消息

System.Data.SqlClient.SqlException(0x80131904):将nvarchar值“%”转换为数据类型int时,转换失败

相关列的表格结构为:

[columnName] VARCHAR(50)
SQL类似于:

SELECT [columns] from [table] where [column] LIKE @param
然后在VB中添加参数:

Dim sessionParam As New Parameter
sessionParam.Name = "param"
sessionParam.DefaultValue = "%"
sessionParam.Type = TypeCode.String
SqlDataSource1.SelectParameters.Add(sessionParam)

到目前为止,我已经尝试强制转换参数值,强制转换列,使用dbType作为参数而不是类型,但似乎没有任何效果,我只是得到了相同的错误。我怀疑该列是以int形式读取的,因为该列是值的混合体,所以有些是数字,有些是文本,因此SQL正在进行“有根据的猜测”,即该值需要是int,而不是使用类似于的
,如果参数为
NULL
,请尝试此操作

SELECT [columns] from [table] where @param is null or [column] = @param

如果传入
NULL
参数,则返回所有内容。如果不为null,则只返回与参数匹配的列。

将nvarchar值“%”转换为int数据类型时,转换失败

很明显,您有一个数据类型问题。而
“%”
的通配符肯定不是
整数。您可能遇到此问题,因为
中的
,其中[column]LIKE@param
可能是一个
整数
。因此,即使您将参数标识为
string
,它仍在尝试进行
整数
字符串
的比较

因此,您正在比较like
WHERE-Integer-like-String
,这会引发数据类型转换错误,因为SQL将自动尝试
字符串
转换为
整数

若要解决以字符串形式搜索数字这一问题,您可以执行以下操作:

WHERE CAST([column] AS VARCHAR(10)) LIKE @param.

这绝对是一个50个字符的100%VarChar。好奇的是,您是否尝试过使用第三方查询工具进行查询?我尝试过,而且效果很好,所以我想说问题出在某个地方的参数上?SQL不会进行猜测,您能检查SqlDataSource1是否绑定到任何控件或数据表,该控件或数据表对此列使用int而不是string吗?它不是no-指向该列的所有内容都表示string/varchar-当我说猜测时,我的意思是,在某些情况下,SQL计算前x行的数量并计算它们以获得数据类型-不确定这是否正确是这里发生的事情,但我知道它可能发生我已经尝试强制转换列,但仍然得到了完全相同的错误你需要向我们展示你的实际相关代码,因为从你的示例到你的错误语句,只有两个选项,你可以将整数列与字符串进行比较,或者尝试将字符串与整数进行比较。您是否在select中使用了可能导致转换问题的case语句?您需要输入实际的相关代码,因为简化可能已经消除了您的问题