转换varchar值时转换失败'%'

时间:2016-03-21 03:39:24

标签: sql-server

我需要使用参数ID(int)搜索ffg表到Id(int)列,如果没有提供ID,我想从该表返回所有数据。我在下面尝试过这个查询:

SELECT *
FROM TableName
WHERE Id LIKE ISNULL (@id, '%')

但是这个查询返回错误:

  

转换varchar值时转换失败'%'到数据类型   中间体

4 个答案:

答案 0 :(得分:2)

您正在将一个整数与"%"进行比较,并且您还使用LIKE这两个都是错误的。 你需要使用这个

SELECT *
FROM TableName
WHERE (Id = @id) or (@id is null)

答案 1 :(得分:1)

这是因为ISNULL规则:

  

replacement_value 必须是可隐式转换为 check_expresssion 类型的类型。

在您的情况下:

ISNULL(@id, '%')

@idNULL时,SQL Server会尝试将'%'转换为INT,这会导致转换错误。

如果@idNULL,则要返回所有行,您可以执行以下操作:

SELECT *
FROM TableName
WHERE 
    (Id = @id OR @id IS NULL)

答案 2 :(得分:1)

这是你在afterEvaluate { tasks['prepareFlavor2DebugDependencies'].doFirst { throw new IllegalArgumentException("This project is not valid") } } 内所要做的:

ISNULL

这里,如果@id为null,则传递ID(列值本身)以进行比较,该ID将始终匹配并导致返回表中的所有数据。

答案 3 :(得分:0)

你需要关闭Id,因为它是整数所以喜欢:

Where CAST(Id AS TEXT) LIKE '123%')