Autor Beitrag
tomycat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Fr 25.02.22 12:14 
hallo zusammen,
meine Vorlage für mein MsSQL Server...

www.w3schools.com/sql/sql_insert.asp

So wie im Beispiel zeigt klappt es. Ich will aber CustomerID selber vergeben.


ausblenden Quelltext
1:
2:
INSERT INTO Customers (CustomerID, CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES (12345, 'Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

Warum geht das nicht, wie sieht die Lösung aus?

Moderiert von user profile iconTh69: Titel geändert (Rechtschreibung korrigiert).


Zuletzt bearbeitet von tomycat am Fr 25.02.22 12:17, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 25.02.22 12:29 
Warum das bei der Tabelle nicht geht, steht auch auf der Seite (gelber Kasten unter "INSERT INTO Example"):
Zitat:
Did you notice that we did not insert any number into the CustomerID field?
The CustomerID column is an auto-increment field and will be generated automatically when a new record is inserted into the table.

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Fr 25.02.22 16:38 
das ist mir schon klar, aber wie kann ich selber die CustomerID vergeben?
Komisch ist nur, dass MSSQL mir Sprünge macht wie 89 -> 102 -> 333 ->> 340 ...
Eine Idee, wie das sein sein?

Lösung A oder B wäre super.

Die eine Webseite läuft unter Ubuntu/MySQL, da funkt es gut.
Die andere unter WindowsServer/MSSQL, mein Problem.

Idee?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 25.02.22 16:51 
Entweder Autoincrement ODER selbst vergeben. Mischen geht nicht. Wenn du die selbst vergeben willst mußt du die Autoincrement Eigenschaft von dem Feld wegnehmen.
Und wenn du es selbst machen willst kannst du dir dann überlegen einen "Generator"(vorhandenens Datenbankfeature) zu verwenden um eine eindeutige Nummer zu bekommen.

Autoincrement zählt immer hoch. Auch ein fehlerhafter Insert oder einer der nachher nicht commited wird ist trotzdem hochgezählt und weg.
Es geht nur um Eindeutigkeit bei ids. Die oft gehörte/gewünschte Forderung das sowas lückenlos oder fortlaufend sein sollte hört sich erstmal immer gut an ist aber ein Riesenproblem wenn man an sowas wie Skalierung etc. denkt. Und es hilft eigentlich bei nix. Die id von etwas sollte nur was absolut künstliches sein. Mit der einzigen Bedeutung von EINDEUTIG.

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.03.22 19:50 
danke für die Hilfe,
ich komme erst jetzt dazu an der Tabelle weiter zu arbeiten.

a) leider habe ich nichts gefunden um AUTO_INCREMENT abzuschalten.

b) woran kann das liegen, dass AUTO_INCREMENT grössere Sprünge macht, wo sollte man ansetzen?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 14.03.22 21:38 
a.) Reden wir hier von einer echten produktiven Datenbank mit vielen Daten drin wo man nicht einfach neu anfangen kann mit einem Primary Key ohne das Identity gesetzt ist?
Autoincrement scheint wirklich schwer wegzubekommen zu sein wenn man alles andere (insbesondere sein enthaltenen Daten) behalten will.
dbadailystuff.com/20...column-in-sql-server

b.) Jeder Insert wird gezählt. Irgendwo versuchst du also vermutlich inserts auf die Tabelle ohne diese Änderung auch zu commiten. Der Autoincrement Wert ist trotzdem weg. Solltest du halbwegs gutes Logging in der dazugehörenden Applikation implementiert haben(was du immer solltest) findet sich da dann bestimmt was.

Andere Möglichkeiten wären du löscht viel und daher große Lücken oder du hast am Primary Key eine größere Schrittweite als 1 angeben.

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Di 15.03.22 20:52 
Idee?
- Backup der Tabelle
- ProduktID (autoincrement) -> ProduktID_Auto
- ProduktID wird neu erstellt.

geht mein Plan auf?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 16.03.22 11:31 
Möglich. Sobald da auch Constraints auf der Spalte sind wird es halt komplizierter. Du kannst nicht einfach die Spalten umbenennen und Daten hin und herkopieren wenn die Spalte irgendwo anders benutzt wird. Und bei einem Primary Key ist es sehr wahrscheinlich das der in irgendeiner anderen Tabelle als Foreign Key auftaucht.

Ironischerweise ist es hier einfacher wenn dein Datenbank Design "falsch" ist und du die refrenzielle Integrität weggelassen hattest. Dann kannst du einfach umbenennen. Ansonsten mußt du in der richtigen Reihenfolge auch die Constraints umziehen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 16.03.22 12:04 
Kannst du nicht einfach einen kompletten Export der Datenbank machen (als SQL-Script)?
Dann bei CREATE TABLE das "autoincrement" löschen und daraus dann wieder eine neue DB aufsetzen.

Trotzdem sehe ich noch keinen Grund dafür, das "autoincrement" zu löschen, denn so benötigst du ja jedesmal beim Hinzufügen eigene Logik, um die "unique ID" zu setzen.