Domanda

Ecco la mia procedura:

PROCEDURE add_values
AS
BEGIN

   INSERT INTO TABLE_A ...
   SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")

END

Mentre si inserisce nella tabella A, vorrei inserirla in un'altra tabella (tabella B) per quel particolare record che è stato inserito nella tabella A.

Le colonne in Tabella A e TabellaB sono diverse. È consigliabile chiamare una funzione prima di inserirla in TableB - Vorrei eseguire determinati get e set in base all'ID inserito in tableA?

È stato utile?

Soluzione

Prova questo

Ingressi

declare @tblA table (id int,name varchar(20))
declare @tblB table (id int,name varchar(20))
declare @tblC table (id int identity,name varchar(20))
insert into @tblC 
    select 'name1' union all select 'name2' union all
    select 'name3' union all select 'name4' union all
    select 'name5' union all select 'name6' union all
    select 'name7' union all select 'name8' union all
    select 'name9' union all select 'name10' union all
    select 'name11' union all select 'name12' union all
    select 'name13' union all select 'name14' union all
    select 'name15' union all select 'name16' union all
    select 'name17' union all select 'name18' union all
    select 'name19' union all select 'name20' 

Query

insert @tblA 
output INSERTED.id, INSERTED.Name
into @tblB 
select 
    id,name
from @tblC 
where id % 2 = 0

select * from @tblA
select * from @tblB

Uscita: [per entrambe le tabelle A e amp; B]

nome ID

2   name2
4   name4
6   name6
8   name8
10  name10
12  name12
14  name14
16  name16
18  name18
20  name20

Fondamentalmente sto inserendo quei record in TableA da TableC i cui ID sono pari. E quindi usando la clausola Output inserendo i valori da TableA a TableB

Per ulteriori informazioni Clausola OUTPUT

Spero che abbia senso

Altri suggerimenti

puoi creare un trigger per farlo, se questo è l'unico modo per inserire dati nella tabella. (altrimenti verrà eseguito su ogni inserimento)

oppure puoi iterare su un cursore che ti permetterà di farlo con ogni inserimento dalla selezione

( Esempio di cursore

La migliore tecnica dipende dai dettagli delle definizioni della tabella e dalle query associate. Sulla base delle informazioni nella tua domanda, forse qualcosa del genere:

CREATE PROCEDURE add_values
AS
BEGIN
  BEGIN TRANS
    INSERT INTO TableA
      SELECT id, name FROM TableC
    INSERT INTO TableB
      SELECT id, name FROM TableC
  COMMIT
END

In MySQL prova INSERT..SELECT , in questo modo:

INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();

http: // dev .mysql.com / doc / refman / 5.0 / it / ANSI-diff-select-in-table.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top