2014-09-11 40 views
2

SQL Server 2008的如何更新特定的列字段while循环

我的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字段存储相同的值..我知道,因为我想念我在哪里条件更新查询below.But我如何使用条件与上面的t有条件的标准,因为它有重复?

declare @i as int =1000 
while @i<=1006 
begin 
    update flatfile set [email protected] 
    set @i+=1 
end 
+0

我如果很感兴趣那将有可能为此使用递归CTE。如果这是可能的,有人可以提供一个例子。 – Dimt 2014-09-11 08:17:30

+0

但是我已经厌倦了递归,无法获得独特名称的结果。 – Dimt 2014-09-11 08:20:16

回答

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 [email protected] 
    where id is null; 
    set @i+=1 
end 
+0

我知道你说的方式,但我想通过更新查询在循环条件中学习只............和我试着跟随查询并获得行号,但我不知道如何分配在哪里条件......'代码'从平文件 – CIPHER 2014-09-11 08:23:42

+0

中选择ROW_NUMBER()over(order by(select 0)),这里是循环解决方案 – 2014-09-11 08:37:42

+0

U只给出了一半解决方案.....如果我的ID列有一些字段中的数据和一些领域有空意味着你的解决方案如何满足该标准....我只是发布一个例子在我的问题与所有NULL ...我寻找答案更新ID字段使用rownumber()或者任何另一种方式 – CIPHER 2014-09-11 09:09:03

0

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


3

为了得到它可能使用Row_Number功能的ID。

窗函数没有在更新脚本允许的,但我们可以编写一个可更新视图或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