JPA/SQL Server语言 - 使用整数列表作为临时表



我的 Spring 引导程序中有一个 Integer 对象列表,我想将其用作更新表的参考,仅将列设置为具有此列表中 id 的记录的特定值。由于列表的潜在长度,我想避免使用 IN 子句,因为这可能会导致 SQL Server 错误过多的参数。

我正在考虑的解决方案涉及类似于以下内容的查询:

WITH ids as (select * from <list of Integers> as pool(num))
update t set t.column = :value from <table> t, ids where t.id = ids.num

我看到的问题是将列表中的每个整数包装在 VALUE(( 中,即:

WITH ids as (select * from value(1),value(2),...etc)

虽然我似乎可以通过在 Java 中迭代列表以编程方式处理此查询字符串,但如果可能的话,我真的很想避免这样做。我确实尝试寻找解决方案,但找不到我想要的东西。有解决方案吗?

无论如何,您都在构造查询,所以我个人认为构造值子句没有问题。 但是,您也可以解析字符串:

update t
set t.column = :value
from <table> t,
where t.id in (select * from string_split(@ids, ','));

注意:您可能需要注意类型转换,因此如果id是整数:

update t
set t.column = :value
from <table> t,
where t.id in (select try_convert(int, value) from string_split(@ids, ','));

最新更新