Stored Procedure ersetzen durch SQL Statement
Yuri
- datenbank
0 Yuri0 Tom0 Vinzenz Mai0 Tom0 Vinzenz Mai0 Tom
Hallo!
Ich habe eine SP in einer MS SQL Server DB und versuche diese durch ein einzelnes SQL-Statement zu ersetzen, da ich den Cursor vermeiden möchte.
Hier das Statement:
Insert into tbl_GuidGF(GFId, Zaehler,RepID)
select GeschaeftFallID,(select max(Zaehler)+1 from tbl_GuidGF),GeschaeftFallID from tbl_Geschaeftfall
where GeschaeftFallID not in(select GFID from tbl_GuidGF)
Jetzt meine Frage:
Wenn er die Daten einfügt, wird dann der Zähler immer um 1 erhöht oder steht dann dort jedesmal die gleiche Zahl?
Also so wie hier:
GeschaeftFallID GeschaeftFallID
------------------------------------ ----------- ------------------------------------
3D6113E3-4CF2-4DBC-90A1-ED175F910019 53392 3D6113E3-4CF2-4DBC-90A1-ED175F910019
63D4E897-4CE7-42B2-8A7F-CB1495677475 53392 63D4E897-4CE7-42B2-8A7F-CB1495677475
EE62DA1D-ED05-48CA-B682-F5EE4CB7702B 53392 EE62DA1D-ED05-48CA-B682-F5EE4CB7702B
oder erhöht er mir den Zähler immer um 1 wie hier:
GeschaeftFallID GeschaeftFallID
------------------------------------ ----------- ------------------------------------
3D6113E3-4CF2-4DBC-90A1-ED175F910019 53392 3D6113E3-4CF2-4DBC-90A1-ED175F910019
63D4E897-4CE7-42B2-8A7F-CB1495677475 53393 63D4E897-4CE7-42B2-8A7F-CB1495677475
EE62DA1D-ED05-48CA-B682-F5EE4CB7702B 53394 EE62DA1D-ED05-48CA-B682-F5EE4CB7702B
Ok, habe herausgefunden, dass es nicht so geht, aber könnte mir jemand vielleicht eine Alternative nennen?
Hello,
Insert into tbl_GuidGF(GFId, Zaehler,RepID)
select GeschaeftFallID,(select max(Zaehler)+1 from tbl_GuidGF),GeschaeftFallID from tbl_Geschaeftfall
where GeschaeftFallID not in(select GFID from tbl_GuidGF)
Ist das bei MS-SQL erlaubt, ein (sub-)Select auf eine vom Insert betroffene Spalte zu legen?
Bei MySQL gibt es da, soweit ich weiß, heftig auf die Finger, bzw bei älteren Versionen konnte das zum Verlust der Daten führen.
Im Prinzip kannst Du nur eine mit einem Table-Lock gebundene Sequenz daraus machen
Tabelle sperren
maximalen Zähler holen
Daten mit neuem Zähler eintragen
Tabelle entsperren
Anderenfalls hinterlässt Du eine nicht behandelte Race Condition.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
Hallo
Insert into tbl_GuidGF(GFId, Zaehler,RepID)
select GeschaeftFallID,(select max(Zaehler)+1 from tbl_GuidGF),GeschaeftFallID from tbl_Geschaeftfall
where GeschaeftFallID not in(select GFID from tbl_GuidGF)Ist das bei MS-SQL erlaubt, ein (sub-)Select auf eine vom Insert betroffene Spalte zu legen?
Ja, sicher.
Freundliche Grüße
Vinzenz
Hello,
Ist das bei MS-SQL erlaubt, ein (sub-)Select auf eine vom Insert betroffene Spalte zu legen?
Ja, sicher.
Seit wann?
Ich erinnere mich da noch an anderslautende Aussagen, speziell, was dieses "max()-Problem" betrifft.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
Hallo
Ist das bei MS-SQL erlaubt, ein (sub-)Select auf eine vom Insert betroffene Spalte zu legen?
Ja, sicher.Seit wann?
Ich erinnere mich da noch an anderslautende Aussagen, speziell, was dieses "max()-Problem" betrifft.
ich kann mich an keine derartigen Aussagen erinnern. Soweit ich mich erinnere, ging das schon in Version 7.0 und wohl auch in 6.5 und noch älteren Versionen.
Das kann ich mangels derart alter Software nicht mehr nachvollziehen.
Du verwechselst das wohl mit der - von Dir selbst angesprochenen - Unfähigkeit von MySQL in dieser Hinsicht.
Freundliche Grüße
Vinzenz
Hello,
Du verwechselst das wohl mit der - von Dir selbst angesprochenen - Unfähigkeit von MySQL in dieser Hinsicht.
Kann sein.
Wenn ich mein Archiv wieder im Zufriff habe und dran denke, werde ich mal nachsehen, in welchem Zusammenhang mir das begegnet ist.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de