Diskussion:Einführung in SQL: Programmierung

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Ich brauche Hilfe! Das Gerüst für diese Seite konnte ich erstellen. Aber ich bin bereits bei den ersten Formulierungen gescheitert, da ich nur mit Firebird arbeite und es dort FUNCTION immer noch nicht gibt (nur als EXTERNAL über eine DLL). Ich könnte die Befehlsstrukturen aus den Dokumentationen von MySql, MS-SQL, Oracle übernehmen; aber wenn ich selbst nichts probieren kann, bin ich mir doch zu unsicher - das will ich den Lesern nicht zumuten. Mit StoredProcedures kenne ich mich aus; deshalb fange ich damit an. -- Juetho 17:04, 22. Sep. 2009 (CEST)[Beantworten]

Um anderen Autoren die Arbeit zu erleichtern, habe ich den Abschnitt "Funktionen" doch formuliert. Das habe ich aber nur nach den Dokumentationen gemacht, ohne jede Praxis. Ich bitte deshalb unbedingung um Durchsicht, Korrektur und Ergänzung! -- Juetho 09:11, 24. Sep. 2009 (CEST)[Beantworten]
Vielleicht hilft ein Vergleich mit Oracle: Prozeduren und Oracle: Funktionen. Diese Kapitel sind auch gerade am entstehen. --Julius-m 21:13, 11. Okt. 2009 (CEST)[Beantworten]

SQL in MS_SQL[Bearbeiten]

Es wird geschrieben: Sehr oft werden die Werte aus einem SELECT-Befehl mit Variablen weiterverarbeitet.... Es ist doch eher gemeint, dass mit dem select Befehl Variablen ein Wert zugeschrieben werden kann. Oder was ist gemeint? --Clemensfranz 21:23, 30. Mär. 2010 (CEST)[Beantworten]

Stimmt, das ist gemeint: Die Werte, genauer: einer oder mehrere Werte des Abfrageergebnisses aus einem SELECT-Befehl werden einer oder mehreren Variablen zugewiesen; mit diesen Variablen wird weitergearbeitet.
Aber wie geht das bei MS-SQL?
Jürgen 09:07, 31. Mär. 2010 (CEST)[Beantworten]
DECLARE @fehler INT 
DECLARE @anzahl INT
SELECT * from tabelle
SELECT @fehler = @@error, @anzahl = @@rowcount   -- der gesuchte Befehl
PRINT @fehler
PRINT @anzahl

Ich denke Du meinst das, was ich oben definert habe. @@error und @@rowcount sind beim SQL-Server Systemvariable, die nach jedem Befehl neu gesetzt werden. @@error beinhaltet den Fehlercode (hoffentlich 0) und @@rowcount beinhaltet die Anzahl der zurückgelieferten Datensätze. Ein SET @fehler = @@error würde die Systemvariable @@rowcount auf 0 setzen, eine weiteres SET @anzahl = @@rowcount wäre also immer 0. Mit dem SELECT @fehler = @@error, @anzahl = @@rowcount kann das vermieden werden.

Wenn Du weitere Fragen zum MS-SQL hast, stelle Sie, es würde mich wundern, wenn ich keine Antwort weiß. Mehr als zehn Jahre SQL-Server haben Ihre Spuren hinterlassen. Sprech mich hier auf meiner Diskussionseite an, wenn ich nicht reagiere, dann in der WP, da schaue ich täglich rein, wenn ich nicht im Urlaub bin. -- ClemensFranz 17:55, 31. Mär. 2010 (CEST)[Beantworten]

Nein, ganz so hatte ich es nicht gemeint. Ich dachte an so etwas:
declare @maxid int
@maxid = (select max(id) from tabelle)
// mache etwas mit @maxid, z.B. für einen folgenden INSERT-Befehl
Schau die Firebird-Codes an, die habe ich selbst erstellt und ausprobiert. Um solche Dinge ging es mir.
Nebenbei: Die Kapitel "Programmierung" ff. können natürlich nur ganz grob anreißen, was alles möglich ist. Insofern ging es mir sowieso nur darum, einzelne Möglichkeiten kurz vorzustellen. Aber das sollte sich nicht nur auf FB beziehen.
Deshalb wäre es sehr schön, wenn du passende Teile einfach einbauen könntest. -- Gruß Jürgen 18:14, 31. Mär. 2010 (CEST)[Beantworten]

Was Du oben beschrieben ist ist richtig, würde aber nur eine Variable versorgen. Ein

SELECT <spaltenliste> FROM <usw. alles andere> INTO <variablenliste> ;

geht unter MS-SQL ja nicht. Dort nutze ich ich in solchen Fällen temp-Tabellen. Ein Beispiel wäre:

select * into #temptab from tabelle

Ich mach mich nach Ostern mal ran, das was fehlt zu ergänzen. Es ist aber nicht einfach, etwas was beispielsweise schön und elegant in FB lösbar ist, auch in MS-SQL schon zu lösen. -- ClemensFranz 18:46, 1. Apr. 2010 (CEST)[Beantworten]