Yuri: Stored Procedure ersetzen durch SQL Statement

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

  1. Ok, habe herausgefunden, dass es nicht so geht, aber könnte mir jemand vielleicht eine Alternative nennen?

  2. 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

    --
    Nur selber lernen macht schlau
    1. 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

      1. 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

        --
        Nur selber lernen macht schlau
        1. 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

          1. 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

            --
            Nur selber lernen macht schlau