一次update動作中T-SQL與PL/SQL的差異

現有兩張表,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;  



發佈了19 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章