Announcement

Collapse
No announcement yet.

Fortlaufende ID zurücksetzen?

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

  • Fortlaufende ID zurücksetzen?

    Hallo, ich lege zu Testzwecken über eine Stored Procedure Daten in einer Tabelle mit fortlaufender PrimaryKey-ID (Identitätsspezifikation auf Ja) an, und lösche die angelegten Werte danach wieder. Nun wird jedoch die weitergezählte ID nicht zurückgesetzt beim nächsten Insert, kann man das irgendwo einstellen?

    Beispiel:
    2 Datensätze angelegt (id):
    100
    101

    Dann beide manuell gelöscht: 100 und 101

    2 neue angelegt. Es wird automatisch statt 100, 101:

    102
    103

    angelegt...

    Ich benutz das SQL Server Studio Management Express, gibt es da eigentlich eine Logdatei für abgebrochene Strored Procedures??

    Danke.
    H.

  • #2
    Hallo H.,

    grundsätzlich funktioniert das folgendermaßen:
    Code:
    DBCC CHECKIDENT 
    ( 
            'table_name'
            [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
    )
    [ WITH NO_INFOMSGS ]
    Alternativ kannst Du den Wert auch manuell setzen, indem Du mit
    Code:
    SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
    erlaubst, manuell einen Wert in diese Spalte einzutragen.

    Aber:
    Eigentlich wird man so nicht arbeiten, da der Identity-Wert lediglich dazu dient, einen Datensatz eindeutig zu kennzeichnen und sonst keine weitere Bedeutung haben sollte.
    Es gibt aber sicherlich Implementierungen, wo dieser Wert z.B. als eindeutige Kundennummer genommen wird. Auch wenn sich darüber trefflich streiten lässt, ist dieser Ansatz sicherlich nicht optimal.
    In einem solchen Fall kann per z.B. Stored Procedure eine neue Kundennummer zurückgegeben werden, wobei bei Mehrbenutzer-Umgebungen auf einige Dinge geachtet werden muss. Damit würde dann auch die IDENTITY-Saplte entfallen ...

    HTH,
    Karsten

    Comment


    • #3
      Supi, klappt 1A, danke!

      Hat noch jemand eine Idee, wie man an (bessere) SQL Server-Errorlogdaten herankommt, wenn eine SP mal Fehler erzeugt?
      Ich erhalte z.B. die Meldung:
      java.sql.SQLException: Eine Zeile mit doppeltem Schlüssel kann in das tabCosts-Objekt mit dem eindeutigen IX_tabCosts-Index nicht eingefügt werden.

      ...weiss aber nun nicht, an welcher Stelle der Fehler auftritt, da die SP mehrere Inserts auf tabCosts enthält, und auch andere SPs aufruft, die wiederum auch die Ursache sein könnten...

      Comment


      • #4
        Originally posted by hansklee View Post
        Supi, klappt 1A, danke!

        Hat noch jemand eine Idee, wie man an (bessere) SQL Server-Errorlogdaten herankommt, wenn eine SP mal Fehler erzeugt?
        Ich erhalte z.B. die Meldung:
        java.sql.SQLException: Eine Zeile mit doppeltem Schlüssel kann in das tabCosts-Objekt mit dem eindeutigen IX_tabCosts-Index nicht eingefügt werden.

        ...weiss aber nun nicht, an welcher Stelle der Fehler auftritt, da die SP mehrere Inserts auf tabCosts enthält, und auch andere SPs aufruft, die wiederum auch die Ursache sein könnten...
        Gehört eigntlich in neuen Thread...

        exception-handling in der Procedures mit
        Code:
         BEGIN TRY
           ..... 	
        END TRY
        BEGIN CATCH
        	DECLARE @ErrorMessage	NVARCHAR(1024)
        	,	@ErrorSeverity	INT
        	,	@ErrorState	INT
        	,	@ErrorLine	INT
        ;
        SELECT  @ErrorMessage	= ' Fehler in Procedure (Name)' + ERROR_MESSAGE() 
        			   + ' at Line ' + CAST (ERROR_LINE() AS NVARCHAR (6))
        			,	@ErrorSeverity	= ERROR_SEVERITY ()
        			,	@ErrorState		= ERROR_STATE ()
        			,	@ErrorLine		= ERROR_LINE ();
        PRINT SPACE (15) + @ErrorMessage;
        RaisError (@ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorLine)
        END CATCH

        Comment


        • #5
          Danke für den Tipp, werde ich mal ausprobieren!!

          Comment

          Working...
          X