2016-03-02 18 views
7

Mam aplikację łącznika, która czyta z zewnętrznej bazy danych przy użyciu wielbłąda Apache. Próbuję kpić z tej samej bazy danych i operacji kwerendy przy użyciu bazy danych H2, więc łączność z bazą danych trzeciej strony nie jest wymagana do testowania. Baza danych znajduje się na MS SQL Server. Używam trybu jako SQLServer w mojej bazie danych H2. Mam jednak zapytanie mssql z warunkiem if-else. Kiedy próbuję wykonać to, otrzymuję następujący błąd.Jeśli jest inny warunek w zapytaniu bazy danych H2

MSSQL zapytanie jest

if((SELECT count(*) from Employee where DateCreated < '2016-02-02 00:05:00')>1) 
    SELECT TOP 10 * from Employee where DateCreated < '2016-02-02 00:05:00' 
    else 
    SELECT TOP 1 * from Employee where DateCreated < '2016-02-02 00:05:00' 

Komunikat o błędzie:

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement " IF[*]((SELECT COUNT(*) FROM EMPLOYEE)>1) 
    SELECT TOP 10 * FROM EMPLOYEE 
    ELSE 
    SELECT TOP 1 * FROM EMPLOYEE "; expected "INSERT, {"; SQL statement: 
    if((SELECT count(*) from Employee)>1) 
    SELECT TOP 10 * from Employee 
    else 
    SELECT TOP 1 * from Employee [42001-185] 

jestem przy założeniu, że zapytanie warunkowe nie jest obsługiwana w bazie H2. Czy mimo to mogę wykonać to samo zapytanie w H2? Najgorszy przypadek, czy jest jakiś inny sposób, w którym mogę zmienić zapytanie mssql, które jest kompatybilne z H2?

+0

Rzeczywiste zapytanie jest zbyt duże, więc nie chciałem go tutaj wklejać. Jeśli warunek pasuje, musimy wykonać jedno zapytanie inne niż inne. Aby przetestować scenariusz, po prostu utworzyłem proste zapytanie. –

Odpowiedz

3

Nie sądzę, że istnieje. Możesz użyć komendy case w H2 dla efektu if/else, a aplikacja może zinterpretować kod, który przechodzi w warunki i/lub instrukcje do wykonania, tak abyś go napisał i używał w obu zapytaniach ms sql i h2 .

Powiązane problemy