前の挿入に基づいてレコードを挿入する方法は?
-
06-07-2019 - |
質問
手順は次のとおりです。
PROCEDURE add_values
AS
BEGIN
INSERT INTO TABLE_A ...
SELECT t.id, t.name FROM TABLE_C ("This selection will return multiple records")
END
TableAに挿入していますが、tableAに挿入された特定のレコードの別のテーブル(TableB)に挿入したいです。
TableAとTableBの列は異なります。 TableBに挿入する前に関数を呼び出すのが賢明ですか?tableAに挿入されたIDに基づいて特定の取得と設定を実行したいですか?
解決
これを試してください
入力
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'
クエリ
insert @tblA
output INSERTED.id, INSERTED.Name
into @tblB
select
id,name
from @tblC
where id % 2 = 0
select * from @tblA
select * from @tblB
出力: [両方のテーブルAおよびB]
id名
2 name2
4 name4
6 name6
8 name8
10 name10
12 name12
14 name14
16 name16
18 name18
20 name20
基本的に、これらのレコードを、IDが偶数のTableCからTableAに挿入しています。そして、TableAからTableBに値を挿入するOutput句を使用して
詳細については、 OUTPUT句
これが理にかなっていることを願って
他のヒント
これがテーブルにデータを挿入する唯一の方法である場合、それを行うためのトリガーを作成できます。 (それ以外の場合は、すべての挿入で実行されます)
またはカーソルを反復処理して、選択からのすべての挿入でそれを行うことができます
最適な手法は、テーブル定義と関連クエリの詳細に依存します。質問の情報に基づいて、次のようになります:
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
MySQLで次のように INSERT..SELECT
を試してください:
INSERT INTO tableB SELECT * FROM tableA where id = LAST_INSERT_ID();
http:// dev .mysql.com / doc / refman / 5.0 / en / ansi-diff-select-into-table.html
所属していません StackOverflow