假设我有这样的 sql 查询
SELECT * FROM TABLE where country in ('USA', 'UK')
此查询按预期工作,它会选择 country 列为'USA'
或的所有行'UK'
。但是现在,如果我运行这个查询
SELECT * FROM TABLE where country IN ()
它是一个语法错误。所以我把它改成这样运行
SELECT * FROM TABLE where country IN ('')
我的目标是使用jdbcTemplate
来Spring framework
动态运行此 sql 查询。但是我不确定我的输入是什么。所以我希望能够通过'USA'
or之类的国家,'UK'
并且只获得与那些OR
什么都不通过和 get相关的行ALL rows
。那么我如何获得ALL rows
ifnothing
被传入IN clause
?
你必须使用动态 sql。
例如,下面是一个让您入门的简单示例。
在 SQL 2016 及更高版本中,您可以在没有动态 SQL 的情况下使用 JSON。
您可以有一个静态查询,例如:
或者
并将 @values 绑定到 nvarchar(max) 参数,格式为 JSON 数组。
您应该将程序更改为不通过 where 子句发送,而不是使用动态 SQL 或 JSON 或其他一些技术。在构建代码时添加 if 语句以控制添加
WHERE country IN ()
语句。