如何使用while循环更新特定的列字段

时间:2014-09-11 07:48:55

标签: sql sql-server-2008-r2

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

3 个答案:

答案 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;

SQLFiddle Demo

答案 2 :(得分:0)

将内容放在游标中。 在循环中,检索游标值并在update语句的where条件中使用它。 假设名称,部门和fee_paid的组合是唯一的,您将拥有唯一的ID。