MSSQL 的游标更新

DECLARE @Phoneno bigint
DECLARE @oldPhone bigint
set @Phoneno = 18955162900

BEGIN TRY

DECLARE Employee_Cursor CURSOR FOR
SELECT  phoneNumber FROM T_PersonalLib  --SET phoneNumber = @Phoneno
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
		set @Phoneno = @Phoneno+1
		UPDATE T_PersonalLib SET phoneNumber = convert(varchar(20),@Phoneno) WHERE CURRENT OF Employee_Cursor
      FETCH NEXT FROM Employee_Cursor
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;

END TRY
BEGIN CATCH
PRINT ERROR_LINE()
PRINT ERROR_MESSAGE() 
PRINT ERROR_NUMBER() 
PRINT ERROR_SEVERITY() --严重极别

SELECT ERROR_MESSAGE() AS ErrorLine;
END CATCH
GO

 

测试时发现效率很低,5万条数据跑上十几分钟

posted @ 2010-05-06 17:22  徐某人  阅读(285)  评论(0)    收藏  举报