Используя ROW_NUMBER
на любом столбце от любого достаточно большая (стабильная) таблица была бы одним способом сделать это.
SELECT *
FROM (
SELECT TOP 100 2003 + ROW_NUMBER() OVER (ORDER BY <AnyColumn>) AS Yr
FROM dbo.<AnyTable>
) Years
WHERE Yr <= YEAR(GETDATE())
Примечание, которое <AnyTable>
должно содержать, по крайней мере, сумму строк, равных на сумму лет, которых Вы требуете.
system table
должно прийти на ум. CTE
как упомянутый в ответе, данном Joshua. CTE
техника намного выше и менее подвержена ошибкам, чем текущий, учитывая ROW_NUMBER
решение. Toplink реализует JPA 1.0, который не поддерживает передачу списка в качестве параметра (collection_valued_input_parameter - это термин, используемый в документации). Это поддерживается в JPA 2.0, который реализован в преемнике TopLink, EclipseLink.
Если вам нужно придерживаться TopLink, вам нужно написать цикл для включения каждого элемента в список в качестве параметра.
I encountered a similar requirement, and succeeded when I changed query.setParameter("fcIds", fcIds) to setParameterList("fcIds", fcIds). The only difference was that I needed to make this change while using Hibernate (I'm not using TopLink), vs your case where you imply setParamter() seemed to be working with Hibernate.