Seite 1 von 1

SQL All in one [ERLEDIGT]

Verfasst: Do, 02. Jul 2020 13:14
von Manfred
man kann doch einen SQL Befehl mit allen möglichen Dingen vermischt abschicken!? Insert, Update, Alter Table usw. Der SQL Server arbeitet den dann so wie er es für richtig hält nacheinander ab? Oder geht das nicht? Oder muß/sollte man bestimmte Befehle getrennt abschicken? Wenn ja, wie wäre dann die zu beachtende Reihenfolge?

Re: SQL All in one

Verfasst: Do, 02. Jul 2020 13:36
von Martin Altmann
Nein.
Eine Anweisung mit Insert, eine mit Update, eine mit alter.
Kombinieren lassen sich manche auch (Update z.b. mit insert, wenn noch nicht vorhanden o.ä.)
Aber immer schön ordentlich trennen macht auch die Pflege einfacher. Schachtelanweisungen verstehst du drei Wochen später schon nicht mehr.

Viele Grüße,
Martin

Re: SQL All in one

Verfasst: Do, 02. Jul 2020 14:13
von Tom
Wenn ja, wie wäre dann die zu beachtende Reihenfolge?
Das hängt vom erwarteten Ergebnis ab. Und von der Logik, die zu ihm führen soll. Wenn ich ein Feld updaten will, das es im Moment noch nicht gibt, muss ich das ALTER TABLE vorher machen. Wenn ich ein bestehendes Feld updaten will, das später verwendet wird, um ein durch ALTER TABLE neu hinzukommendes Feld zu bestücken, kann ich's nach dem UPDATE machen. Das ist wie überall.

Re: SQL All in one

Verfasst: Do, 02. Jul 2020 14:16
von Manfred
ok, eine gewisse Reihenfolge ist mir klar. Erst Feld anfügen, dann ändern z.B.
Aber ich habe gerade mal einen String zusammenbauen lassen und den getestet. Was auf jeden FAll wichtig scheint, ist das man mit ";" trennt, wenn man mischt. Also doch eine gewisse Vorsicht ist angesagt.

Re: SQL All in one

Verfasst: Do, 02. Jul 2020 14:46
von Marcus Herz
Ich glaub du meinst sowas:
TEXT INTO cSQL
UPDATE table set name ='nlw' where nummer = 1;
UPDATE table set name ='nlw' where nummer = 2;
UPDATE table set name ='nlw' where nummer = 3;
UPDATE table set name ='nlw' where nummer = 4;
ENDTEXT
Dann kannst du das mit einem Aufruf ausführen.

ALTER TABle mit da rein kann problematisch sein, weil die Tabelle evtl. noch gecacht ist und dewegen nicht exclusiv geöffnet werden kann.
Vor allem mit
DROP INDEX
CREATE INDEX
zusammen hat ADS immer wieder Probleme

Re: SQL All in one

Verfasst: Do, 02. Jul 2020 14:49
von Manfred
ich meine sowas

Code: Alles auswählen

ALTER ONLINE TABLE FAHRER  ADD DSGVO LOGICAL POSITION          7
 ADD DSGVODAT Date POSITION          8
 ADD K95BIS Date POSITION         19
 ;
 UPDATE FAHRER SET DSGVO = false

Re: SQL All in one

Verfasst: Do, 02. Jul 2020 16:14
von Marcus Herz
Sollte auch gehen, weil auch
ALTER ONLINE TABLE innerhalb eines Scriptes sychron ist.
Das UPDATE erfolgt erst nach dem ALTER