none
SQL语句:更新一列为行号问题? RRS feed

  • 问题

  •   为了将employee(含有Emp_UserName字段)表中的emp_id更新为行号,实现如下

    update employee
    set emp_id=t.rowId
    from
    (
    	select * from 
    	(
    		select Emp_UserName,ROW_NUMBER() over(Order by emp_username) as rowId
    		from employee
    	) as t1
    	where t1.Emp_UserName=employee.Emp_UserName
    ) as t

    出现错误:

    消息 4104,级别 16,状态 1,第 10 行
    无法绑定由多个部分组成的标识符 "employee.Emp_UserName"

    请问这个错误怎么解决?


    yanglei

    2012年5月30日 8:54

答案

  • update employee
    set emp_id=t1.rowId
    from
    (
    	--select * from 
    	--(
    		select Emp_UserName,ROW_NUMBER() over(Order by emp_username) as rowId
    		from employee
    	) as t1
    	where t1.Emp_UserName=employee.Emp_UserName
    --) as t
    
    
    

    • 已标记为答案 Lane3000 2012年5月30日 11:58
    2012年5月30日 9:45

全部回复

  • 试试看这样是否符合你的需求。

    if exists (select * from sys.objects where type='U' and name = 'employee')
    	drop table employee
    go
    
    create table employee
    (Emp_id int,Emp_UserName varchar(10))
    
    insert into employee(Emp_UserName) 
    select 'terry' union all
    select 'apple' union all
    select 'bill' union all
    select 'cindy' 
    
    update employee 
    set emp_id = t.row_id
    from (select row_id = ROW_NUMBER() over (ORDER BY Emp_UserName),Emp_UserName
    	  from employee
    	  ) t
    inner join employee t2
    on t2.Emp_UserName = t.Emp_UserName
    	  
    select *
    from employee
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月30日 9:20
  • update employee
    set emp_id=t1.rowId
    from
    (
    	--select * from 
    	--(
    		select Emp_UserName,ROW_NUMBER() over(Order by emp_username) as rowId
    		from employee
    	) as t1
    	where t1.Emp_UserName=employee.Emp_UserName
    --) as t
    
    
    

    • 已标记为答案 Lane3000 2012年5月30日 11:58
    2012年5月30日 9:45
  • 楼主多嵌套了一层,去掉那层就行了

    2012年5月30日 9:46
  • 邹建果然厉害!

    yanglei

    2012年5月30日 11:59