添加带有数据的新列
Adding a new column with data
下面是我的table:
Id Name City Managerid
------------------------------
1 Shawn NYC 3
2 Kevin Mumbai 4
3 Ryan Mumbai 1
4 Kanye SF 1
现在我想添加一个名为 'Gender' 的新列,其值分别为 4 行 M,M,M,F
。
我首先使用以下方法添加了一个新列:
alter table employee add gender varchar(50)
现在我明白了,我可以通过以下方式一个接一个地添加数据:
update employee
set gender = 'M'
where id = 1
但是如何一次添加所有 4 个数据?
你不需要,除非有一些其他的关系数据允许引擎以某种方式对行进行分组。例如,如果所有男性都在孟买。或者,您可以在 2 个语句中完成。
update employee set gender= 'M' where id IN (1, 2, 3)
update employee set gender= 'F' where id IN (4)
但是如果你有大量的男性和女性需要在添加列后更新,这仍然没有用。
- 使用要添加到新列的数据创建并填充 table-valued 变量
@genderInfo
。
- 将列添加到目标 table,请注意它必须
NULL
可以开头。
- 使用原始 table-valued 变量执行
UPDATE
和 JOIN
。
- 将新添加的列更改为
NOT NULL
- 假设所有行现在都有一个值。
像这样:
-- 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;
下面是我的table:
Id Name City Managerid
------------------------------
1 Shawn NYC 3
2 Kevin Mumbai 4
3 Ryan Mumbai 1
4 Kanye SF 1
现在我想添加一个名为 'Gender' 的新列,其值分别为 4 行 M,M,M,F
。
我首先使用以下方法添加了一个新列:
alter table employee add gender varchar(50)
现在我明白了,我可以通过以下方式一个接一个地添加数据:
update employee
set gender = 'M'
where id = 1
但是如何一次添加所有 4 个数据?
你不需要,除非有一些其他的关系数据允许引擎以某种方式对行进行分组。例如,如果所有男性都在孟买。或者,您可以在 2 个语句中完成。
update employee set gender= 'M' where id IN (1, 2, 3)
update employee set gender= 'F' where id IN (4)
但是如果你有大量的男性和女性需要在添加列后更新,这仍然没有用。
- 使用要添加到新列的数据创建并填充 table-valued 变量
@genderInfo
。 - 将列添加到目标 table,请注意它必须
NULL
可以开头。 - 使用原始 table-valued 变量执行
UPDATE
和JOIN
。 - 将新添加的列更改为
NOT NULL
- 假设所有行现在都有一个值。
像这样:
-- 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;