Hallo,
ich habe hier gerade kein SQL installiert, aber probier' mal das:
UPDATE TabName SET Nummer = 12345
WHERE Nummer IS NULL AND ZeilenID = (SELECT MIN(ZeilenID) FROM TabName);
Garantieren kann ich allerdings für nichts. Ich hatte auch gestern und heute zum ersten Mal einen SQL-Lehrgang und muss nun meine Erfahrungen damit machen.
Was ich allerdings weiß, ist dass Du in einer WHERE-Klausel nie "direkt" eine Aggregatsfunktion (MIN, MAX, COUNT,....) verwenden darfst.
Und das HAVING ist im Regelfall dafür gedacht, die Ergebnisse bei einem GROUP BY einzuschränken. Bei GROUP BY muss eine Aggregatsfunktion dabei sein.
Eine gute Seite ist diese hier:
http://www.sql-und-xml.de/sql-tutorial/index.html
Vielleicht wirst Du auch da fündig, falls mein Tip nicht geholfen hat.
Gruß Markus
' schrieb:Hallo,
dies hat zwar nicht direkt was mit LabVIEW zu tun, ich hoffe aber, daß es unter Euch jemanden gibt, der mir weiterhelfen kann, weil ja auch ein paar Leutchen das SQL-Toolkit nutzen.
Meine Tabelle besteht aus 3 Spalten: eine mit der Zeilen-ID (Autoincrement), eine mit einem String (Seriennummer) und eine mit einer zweiten ID (Nummer).
Spalte 2 mit dem String soll mittels INSERT gefüllt werden. Die Zeilen-IDs in der ersten Spalte wird automatisch erzeugt, die letzte Spalte bleibt vorerst leer.
Im weiteren Verlauf soll von mehreren Rechnern aus die erste freie Seriennummer abgerufen und die zweite ID in die letzte Spalte getragen werden. Jede Seriennummer darf nur einmal vergeben werden! D.h. ich möchte in einem Zugriff (also ein SQL) die letzte Spalte updaten und die Seriennummer direkt oder zumindest die Zeilen-ID zurückerhalten.
Mein SQL sähe dann etwa so aus "UPDATE TabName SET Nummer = ... WHERE Nummer IS NULL AND ZeilenID = MIN(ZeilenID). Geht aber nicht, da bekomm ich die Fehlermeldung: "]Invalid use of group function".
Wenn ich diese WHERE-Clause bei SELECT in Verbindung mit "Having" verwende (SELECT * FROM TabName where Nummer is NULL having ZeilenID = MIN(ZeilenID)) erhalte ich die gewünschte Zeile. Having ist aber allerdings auf "Update" nicht anwendbar.
Die Überlegung erst über die select-Anweisung die Zeilen-ID zu erhalten und dann die Nummer in die letzte Spalte dieser Zeile nachzutragen, scheidet aus, weil ja in der Zwischenzeit die Anfrage auf die erste freie Seriennummer eines anderen PCs erfolgen kann. Somit würden beide Stellen mit der gleichen Seriennummer arbeiten, was aber auszuschließen ist.
Hat jemand eine Idee, dieses Problem auf die Art zu lösen oder einen anderen Lösungsvorschlag?
P.S.: der DB-Server, auf den zugegriffen werden muß läuft noch mit SQL4, d.h. ich kann noch keine stored procedures machen.
Die Nummer der letzten Spalte wird auch nur einmal vergeben. Es wäre also möglich, diese Apalte der erste Zeile, bei der noch keine Nummer eingetragen ist, mit der Nummer zu füllen und anschließend die Seriennummer anhand dieser Nummer zu suchen. Wie erhalte ich aber die erste freie Zeile in Verbindung mit der Update-Anweisung?