Announcement

Collapse
No announcement yet.

Probleme mit negativen Werten in StoredProcedure

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit negativen Werten in StoredProcedure

    Hallo! Ich verwende den folgenden Code in einer StoredProcedure mit SQL SErver 2000 um die Position eines Datensatzes um eines zu verringern bzw. zu erhöhen. Die Änderung wird durch den Wert @AENDERUNG an die SP weitergegeben. Das Erhöhen des Wertes geht einwandfrei, aber die Verringerung nicht. Liegt das daran, dass negative Werte in @AENDERUNG nicht verarbeitet werden? Wie sähe eine Lösung aus?

    Vielen Dank,

    Pascal

    ALTER PROCEDURE UPD_AUSNR @UMFRAGETYP_ID int,
    @AUSSAGE_ID int, @AENDERUNG int AS

    DECLARE @MAXNR int

    SET @MAXNR = (SELECT MAX(ATYP_NR) FROM T_ATYP WHERE ATYP_TYP_ID =
    @UMFRAGETYP_ID AND ATYP_NR=@AUSSAGE_ID)

    IF (@AUSSAGE_ID+@AENDERUNG<@MAXNR) OR (@AUSSAGE_ID+@AENDERUNG<0) RETURN(0)

    UPDATE T_ATYP
    SET ATYP_NR = 9999999
    WHERE ((ATYP_TYP_ID = @UMFRAGETYP_ID) AND (ATYP_NR =
    @AUSSAGE_ID+@AENDERUNG))

    UPDATE T_ATYP
    SET ATYP_NR = @AUSSAGE_ID+@AENDERUNG
    WHERE ((ATYP_TYP_ID = @UMFRAGETYP_ID) AND (ATYP_NR = @AUSSAGE_ID))

    UPDATE T_ATYP
    SET ATYP_NR = @AUSSAGE_ID
    WHERE ((ATYP_TYP_ID = @UMFRAGETYP_ID) AND (ATYP_NR = 9999999))

  • #2
    Hallo,

    wie der folgende kurze Test zeigt, ist das Updaten über negative Werte kein Problem:
    <pre>
    USE tempdb
    GO
    CREATE TABLE UpdateTest
    (
    recid INTEGER NOT NULL IDENTITY PRIMARY KEY,
    wert INT
    )
    GO
    INSERT INTO UpdateTest (wert) VALUES (1)
    GO
    CREATE PROCEDURE spUpdate
    (
    @Wert INTEGER
    )
    AS
    UPDATE UpdateTest SET wert = @Wert WHERE recid = 1
    RETURN @@rowcount
    GO
    -- Test 1:
    EXEC spUpdate 2
    SELECT * FROM UpdateTest
    -- Test 2:
    EXEC spUpdate -10
    SELECT * FROM UpdateTest
    </pre>
    Somit muss ein "logischer Fehler" vorliegen, wenn die WHERE-Einschränkung beim UPDATE keinen Treffer liefert. Ich würde daher zuerst über PRINT-Aufrufe nachsehen, ob das Berechnungsergebnis tatsächlich mit den erwarteten Werten übereinstimmt:
    <pre>
    CREATE PROCEDURE spUpdateExt
    (
    @Wert1 INTEGER,
    @Wert2 INTEGER
    )
    AS
    PRINT @Wert1 + @Wert2
    RETURN 0
    GO
    -- Test
    EXEC spUpdateExt 2,2
    EXEC spUpdateExt 2,-2
    </pre&gt

    Comment

    Working...
    X