我需要在SQL Server 2008上从一个表插入一个列(varchar)到另一个表。
表1:
Col1 col2 col3
Bdh 6 28435
Bdh 2 69
dwd 0 57
dwd 8 9742
我需要在表1中添加一个关于col1描述的专栏。
例如
Col1 id_desc col2 col3
Bdh good 6 28435
Bdh good 2 69
dwd excellent 0 57
dwd excellent 8 9742
表2:
Col1 id_desc
Bdh good
dwd excellent
SQL:
INSERT into Table 1
SELECT b.id_desc as id_desc
FROM Table2 as b
where a.Col1 = b.Col1
它不起作用。
该表有很多记录,因此手动执行效率不高。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您无法在id_desc
之前插入table 1
,而无需先更改table 1
以包含与id_desc
具有相同数据类型的列。
使用select...into
从连接table 1
和table 2
的表格表达式创建新表格会更容易:
select
a.col1
,b.id_desc
,a.col2
,a.col3
into newTable
from table1 as a
inner join table2 as b
on a.col1 = b.col1
或者,如果您要向表1添加新列,以便可以插入或更新它,read this。
答案 1 :(得分:0)
这是一个简短的脚本,显示如何将新列添加到现有表并填写相关数据:
-- Here I'm just setting up the tables with your example data.
create table [Table 1] (Col1 varchar(16), Col2 int, Col3 int);
create table [Table 2] (Col1 varchar(16), id_desc varchar(16));
go
insert into [Table 1] values
('Bdh', 6, 28435),
('Bdh', 2, 69),
('dwd', 0, 57),
('dwd', 8, 9742);
insert into [Table 2] values
('Bdh', 'good'),
('dwd', 'excellent');
go
-- First, add the column. It must either be nullable or have a default value,
-- since there are extant records.
alter table [Table 1] add id_desc varchar(16) null;
go
-- Now merge the data from [Table 2] into the new column.
update [Table 1]
set id_desc = T2.id_desc
from
[Table 1] T1
inner join [Table 2] T2 on T1.Col1 = T2.Col1;
之后,如果您愿意,可以将列更改为不可为空;我刚开始将它设为null,因为SQL Server需要有一些默认值,它可以插入到现有行的新列中。
如果您不喜欢UPDATE...FROM
语法,有很多方法可以完成最后一部分;例如,您可以将MERGE
或CTE与UPDATE
一起使用。
最后,我在上面的评论中提到了这一点,但你也可以考虑创建一个视图:
create view Table1VW as
select
T1.Col1,
T2.id_desc,
T1.Col2,
T1.Col3
from
[Table 1] T1
inner join [Table 2] T2 on T1.Col1 = T2.Col1;
您可能有一些原因而不是修改表格,但如果没有这样的理由,这可能是一个很好的选择,因为它可以避免冗余数据存储以及以后可能出现的一致性问题。