我需要使用参数ID(int)搜索ffg表到Id(int)列,如果没有提供ID,我想从该表返回所有数据。我在下面尝试过这个查询:
SELECT *
FROM TableName
WHERE Id LIKE ISNULL (@id, '%')
但是这个查询返回错误:
转换varchar值时转换失败'%'到数据类型 中间体
答案 0 :(得分:2)
您正在将一个整数与"%"进行比较,并且您还使用LIKE这两个都是错误的。 你需要使用这个
SELECT *
FROM TableName
WHERE (Id = @id) or (@id is null)
答案 1 :(得分:1)
这是因为ISNULL
规则:
replacement_value 必须是可隐式转换为 check_expresssion 类型的类型。
在您的情况下:
ISNULL(@id, '%')
当@id
为NULL
时,SQL Server会尝试将'%'
转换为INT
,这会导致转换错误。
如果@id
为NULL
,则要返回所有行,您可以执行以下操作:
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%')