Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Insert über mehere Tabellen mit mehreren IDs und Fremd IDs

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Syrax, 19 Juni 2013.

  1. Syrax

    Syrax Neuer Benutzer

    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?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden