Autor Beitrag
fahrstuhl65
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 27.10.11 10:28 
Hallo,

worauf muss ich achten wenn ich einer MSSQL Tabelle nachträglich eine ID mit Autoinkrement einfügen möchte,
diese ID jedoch nach Datum aufsteigend eingefügt werden soll ?

Gibt es da einen Parameter ?

Versucht habe ich bisher mit dem hier:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.ImportDerFiles ADD
  ID bigint NOT NULL IDENTITY (11)
GO
ALTER TABLE dbo.ImportDerFiles SET (LOCK_ESCALATION = TABLE)
GO
COMMIT


Problem dabei ist, das die Datenbank aus 9,6 Millionen Einträgen besteht, er vergibt die ID
aber nicht nach Datum sortiert, sondern springt von ID zu ID zeitlich hin und her. Da ich später über die ID auf
die Datensätze einfach zugreifen will, wäre es super wenn ich ihn bei der erstmaligen
Vergabe dahinbringen könnte das er die ID nach Datum einfügt.

Hat einer eine Idee wie man das bewerkstelligen kann ?
fahrstuhl65 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 27.10.11 11:48 
Das Problem ist erstmal "teilgelöst", weil ich die Tabelle einfach nochmal neu erstellt habe,
von vornherein ID mit Autoinkrement versehen habe, und dann die CSV Dateien nochmal
eingelesen habe, da diese bereits nach Datum sortiert waren, hat er die ID auch dann
korrekt gesetzt.

Interessieren würde mich das aber trotzdem noch, ob man AutoInkrement nachträglich nach
einem bestimmten Verfahren einsetzen kann, also so etwas wie "AutoInkrement nachträglich nach Datum einfügen"
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 27.10.11 12:02 
Ein Autoincrement ist dazu gedacht einen eindeutigen Wert zu erhalten. Also ohne irgendeine Logik nur zur reinen eindeutigen Identifikation. Wenn es also nur um Identifikation geht wo wäre der Sinn einer Systematik?
fahrstuhl65 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 27.10.11 13:46 
Ich muss im späteren Verlauf immer mal wieder Zeiträume zusammenfassen, wenn diese
inklusive ID in einer zeitlichen Reihenfolge sind, kann ich das ganze aus C#
aus meiner Sicht einfacher ansteuern in Schleifen in dem ich mir immer die ID
zu dem zu bearbeitenden Datensatz hole und dann ein Update mache für diese ID.

Ob das nun sinnvoll ist, weiss ich nicht, deiner Antwort entnehme ich eher, das nicht :D ?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 27.10.11 14:40 
Die sind doch schon aufgrund des Datums dann in einer bestimmten Reihenfolge? Also Daten über das Datum selektieren aber über die ID zurückschreiben. Da ist die Systematik der IDs doch völlig egal?
fahrstuhl65 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 27.10.11 16:16 
Nein, leider geht das nicht - durch die Umwandlung die wir letztens durchgeführt haben gibt es für einen Zeitraum X
mehrere Datensätze, das konnte ich "chronologisch" dann nur so abfangen das ich die ID`s so vergeben lasse, das sie
wirklich der Reihenfolge im CSV entsprechen, ich hoffe das ist verständlich ?

Also in der DB steht bspw:

07:00:00 6623
07:00:00 6624

also zweimal gleich Uhrzeit, aber andere Kurse,..wenn ich dann den Eröffnungskurs brauche, dann brauch ich die
6623 und nicht die 6624.

Wenn ich dann aber abfrage Zeitraum X bis Y sortiert nach der niedrigsten ID, dann bekomme ich auch 6623.

Das war das Problem
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 27.10.11 16:34 
Die Reihenfolge des csv gekommst du doch anhand des Datums nachträglich dann eh nie hin. Egal ob du nur übers Datum abfragst oder ein Autoinc anhand des Datums berechnest bei gleichem Datum bekommst du eine Zufallsreihenfolge nicht die des csv da das csv dann unbeteiligt ist. Solltest du nicht lieber beim Import von csv in die Datenbank das Feld gleich mit erstellen? Wenn du denn DTSWizard dafür benutzt hast kannst du das Script im Wizard so anpassen das in eine Tabelle importiert wird die bereist eine Autoinc Spalte hat dann sollte die auch der Reihenfolge des csv entsprechen.
fahrstuhl65 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 27.10.11 19:56 
So wie du das geschrieben hast, so habe ich es unterm Strich auch gemacht :D

Beim Import der Daten durch das CSV hab ich die ID mit erstellen lassen und so ist
auch diese in der richtigen Reihenfolge :D

Hatte mich vorhin wohl nicht gut genug ausgedrückt, ich habs aber mit dem SQL Managment Studio 2008
gemacht, das Programm was du genannt hast, schau ich mir auch mal an - danke für den Tip

Kann es sein das der DTS Wizard in das SQL Managment Studio integriert ist mittlerweile?