現有兩張表,Tbl_Employee和Tbl_Department。表中數據如下(姑且不論表結構設計合不合理):
1.Tbl_Employee
2.Tbl_Department
其中,Tbl_Employee中的dept_name欄位數據有誤,要求用Tbl_Department中的數據來更正。
1.PL/SQL寫法:
update Tbl_Employee emp
set emp.dept_name = (
select distinct dept.dept_name
from Tbl_Department dept
where dept.dept_id = emp.dept_id
);
若是T-SQL也是以上寫法,則會報錯!想想,可以用遊標來實現。於是:
2.T-SQL寫法:
declare @deptID nvarchar(20);
declare tempTbl cursor for
select dept_name from Tbl_Department;
open tempTbl
fetch next from tempTbl into @deptID
while @@FETCH_STATUS = 0
begin
update Tbl_Employee
set dept_name = (
select distinct dept_name from Tbl_Department
where dept_id = @deptID )
where dept_id = @deptID;
fetch next from tempTbl into @deptID
end
close tempTbl
deallocate tempTbl
以上T-SQL能實現功能,但效率非常低。用以下語句會更好(本人以前不熟悉update...from...):
update Tbl_Employee
set name= b.name
from TBL_Department b
inner join Tbl_Employee a
on a.emp_id=b.emp_id;