Я сталкивался с этим раньше.В прошлом я использовал функцию на конце базы данных, которая может принимать список символов (скажем, csv) и превращать их во временную переменную таблицы, к которой вы можете присоединиться.
Примерэта функция:
FUNCTION ListToTable
( @SEP char(1),
@LST varchar(max)
) RETURNS @TBL TABLE (idx int, txt varchar(max)) AS
BEGIN
DECLARE @IX int, @POS int, @COUNT int, @STR varchar(max)
SET @POS = 1
SET @IX = 1
SET @COUNT = 0
WHILE @IX > 0
BEGIN
SET @IX = charindex(@SEP, @LST, @POS)
IF @IX > 0
SET @STR = substring(@LST, @POS, @IX - @POS)
ELSE
SET @STR = substring(@LST, @POS, len(@LST))
SET @COUNT = @COUNT + 1
INSERT @TBL (idx, txt) VALUES(@COUNT, @STR)
SET @POS = @IX + 1
END
RETURN
END
Затем, когда вы выполняете запрос, вы можете сказать:
SELECT * FROM
Measures A
INNER JOIN
ListToTable(',', '1,1,2,3,5,8,...,21') B
ON A.Key=B.Key
AND A.ModificationDate < B.ModificationDate.
Если вам нужно выполнить какое-то приведение к таблице, чтобы сделать идентификаторы целочисленными, или что-то еще;Все в порядке.Я не уверен, что вы можете получить это в HQL, но он отлично работает как запрос.