Wertevergleich mit Abfrage in If-Konstrukt

Wertevergleich mit Abfrage in If-Konstrukt

am 10.08.2006 20:51:00 von Steffen Grellmann

Hallo Newsgroup,

ich möchte in einem SQL-Skript einen Wert aus einem Tabellenfeld mit
einem vorgegebenen Wert vergleichen. Wenn die Bedingung nicht erfüllt
ist, soll das Skript abgebrochen werden, ungefähr so:

IF SELECT VersionBackend FROM tbl_main_einstellungen WHERE ID = 1 <>
'SQL 1.5')) THEN
exit
end if

Könntet Ihr mir bitte auf die Sprünge helfen was hier falsch ist? Wie
muß ich das "SELECT..." verpacken, damit ich es in ein IF-Konstrukt
einbauen kann? Bin mit dem Handbuch und mit Google leider nicht weiter
gekommen... .

Freundliche Grüße,

Steffen Grellmann

Re: Wertevergleich mit Abfrage in If-Konstrukt

am 10.08.2006 21:56:26 von Thomas Rachel

Steffen Grellmann wrote:

> Hallo Newsgroup,
>
> ich möchte in einem SQL-Skript einen Wert aus einem Tabellenfeld mit
> einem vorgegebenen Wert vergleichen. Wenn die Bedingung nicht erfüllt
> ist, soll das Skript abgebrochen werden,

Flußkontrolle ist in dieser Form nicht vorgesehen in SQL-Skripten.


> ungefähr so:
>
> IF SELECT VersionBackend FROM tbl_main_einstellungen WHERE ID = 1 <>
> 'SQL 1.5')) THEN
> exit
> end if
>
> Könntet Ihr mir bitte auf die Sprünge helfen was hier falsch ist?

So ziemlich alles ;-)

SELECT ist zunächst mal ein Kommando, welches ein Restultset zurückgibt:
und zwar entweder an die Anwendung, die es dann Zeile für Zeile abfragen
kann, oder aber in Form eines Subselectes (dann müßte es aber in
Klammern stehen.

Aber selbst dann würde das, was Du geschrieben hast, nicht funktionieren,
denn ein MySQL-Skript kennt weder IF/END IF noch EXIT.

Workaround: Du könntest zuerst mittels

SELECT @ver:=VersionBackend FROM tbl_main_einstellungen WHERE ID = 1

oder

SELECT VersionBackend INTO @ver FROM tbl_main_einstellungen WHERE ID = 1

oder SET @ver=(SELECT VersionBackend FROM tbl_main_einstellungen WHERE ID
= 1)

die Variable @ver vorbelegen und danach jeden einzelnen Befehl davon
abhängig machen, ob @ver den richtigen Wert hat, etwa so:

SELECT ... FROM ... WHERE ... AND @ver='SQL 1.5';

was bei INSERTs allerdings nicht funktioniert.

(Anmerkung: Es sei denn, Du redest über Stored Procedures - dann könnte
es das von Dir geschriebene doch in irgendeiner Form geben, damit kenne
ich mich überhaupt nicht aus.)


Thomas