将nvarchar值'%'转换为数据类型int时转换失败

时间:2016-08-22 14:12:04

标签: sql sql-server vb.net

我有一个对象数据源,它从数据库中提取信息,如果我们没有这个特定参数的值,那么我们想得到所有记录。所以我有一个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

2 个答案:

答案 0 :(得分:2)

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

很清楚你有数据类型问题。 '%'的通配符肯定不是integer。您可能遇到此问题,因为column中的where [column] LIKE @param可能是integer。因此,即使您将参数标识为string,它仍然会尝试进行integerstring比较。

所以你比较像WHERE Integer LIKE String那样会引发数据类型转换错误,因为SQL会自动尝试convert stringinteger

如果你想搜索一个数字作为一个看起来不是一个好主意的字符串,你可以解决这个问题:

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

答案 1 :(得分:1)

如果参数为LIKE,请不要使用NULL,而是尝试使用此功能。

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

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