Insert über mehere Tabellen mit mehreren IDs und Fremd IDs

Syrax

Neuer Benutzer
Beiträge
1
Hallo Zusammen,
Also ich habe 3 Tabellen und darin jeweils einen PK/ID. Diese sollten beim Insert direkt in die andere nTabellen übertragen werden. Der aufbau ist also wie folgt
Table 1 | Table 2 |Table 3 |
PK1 | PK2 |PK3 |
Userdata | Table1 PK |Table2 PK|
| Other Data | Other Data|
Also will ich Daten in Tabelle 1 eintragen und den neuen PK1 direkt in Tabelle 2 eintragen. Danach direkt den neuen PK2 in Tabelle 3
Mit tabelle 1 und 2 funktioniert das mit folgendem Script
***********************
INSERT INTO Customer
([Salutation]
,[Title]
,[Forename]
,[Surname]
,[Company]
,[Department]
,[Street]
,[Pobox]
,[Zipcode]
,[City]
,[Country]
,[State]
,[Phone]
,[Fax]
,
,[Username]
,[Password]
,[SecretQuestion]
,[SecretAnswer]
,[CreationTime]
,[Lang]
,[LastModified]
,[Valid])


OUTPUT
INSERTED.CustomerID
,'4'
,'1'

INTO UsersofCompany
(CustomerID
,CompanyID
,valid)

VALUES('Herr'
,'Dr.'
,'KP'
,'WhoCares'
,'BlaBlaAG'
,'NOMEIS'
,'SugarStreet'
,'Zuckerstange3'
,'12345'
,'SugarRace'
,'WreckItRaplh'
,'AHHHHH'
,'6464'
,'65464'
,'Unkreativ@kreativ.de'
,'OMM'
,'ferdammt'
,'OM'
,'NOM'
,GETDATE()
,'de'
,GETDATE()
,'1')
GO

********************
Die Schwierigkeiten treten erst auf, wenn ich das ganze über 3 Tabellen versuche
**************************************
INSERT INTO Customer
([Salutation]
,[Title]
,[Forename]
,[Surname]
,[Company]
,[Department]
,[Street]
,[Pobox]
,[Zipcode]
,[City]
,[Country]
,[State]
,[Phone]
,[Fax]
,[Email]
,[Username]
,[Password]
,[SecretQuestion]
,[SecretAnswer]
,[CreationTime]
,[Lang]
,[LastModified]
,[Valid])


OUTPUT
INSERTED.CustomerID
,'4'
,'1'

INTO UsersofCompany
(CustomerID
,CompanyID
,valid)

OUTPUT
INSERTED.ID
,'0'
,'0'
,'0'

INTO UserRightsStatistic
(UOCID
,isOwner
,RegisterCmContainer
,WibuAgent
,ModifiedTime)

VALUES('Herr'
,'Dr.'
,'KP'
,'WhoCares'
,'BlaBlaAG'
,'NOMEIS'
,'SugarStreet'
,'Zuckerstange3'
,'12345'
,'SugarRace'
,'WreckItRaplh'
,'AHHHHH'
,'6464'
,'65464'
,'Unkreativ@kreativ.de'
,'OMM'
,'ferdammt'
,'OM'
,'NOM'
,GETDATE()
,'de'
,GETDATE()
,'1')
GO
**************************************
Meldung 156, Ebene 15, Status 1, Zeile 43
Falsche Syntax in der Nähe des 'INTO'-Schlüsselworts.

Ist es möglich die OUTPUT INTO Funktionalität so zu verwenden oder nicht?
Wenn ja wie und wenn nein, gibt es eine andere einfach möglichkeit?
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.612
Hallo Zusammen,
Also ich habe 3 Tabellen und darin jeweils einen PK/ID. Diese sollten beim Insert direkt in die andere nTabellen übertragen werden. Wenn ja wie und wenn nein, gibt es eine andere einfach möglichkeit?

Ich weiß nicht, ob das in M$SQL geht, ich nutze PostgreSQL:

Code:
-- zuerst einmal 3 leere Tabellen mit SERIAL:
test=# create table s1 (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "s1_id_seq" for serial column "s1.id"
CREATE TABLE
Time: 1,540 ms
test=*# create table s2 (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "s2_id_seq" for serial column "s2.id"
CREATE TABLE
Time: 29,994 ms
test=*# create table s3 (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "s3_id_seq" for serial column "s3.id"
CREATE TABLE
Time: 20,113 ms
 
--nun INSERT in s1 und RETURN der SERIAL, einfügen dieser in s2 und so weiter ...
test=*# with i1 as (insert into s1 values (default) returning id), i2 as (insert into s2 select * from i1 returning id), s3 as (insert into s3 select * from i2) select 'okay';
 ?column?
----------
 okay
(1 row)
 
-- Kontrolle

test=*# select * from s1;
 id
----
  1
(1 row)

Time: 0,184 ms
test=*# select * from s2;
 id
----
  1
(1 row)

Time: 0,135 ms
test=*# select * from s3;
 id
----
  1
(1 row)

Time: 0,127 ms
test=*#
 
Oben