Autor Beitrag
Kossy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: So 15.04.12 15:12 
Hallo zusammen !

Kann mir vieleicht jemand von euch sagen, wie es möglich ist, mithilfe eines SQL INSERT Befehles gleichzeitig mehrere Tabellen zu befüllen, in denen evtl. auch Fremd- und Primärschlüsselabhängigkeiten (evtl. sogar mit Auto-Inkrementwerten) bestehen?

Also wenn ich als Benutzer innerhlab einer GUI ein Formular ausfülle und dann meine dort eingetragenen Werte gleichzeit gauf mehrere relevanten Tabellen verteilt und eingetragen werden?

Wie genau muss ein solches INSERT formuliert werden, evtl. mit einem INNER JOIN? Oder müssen einzelne Statements in der richtigen Reihenfolge realisiert werden?

Viele Grüße
--Kossy--
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 15.04.12 15:41 
Hallo,

das widerspricht mehreren Prinzipien der Datenhaltung. Daten sollten zum Beispiel nur einmal gespeichert werden. Du solltest vorher deine Datenbank normalisieren.

Viele Grüße
Regan
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: So 15.04.12 16:57 
Hallo !

Die Datenbank ist bereits normalisiert. Es geht darum über eine GUI Werte zu erfassen, die im Hintergrund über einen INSERT Befehl in die entsprechend normalisierten Tabellen eingetragen werdne und hier ist eben die Frage, wie ein solches /solche INSERT Statements aussehen?

--Kossy--
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: So 15.04.12 17:00 
Es gibt nicht den einen Insert. Vorgang ist Transaktion öffnen, n*Insert in der richtigen Reihenfolge absetzen, Transaktion schließen.
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Mo 16.04.12 09:12 
Hallo Ralf !

"Vorgang ist Transaktion öffnen, n*Insert in der richtigen Reihenfolge absetzen, Transaktion schließen."

Aber wie genau berücksichtige ich den mögliche Autoinkrementwerte (evtl. auch in einer n:m Beziehung, die mit einer Tabelle abgebildet wird)?

Viele Grüße
--Kossy--
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: Mo 16.04.12 09:27 
Indem du zu jedem Insert im selben Batch ein 'SELECT SCOPE_IDENTITY()' absetzt.
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Mo 16.04.12 09:31 
Hallo Ralf !

Könntest Du vielleicht ein ausführliches Beispiel aufführen, ich glaube dann wird mir das etwas klarer. Hab vielen Dank !

Viele Grüße
--Kossy--
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: Mo 16.04.12 09:37 
Allgemein siehe Retrieving Identity or Autonumber Values

Ansonsten wissen wir nix über deine Umgebung/benutzte Technik und können somit nicht konkret helfen.
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Di 17.04.12 08:58 
Hallo Ralf !

Ich nutze den MS SQL Server 2008 R2 und verwenden ausschließlich SQL (kein TSQL). Meine Datenbank sieht eigentlich so aus:

Tabellen:
Mitarbeiter, Projekt, Abteilung (jede Tabelle besitzt einen Primärschlüssel als Autoinkrementwert)


1. Zwischen den Tabellen Mitarbeiter und Projekt besteht eine n:m Beziehung, d.h. zwiwschen diesen beiden Tabellen existiert eine Mappingtabelle, die diese n:m Beziehung quasi abbildet.

2. Zwischen den Tabellen Mitarbeiter und Abteilung besteht eine n:1 Beziehung.


Nun stellt sich die Frage, welchen Tabelle ich mit welchem Datensatz mit einem INSERT Statement zuerst befüllen muss?
Muss ich mich hier um Autoinkrementwerte gar nicht kümmern?

Viele Grüße
--Kossy--
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: Di 17.04.12 09:41 
Kommt drauf an welche Anwendungsfälle du umsetzen willst. Ungesehen sehe ich da jetzt eigentlich keinen Anwendungsfall in dem Mitarbeiter, Projekte oder Abteilungen in einem Rutsch gemeinsam angelegt werden müssen. Dann ist die Autoincrement Problematik weniger relevant. Du hast aber immer noch nix zur verwendeten Technik gesagt. Die Aussage SQL hilft uns nicht. Geht es um Entity Framework, LINQ to SQL, klassisches ADO mit DBCommands oder DataAdaptern oder TableAdaptern oder .....
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Di 17.04.12 10:33 
Hallo Ralf !

ich nutze ADO.NET !

Viele Grüße
--Kossy--