真是一个关于T-SQL的菜鸟,问题很简单。我有两个具有相同方案的表。我想将一个附加到另一个。我唯一知道的是“工会”,例如
select * from table1
union
select * from table2
但是,这会生成一个新表并使存储空间增加一倍。我想知道,有没有办法通过附加另一个表来直接更改一个表?就像是
insert into table1 values()
真的需要帮助!谢谢。
真是一个关于T-SQL的菜鸟,问题很简单。我有两个具有相同方案的表。我想将一个附加到另一个。我唯一知道的是“工会”,例如
select * from table1
union
select * from table2
但是,这会生成一个新表并使存储空间增加一倍。我想知道,有没有办法通过附加另一个表来直接更改一个表?就像是
insert into table1 values()
真的需要帮助!谢谢。
联合不会“创建存储”,因为它会在运行时组合查询。联合可能需要的唯一存储空间是用于进行排序、分组和类似操作的临时空间。
要将选择中的数据插入另一个表,您可以使用以下命令:
insert into table1 (col1, col2, col3)
select col1, col2, col3
from table2
但这会使存储空间增加一倍,因为 table2 的数据将存储在 table2和table1 中,直到您删除/删除 table2 (源)
你的目标是什么,你想做什么?正如第一条评论所指出的,您可以使用这些表创建一个视图,然后使用该视图启动 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
这可以使用 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;