0

真是一个关于T-SQL的菜鸟,问题很简单。我有两个具有相同方案的表。我想将一个附加到另一个。我唯一知道的是“工会”,例如

select * from table1 
union 
select * from table2

但是,这会生成一个新表并使存储空间增加一倍。我想知道,有没有办法通过附加另一个表来直接更改一个表?就像是

insert into table1 values()

真的需要帮助!谢谢。

4

3 回答 3

2

联合不会“创建存储”,因为它会在运行时组合查询。联合可能需要的唯一存储空间是用于进行排序、分组和类似操作的临时空间。

要将选择中的数据插入另一个表,您可以使用以下命令:

insert into table1 (col1, col2, col3)
select col1, col2, col3
from table2

但这会使存储空间增加一倍,因为 table2 的数据将存储在 table2table1 中,直到您删除/删除 table2 (源)

于 2012-07-30T08:40:16.417 回答
0

你的目标是什么,你想做什么?正如第一条评论所指出的,您可以使用这些表创建一个视图,然后使用该视图启动 SELECT 以获得从两个表合并的结果。但从物理上讲,原始表将保持相互独立。要创建视图,请参阅CREATE VIEW 定义和语法,但基本上您可以运行以下命令:

CREATE VIEW table1_table2
AS
SELECT *
  FROM Table1
 UNION ALL
SELECT *
  FROM Table2

然后只需SELECT * FROM table1_table2从两个表中获取所有行

另一种选择,也许你正在寻找什么,是从一个表中获取数据,插入另一个表,然后删除第一个表。

INSERT INTO Table1
SELECT * FROM Table2

TRUNCATE Table2
DROP Table2

SELECT * FROM Table1
于 2012-07-30T08:55:55.680 回答
0

这可以使用 simple 来完成insert into,如果您不担心重复记录需要更新或保持原样。

注意:两个表应具有相同的结构和数据类型长度。

逐步查看此示例代码。此示例将 emp_backup 表中的数据插入到 emp 表中。

CREATE table emp
(
empid int,
fname varchar(20),
lname varchar(20)
);

INSERT INTO emp VALUES(1,'vish','dalvi');
INSERT INTO emp VALUES(2,'rohit','kale');
INSERT INTO emp VALUES(3,'vishal','gr');

SELECT * FROM emp;

CREATE table emp_backup
(
empid int,
fname varchar(20),
lname varchar(20)
);

INSERT INTO emp_backup VALUES(6,'mark','novak');
INSERT INTO emp_backup VALUES(7,'gar','pandey');


INSERT into emp
SELECT * FROM emp_backup;

SELECT * FROM emp;
于 2012-07-30T08:53:00.977 回答