JPA / SQL Server - использовать список целых чисел в качестве временной таблицы - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть список объектов Integer в моей программе Spring Boot, которые я хочу использовать в качестве ссылки для обновления таблицы, устанавливая только столбец с определенным значением для записей с идентификатором, найденным в этом списке.Из-за потенциальной длины списка я хочу избегать использования предложения 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, я бы действительно хотел бы избежать этого, если это возможно.Я попытался найти решение, но не смог найти то, что искал.Есть ли решение для этого?

1 Ответ

0 голосов
/ 20 сентября 2019

В любом случае вы создаете запрос , поэтому лично я не вижу проблемы с созданием предложения значений.Однако вы также можете выполнить синтаксический анализ строки:

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, ','));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...