SQL Server 2008,添加一个关于表中另一列的描述的列

时间:2014-06-03 19:08:45

标签: sql sql-server sql-server-2008

我需要在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

它不起作用。

该表有很多记录,因此手动执行效率不高。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您无法在id_desc之前插入table 1,而无需先更改table 1以包含与id_desc具有相同数据类型的列。

使用select...into从连接table 1table 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

然后,您可以执行insertupdate

答案 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语法,有很多方法可以完成最后一部分;例如,您可以将MERGECTEUPDATE一起使用。

最后,我在上面的评论中提到了这一点,但你也可以考虑创建一个视图:

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;

您可能有一些原因而不是修改表格,但如果没有这样的理由,这可能是一个很好的选择,因为它可以避免冗余数据存储以及以后可能出现的一致性问题。