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?
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. –