2016-03-02 10 views
7

Ich habe eine Connector-Anwendung, die aus der Datenbank von Drittanbietern mit Apache Camel liest. Ich versuche, die gleiche Datenbank und Abfrage-Operationen mit H2-Datenbank zu verspotten, so dass die Verbindung zu der Drittanbieter-Datenbank nicht zum Testen benötigt wird. Die Datenbank befindet sich in MS SQL Server. Ich benutze den Modus als SQLServer in meiner H2-Datenbank. Allerdings habe ich eine Mssql-Abfrage mit If-Else-Bedingung. Wenn ich versuche, es auszuführen, erhalte ich den folgenden Fehler.If-Else-Bedingung in H2-Datenbank-Abfrage

MSSQL Abfrage ist

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' 

Fehlermeldung:

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] 

Ich gehe davon aus, dass die bedingte Abfrage nicht in der H2-Datenbank unterstützt wird. Gibt es da sowieso, kann ich diese Abfrage in H2 ausführen? Worst Case, gibt es irgendeinen anderen Weg, in dem ich die mssql Frage ändern kann, die mit H2 kompatibel ist?

+0

Die tatsächliche Abfrage ist zu groß, also wollte ich sie hier nicht einfügen. Wenn die Bedingung übereinstimmt, müssen wir eine einzige Abfrage ausführen, andernfalls eine andere. Um das Szenario zu testen, habe ich einfach eine einfache Abfrage erstellt. –

Antwort

3

Ich glaube nicht, dass es. Sie können den Befehl case in H2 für den if/else-Effekt verwenden und in Ihrer Anwendung den Code beeinflussen, der in die Bedingungen und/oder Anweisungen fließt, damit Sie ihn schreiben und in Ihren ms sql- und h2-Anfragen verwenden .