SQL Server 2008
我的SQL表格如下
----------------------------------------
**name department fee_paid id**
----------------------------------------
Farooq ECE 10000 NULL
Khan EEE 20000 NULL
Syed Chemistry 4000 NULL
Syed Chemistry 14000 NULL
Yousuf Physics 2000 NULL
Yousuf Physics 18000 NULL
Zubair EEE 4000 NULL
----------------------------------------
现在我想填写下面的id字段中的数据
----------------------------------------
**name department fee_paid id**
----------------------------------------
Farooq ECE 10000 1000
Khan EEE 20000 1001
Syed Chemistry 4000 1002
Syed Chemistry 14000 1003
Yousuf Physics 2000 1004
Yousuf Physics 18000 1005
Zubair EEE 4000 1006
----------------------------------------
我尝试如下,但它在所有id字段中存储相同的值。我知道我在下面的更新查询中错过了我的where条件。但我如何使用上述条件的条件,因为它有重复?
declare @i as int =1000
while @i<=1006
begin
update flatfile set id=@i
set @i+=1
end
答案 0 :(得分:3)
为什么不使用ALTER TABLE
?
alter table flatfile
add ID int identity(1000,1)
编辑 - 如果你想在循环中这样做:
declare @i as int = 1000
while @i<=1006
begin
update top(1) flatfile set id=@i
where id is null;
set @i+=1
end
答案 1 :(得分:3)
要获取ID,可以使用Row_Number
功能。
更新脚本中不允许使用窗口函数,但我们可以编写可更新的视图或CTE,并改为使用它:
WITH CTE AS (
SELECT [name], [department], [fee_paid], [id]
, num = Row_Number()
OVER (ORDER BY (SELECT NULL)) + 999
FROM table1
)
UPDATE CTE SET
ID = num;
答案 2 :(得分:0)
将内容放在游标中。 在循环中,检索游标值并在update语句的where条件中使用它。 假设名称,部门和fee_paid的组合是唯一的,您将拥有唯一的ID。