Announcement

Collapse
No announcement yet.

Geht das: Den (Autoinkrement-)Index einer Tabelle erneuern?

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

  • Geht das: Den (Autoinkrement-)Index einer Tabelle erneuern?

    Ich (Amateur) arbeite an einem Quartals-Dienstplanprogramm. Die 70 Teilnehmer haben natürlich Wünsche, wann sie keinen Dienst machen möchten. Bei der Eingabe dieser Wünsche in eine Tabelle muss ich ein zweidimensionales Array "Verhinderungen" verwenden (Dienstteilnehmer und Zahl der Wünsche). Bei der Dimensionierung des Arrays "Verhinderungen" im entsprechenden Visual-Basic-2010-Formular gehe ich für das Quartal von 70 Teilnehmern und 5000 Wünschen aus (manche können das gesamte Quartal keine Dienste machen).
    Das funktioniert auch alles, die Planerstellung klappt.
    Im darauffolgenden Quartal ist aber die oben genannte Tabelle nutzlos. Sie wird per Programmcode gelöscht (DELETE QUERY), aber jetzt taucht das Problem auf, dass bei neuen Eingaben zum neuen Quartal die Autoinkrementwerte für das Primärschlüsselfeld dort weiter zählen, wo die alte Tabelle aufgehört hat. Das würde für die Funktion des Programms auch nicht weiter stören, wenn ich jetzt nicht gezwungen wäre, die Dimensionierung des obigen Arrays zu erhöhen.
    Meine Fragen:
    -Wäre es von erheblichem Nachteil, wenn ich dann diese Tabelle für ein ganzes Jahr verwenden würde? Dazu müßte ja die Dimensionierung der Wünsche innerhalb des Arrays mit 4 multipliziert und auf 20.000 gesetzt werden.
    -Oder gibt es eine Möglichkeit, nach dem Löschen der Tabelle den Autoinkrement-Index wieder bei Null beginnen zu lassen?
    Auf Ratschläge von Euch freut sich hubottom

  • #2
    Ich verstehe nicht so ganz, was dein Array mit dem Autoincrement zu tun hat? Selektiere doch die Daten die du brauchst; dann ist egal ob die alten gelöscht werden. Dun bekommst die Daten, die für den gewünschten Zeitraum passen
    Christian

    Comment


    • #3
      Danke, Christian, für Deine Antwort.
      Die Sache mit dem Array liegt sicher an meiner Unerfahrenheit (Amateur).
      Darauf könnte ich verzichten und die Daten direkt in die Tabelle eingeben. Ich fand es nur hilfreich, in einer Listbox, die mit dem Array gekoppelt ist, die aktuellen Dienstwünsche des gerade bearbeiteten Teilnehmers überblicken zu können, bevor sie in der Tabelle "verschwinden". Ich kann sie auch direkt in die Tabelle eingeben.
      Aber meine Frage, ob die Autoinkrementwerte einer Primärschlüsselspalte nach Löschen der Tabelle auf Null gesetzt werden können, interessiert mich trotzdem, weil ich mich schlecht mit dem Gedanken anfreunden kann, alle zigtausend Dienstverhinderungswünsche eines Jahres in einer Tabelle mit rumschleppen zu müssen.
      ___________
      hubottom

      Comment


      • #4
        Wenn du die gesamte Tabelle löschen und den Autoincrement auf den Startwert zurücksetzen willst, dann probiere es doch mal mit TRUNCATE TABLE. Das Truncate geht zwar nicht immer (zB. wenn es eine Fremdschlüsseltabelle ist), wäre aber für deine Anforderung die beste Lösung. Anderenfalls beim DELETE bleiben und den Autoincrementwert mittels DBCC CHECKIDENT zurücksetzen.

        bye,
        Helmut

        [edit] ... eigentlich hat Christian Recht, normalerweise löscht man die Daten nicht, weil irgendwann immer mal der Zeitpunkt kommt, wo man etwas Altes anschauen will/muss. Daher arbeitet man da einfach mit einer indizierten Zeitspalte. Aber letztendlich kannst du das entscheiden, jetzt kennst du ja beide Möglichkeiten.
        Zuletzt editiert von hwoess; 16.01.2011, 15:55.

        Comment


        • #5
          Danke, Helmut, für Deine Unterstützung.
          Ich möchte noch einmal erwähnen, dass ich nur die (Hilfs-)Tabelle mit den verhinderten Tagen der einzelnen Dienstteilnehmer löschen möchte. Die Haupttabelle, die das eigentliche Ziel des Programmes ist (= der fertige Dienstplan), wird selbstverständlich abgespeichert.
          Abe die HIlfstabelle ist wirklich überflüssig und zudem schon nach einem Quartal mit über 3000 Datensätzen ziemlich groß.

          Ich habe eben TRUNCATE TABLE versucht, bekomme aber die Meldung von Visual Basic 2010 (Express Edition) "wird nicht unterstützt". Die andere Möglichkeit mit DBCC CHECKIDENT klappt auch nicht; ich habe ja nicht Transact-SQL - (bin ich etwa im falschen Forum?) sondern SQL Server 2008.
          Danke für Eure Hilfe bis hierher!
          __________________
          hubottom
          Zuletzt editiert von hubottom; 16.01.2011, 18:00.

          Comment


          • #6
            Da verwendest du dann also die COMPACT-Edition, die kann natürlich vieles nicht, was ein "richtiger" SQL-Server kann (wie diese von mir beschrieben Sachen)! In diesem Fall bleibt dir nur eines: siehe hier.

            bye,
            Helmut

            Comment


            • #7
              Hallo Helmut,
              schlimmer noch: Ich verwende SQL Server 2008 Express. Deine zuletzt vorgeschlagene Möglichkeit mit "ALTER TABLE [TableName] ALTER COLUMN ID IDENTITY (1,1)” führt auch nur zur Meldung "ALTER TABLE wird nicht unterstützt". Jetzt weiß ich nicht, ob's an der SQL-Express-Edition oder an der Visual Basic-Express-Edition liegt, denn eigentlich müßte es beim SQL-Server gehen (wie die Tabellen am Ende des Buches Throll & Bartosch: Einstieg in SQL, 4. Aufl. 2011 zeigen. ALTER INDEX geht hiernach aber tatsächlich nicht beim SQL-Server).
              Jetz habe ich einen Verdacht:
              Bisher habe ich SQL-Befehle bei der Programmierung immer über den Assistenten der Benutzeroberfläche des datasetMeinProgramm.xsd erstellt. Wie der beigefügte Screenshot zeigt, stehen hier eigentlich nur 5 Möglichkeiten zur Verfügung (SELECT eine oder viele Zeilen, SELECT ein Wert, UPDATE, DELETE, INSERT), die eigentlich für mein Vorhaben nicht zutreffen (Index löschen und/oder erneuern). Liege ich falsch, wenn ich annehme, dass ich solche tiefgreifenden SQL-Befehle nur im Programmcode erstellen kann?
              _______________
              hubottom
              Attached Files

              Comment


              • #8
                Warum sollte ALTER INDEX beim SQL-Server nicht gehen, wenn's dazu im Handbuch seitenweise Beschreibung gibt? Habe derzeit keine Ahnung, wo dein Problem wirklich liegt. Verwende selber SQL Express 2005/2008 in vielen Firmen, auch für größere Datenbankprojekte, daran kann es sicher nicht liegen. Wahrscheinlich müsstest du in diesem Fall den Zugriff auf den SQL-Server direkt ausprogrammieren anstatt diese Tools zu verwenden, die werden das wohl einfach nicht unterstützen. Lese dich doch mal hier etwas ein, dazu auch noch hier und soviel wie möglich rundherum

                bye,
                Helmut

                Comment


                • #9
                  Danke Helmut für Deine Tipps.
                  Ich glaube auch langsam, dass ich mich vom SQL-Assistenten verabschieden und mich um die Einbindung der SQL-Befehle in den Programmcode kümmern sollte.
                  Dass ALTER INDEX beim SQL Server nicht geht, entnahm ich dem oben genannten Buch; ich kopiere Dir mal die betreffende Seite zu meiner Rechtfertigung. In einem anderen Buch, J. Gennick: SQL kurz & gut, 2. Aufl. 2007, wird ALTER INDEX auch nicht aufgeführt. Hier gibt's nur Index erzeugen (CREATE INDEX) und entfernen (DROP INDEX ... ON tabellenname).
                  _______________
                  Vielen Dank und herzliche Grüße von hubottom
                  Attached Files

                  Comment

                  Working...
                  X