帮我优化一下本存储过程请说明原理

来源:百度知道 编辑:UC知道 时间:2024/05/20 12:44:27
帮我优化一下我写的存储过程,请顺带说明你的优化方法的理由 谢谢
代码如下:

If exists(Select Name From Sysobjects Where name='AskClass')
Begin
Drop Procedure AskClass
End
Go
Create Procedure AskClass
As
Declare @Classname1 varchar(100)
Declare @ClassName2 varchar(100)
Declare @ClassName3 varchar(100)
Declare @ClassName4 varchar(100)
Declare @ClassNameList Varchar(500)
Declare @ClassId Int
Declare @ClassList Varchar(500)
Declare @AskId Int
Declare AskCursor Cursor For Select AskId From Ask
Set @ClassNameList=''
Set @ClassList = ''
Open AskCursor
Fetch Next From AskCursor Into @AskId
While(@@fetch_status=0)
Begin
Select @Classname1=Classname1,@ClassName2=ClassName2,@ClassName3=ClassName3,@ClassName4=Classname4 From Ask Where AskId=@AskId
If @ClassName1<>''
Begin
Set @ClassNameList = @ClassNameList + ',' + Cast(@ClassName1 As Varchar)<

不建议使用游标,数据量大的话,一条条的去扫描,会等死人的。
如果你的AskId是自增的,如1,2,3,4.。。。1000这样的,可以用该字段进行循环
如果不是,亦可以建一个临时表,增加一个自增的整型字段

@MaxID=Select Max(AskId) from Ask
@MinID= Select Min(AskId) from Ask
While(@MinID<=@MaxID)
begin
@MinID = @MinID +1
end

从语法上来开没什么优化的空间。

要不就如一路说的别用游标,要不就从业务上想办法,换种实现方式。
一楼的主意不错。

你要实现什么 说出来的话便于理解一些