2009-07-06 34 views
0

の一部を挿入し、最初の構造が部分的に再現するには、第二の構造を反復処理しました与えられたID。 これを実行する最良の方法は何ですか?私は2つのテーブルを持ってテーブルに別のテーブル

私は2つのアイデアを持っている:

1:

DECLARE @a type, @b type, @c type 
SELECT @a = a, @b = b, @c = c, FROM table2 WHERE id = @id 
INSERT INTO table1 (i, j, k, a, b, c, x, y, z) 
VALUES (@i, @j, @k, @a, @b, @c, @x, @y, @z) 

2:

CREATE TABLE #result (a type, b type, c type) 
SELECT a, b, c INTO #result FROM table2 WHERE id = @id 
INSERT INTO table1 (i, j, k, a, b, c, x, y, z) 
    VALUES (@i, @j, @k, 
    (SELECT a FROM #result), 
    (SELECT b FROM #result), 
    (SELECT c FROM #result), 
    @x, @y, @z) 

別のアプローチが存在しませんか?どちらがベストプラクティスですか?

+0

これは良い方法のようですが、何が問題なのですか? – rball

+0

私はただ最高のものを探したいです。そしてそのような選択の理由を理解する。このトピックについて詳しく知りたい – abatishchev

答えて

6

私はこのようにそれを行うだろう:

INSERT INTO table1 (i, j, k, a, b, c, d, x, y ,z) 
Select @i, @j @k, a, b, c, d, @x, @y, @z 
From table2 
Where id = @id 

これは、ローカル変数および/または一時テーブルへのデータを得ることからあなたを節約できます。パフォーマンスは良くなるはずです。

重要なことは、選択項目の値をハードコードできることです。列を列挙する順序(行を挿入する)は、選択行の列をリストする順序と一致する必要があります。

2

あなたは、単一のINSERTクエリでそれを行うことができます。

insert into table1 (a, b, c, d, x, y, z) 
select a, b, c, d, @x, @y, @z 
from table2 
where id = @id 

編集:あなたは、それは次のようになり追加の余分なフィールドを持つ

insert into table1 (i, j, k, a, b, c, x, y, z) 
select @i, @j, @k, a, b, c, @x, @y, @z 
from table2 
where id = @id 
+0

私の投稿を少し編集しました。見てください。 table1の中にtable2の列が含まれている場合、ソリューションが動作しますか? – abatishchev

+1

はい、もちろんです。あなたは定期的な選択で置くことができるものを使用することができます。 – Guffa

-2

あなたはMySQLのGUIツールを使用することができますしかし、これを行うことが可能かどうかはわかりません。 http://dev.mysql.com/downloads/gui-tools/5.0.html

+0

私はそれをコードで行う必要があり、SQL Server 2008; P – abatishchev

+0

OK、ありがとう!!!!!! –

1

挿入されるデータを特定できない場合は、開発プロセスのメリットがあります。また、カーソルがレコードをループするのを「必要とする」他のデータ変更を実行する必要がある場合にも便利です。

それ以外の場合は、フィールドを追加するときに更新する必要があるコードの一部に過ぎません。

関連する問題