2009-08-22 17 views
1

Hallo ich habe ein Problem, Daten in mehrere Tabellen einzufügen. Ich habe Primärschlüssel definiert & Referenzschlüssel in Tabellen jetzt möchte ich Daten in beiden Tabellen in Einzelabfrage einfügen ....... Wie kann ich das tun ........... ????? ??Daten in mehrere Tabellen einfügen

Antwort

0

Unterstützt Ihre Sprache das INSERT ALL-Konstrukt? Wenn ja, ist das der beste Weg, dies zu tun. In der Tat ist es der einzige Weg. Ich postete ein Beispiel dieses Konstrukts in another SO thread (diese Beispielssyntax kommt von Oracle SQL).

Die andere Option besteht darin, eine gespeicherte Transaktionsprozedur zu erstellen, die einen Datensatz in die Primärschlüsseltabelle einfügt, gefolgt von einem Datensatz in der referenzierenden Tabelle.

1

Dafür sind Transaktionen vorgesehen. Standard-SQL lässt nicht zu, dass eine einzelne Anweisung gleichzeitig in mehrere Tabellen eingefügt wird. Der richtige Weg, es zu tun ist:

-- begin transaction 
insert into table 1 ... 
insert into table 2 ... 
commit 
0

Und 1 Ihrer Wahl, das zu tun Verwendung ORM ist (wie Hibernate, NHibernate) die Sie Ihr Objekt machen und setzen andere Beziehung zu ihm und schließlich nur das Hauptobjekt speichern , wie:

A a; 
B b; 
C c; 
a.set(b); 
a.set(c); 
DAO.saveOrUpdate(a); 

müssen Sie Ihre DAO.saveOrUpdate beachten (a); Codezeile nur mit Hibernate arbeiten, aber es Daten in Tabelle 3 A, B, C.

4

Ihre Frage ist nicht genau klar, was das besondere Problem ist einzufügen. Ich kann drei Möglichkeiten sehen:
1. Sie wollen in zwei Tabellen mit einer einzigen INSERT-Anweisung einfügen
2. Sie möchten zwei Einsätze, aber ohne etwas anderes in der Lage zu sein 'in die Mitte zu bekommen'
3. Sie wollen in eine Tabelle einfügen, erhalten dann den Primärschlüssel in die zweite Tabelle einfügen


die Antwort auf 1. ist einfach:

You can't. 


Die Antwort auf 2. ist zu einfach:

BEGIN TRANSACTION 
    INSERT INTO <table1> (a,b,c) VALUES (1,2,3) 
    INSERT INTO <table2> (a,b,c) VALUES (1,2,3) 
COMMIT TRANSACTION 


Die Antwort auf 3 ist mehrere Möglichkeiten. Jeder hängt davon ab, was genau Sie tun möchten. Höchstwahrscheinlich möchten Sie SCOPE_IDENTITY() verwenden, aber Sie können auch @@identity und IDENT_CURRENT() nachschlagen, um die verschiedenen Optionen und Komplexitäten zu verstehen.

BEGIN TRANSACTION 

    INSERT INTO <dimension_table> (name) 
     VALUES ('my new item') 

    INSERT INTO <fact_table> (item_id, iteam_value) 
     VALUES (SCOPE_IDENTITY(), 1) 

COMMIT TRANSACTION 
Verwandte Themen