将表插入另一个表的一部分

时间:2009-07-06 22:01:05

标签: sql sql-server temp-tables

我有两个表,第一部分的结构部分概括,迭代第二个结构:

table1 (id, i, j, k, a, b, c, x, y, z) -- requests
table2 (id, a, b, c, d) -- essential elements / bank subjects

我需要使用给定ID从table1插入table2条记录。 这样做的最佳方法是什么?

我有两个想法:

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)

还有另一种方法吗?哪一个是最好的做法?

4 个答案:

答案 0 :(得分: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

这样可以避免将数据导入局部变量和/或临时表。表现应该更好。

要实现的重要部分是您可以在选择中硬编码值。列出列的顺序(插入行)必须与列出选择行中列的顺序相匹配。

答案 1 :(得分:2)

您可以使用单个插入查询来执行此操作:

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

答案 2 :(得分:1)

如果您在识别插入的数据时遇到问题,那么临时表可能会在开发过程中获益。如果您需要执行“需要”游标循环记录的其他数据更改,它也可能很有用。

否则,添加字段时,只需要更新代码的另一部分。

答案 3 :(得分:-2)

您可以使用MySQL GUI工具,但我不知道是否可以这样做。 http://dev.mysql.com/downloads/gui-tools/5.0.html