Wie Aufzeichnungen auf dem Zurück Insert basierend auf Einfügen?
-
06-07-2019 - |
Frage
Hier ist mein Verfahren:
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
Während es in TableA einfügt, würde ich Einsatz in einer anderen Tabelle (Tabelle B) für diesen bestimmten Datensatz wie die in tableA eingefügt wurde.
Die Spalten in TableA und TableB sind unterschiedlich. Ist es ratsam, vor dem Einsetzen in TableB eine Funktion aufzurufen? - Ich möchte sicher durchführen wird und setzt auf der Grundlage der ID in tableA eingefügt
Lösung
Versuchen Sie, diese
Eingänge
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'
Abfrage
insert @tblA
output INSERTED.id, INSERTED.Name
into @tblB
select
id,name
from @tblC
where id % 2 = 0
select * from @tblA
select * from @tblB
Ausgang: [Für beide Tabelle A & B]
id name
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
Im Grunde ich die Datensätze in TableA von TableC deren ids bin Einfügen sind sogar. Und dann von Output-Klausel mit den Werten von TableA zu TableB Einfügen
Weitere Informationen OUTPUT-Klausel
Hope dies macht Sinn
Andere Tipps
Sie können einen Trigger erstellen, es zu tun, wenn dies die einzige Möglichkeit ist, dass Sie Daten in die Tabelle einfügen. (Sonst wird es auf jedem Einsatz laufen)
oder Sie können auf einem Cursor durchlaufen, die Sie bei jedem Einsatz aus der Auswahl tun ermöglicht
Die beste Technik hängt von den Einzelheiten Ihrer Tabellendefinitionen und den zugehörigen Abfragen. Auf der Grundlage der Informationen in Frage, vielleicht so etwas wie folgt aus:
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 versuchen INSERT..SELECT
, wie folgt aus:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http: // dev .mysql.com / doc / refman / 5.0 / de / ansi-diff-select-in-table.html