在SQL Server中添加包含数据的新列

时间:2018-04-11 23:29:40

标签: sql-server alter

以下是我的表格:

Id  Name    City    Managerid  
------------------------------
1   Shawn   NYC     3
2   Kevin   Mumbai  4
3   Ryan    Mumbai  1
4   Kanye   SF      1

现在我想分别在4行中添加名为“Gender”的新列,其值为M,M,M,F

我首先使用以下方法添加了一个新列:

alter table employee add gender varchar(50)

现在我明白我可以使用以下方法逐个添加数据:

update employee 
set gender = 'M' 
where id = 1

但是如何一次添加所有4个数据呢?

2 个答案:

答案 0 :(得分:1)

除非有一些其他的关系数据允许引擎以某种方式对行进行分组,否则你不会这样做。例如,如果所有男性都在孟买。或者,您可以在2个语句中完成。

update employee set gender= 'M' where id IN (1, 2, 3)
update employee set gender= 'F' where id IN (4)

但如果您在添加色谱柱后需要更新大量男性和女性,这仍然没有用。

答案 1 :(得分:1)

  1. 使用要添加到新列的数据创建并填充表值变量@genderInfo
  2. 将列添加到目标表,请注意它必须NULL才能开始。
  3. 使用原始表值变量UPDATE执行JOIN
  4. 将新添加的列更改为NOT NULL - 假设现在所有行都有值。
  5. 像这样:

    -- 1:
    DECLARE @genderInfo AS TABLE
    (
        EmployeeId int PRIMARY KEY,
        Gender varchar(50) NOT NULL
    )
    
    INSERT INTO @genderInfo ( EmployeeId, Gender ) VALUES
    ( 1, 'M' ),
    ( 2, 'M' ),
    ( 3, 'M' ),
    ( 4, 'F' );
    
    -- 2:
    ALTER TABLE
        Employees
    ADD
        Gender varchar(50) NULL;
    
    -- 3:
    UPDATE
        e
    SET
        e.Gender = gi.Gender
    FROM
        Employees AS E
        INNER JOIN @genderInfo AS gi ON e.EmployeeId = gi.EmployeeId
    
    -- 4:
    ALTER TABLE
        Employees
    ALTER COLUMN
        Gender varchar(50) NOT NULL;