none
MSSQL erst Update dann Select RRS feed

  • Frage

  • Hallo,

    ich habe folgenden Anweisung.

    cmd.Parameters.Clear()
    cmd.CommandText = "UPDATE Vorgangsart SET Letzte_Nummer = (Select Letzte_Nummer + 1 From Vorgangsart WHERE Jahr=@Jahr AND Bezeichnung=@Bezeichnung) , Lastupdate=@Lastupdate WHERE Jahr=@Jahr AND Bezeichnung=@Bezeichnung"
    cmd.Parameters.Add("@Jahr", SqlDbType.NVarChar).Value = G_Jahr
    cmd.Parameters.Add("@Bezeichnung", SqlDbType.NVarChar).Value = "VORGANG"
    cmd.Parameters.Add("@Lastupdate", SqlDbType.DateTime).Value = Date.Now
    cmd.ExecuteScalar()

    Wie kann ich jetzt die Anweisung ändern das ich als Rückgabewerte den neue Wert "Letzte_Nummer" bekommen?
    Ich möchte diese in einer Anweisung durchführen.


    Frank Bergmann

    Samstag, 30. April 2011 14:17

Antworten

  • Hallo Frank,

    die OUTPUT Klausel hat nichts mit (Output-)Parametern zu tun, sie wird als normales Resultset zurückgegeben,
    d. h. genauso als wenn Du SELECT ... verwenden würdest.

    Du kannst sie entweder über einen SqlDataReader abrufen (via cmd.ExecuteReader)
    oder auch mit einem SqlDataAdapter eine DataTable aktualisieren.

    Gruß Elmar

    Samstag, 30. April 2011 16:20
    Beantworter

Alle Antworten

  • Hallo Frank,

    da hatte ich ein Deja Vu ;-)

    Lies bitte erst die Antworten zu Deiner Frage aus dem Februar: Select mit Update

    Sollte dann etwas offen bleiben, können wir hier weitermachen, ...

    Gruß Elmar

    Samstag, 30. April 2011 14:48
    Beantworter
  • Hallo Elmar

    ja ich hatte das irgentwie vergessen weil wieder etwas anderes dazwischen kann.

    Ich habe den Code entsprechend geändert aber wie könne ich die Output Parameter ran.

    cmd.Parameters.Clear()
    cmd.CommandText = "UPDATE Vorgangsart SET Letzte_Nummer = Letzte_Nummer + 1, Lastupdate=@Lastupdate " & _
    "OUTPUT inserted.VorgangsartID, inserted.Jahr, inserted.Letzte_Nummer, inserted.Lastupdate " & _
    "WHERE Jahr=@Jahr AND VorgangsartID=@VorgangsartID"
    cmd.Parameters.Add("@Jahr", SqlDbType.NVarChar).Value = G_Jahr
    cmd.Parameters.Add("@VorgangsartID", SqlDbType.SmallInt).Value = AS_VorgangsartID
    cmd.Parameters.Add("@Lastupdate", SqlDbType.DateTime).Value = Date.Now

    Dim myNummer As New SqlParameter("Letzte_Nummer", SqlDbType.VarChar)
    myNummer.Direction = ParameterDirection.Output
    cmd.ExecuteNonQuery()

    Dim neueNummer As String = myNummer.Value

    Das funktioniert nicht.

     

    Gruß

    Frank Bergmann

     

    Samstag, 30. April 2011 15:54
  • Hallo Frank,

    die OUTPUT Klausel hat nichts mit (Output-)Parametern zu tun, sie wird als normales Resultset zurückgegeben,
    d. h. genauso als wenn Du SELECT ... verwenden würdest.

    Du kannst sie entweder über einen SqlDataReader abrufen (via cmd.ExecuteReader)
    oder auch mit einem SqlDataAdapter eine DataTable aktualisieren.

    Gruß Elmar

    Samstag, 30. April 2011 16:20
    Beantworter