首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请高手帮忙,让小弟我这个程序跑快点

2012-01-02 
请高手帮忙,让我这个程序跑快点我的表结构为:IDL1L2L3L4L5L6M代码的意思是:查找出每行L1L2L3L4L5L6的最大

请高手帮忙,让我这个程序跑快点
我的表结构为:ID   L1   L2   L3   L4   L5   L6   M
代码的意思是:
      查找出每行L1   L2   L3   L4   L5   L6的最大值,如果L1最大,则给M赋值1
                                                                                如果L2最大,则给M赋值2
                                                                                以此类推。
    我的代码为:
              CREATE   procedure   sel   as
declare   @index   integer
declare   @a   float
declare   @b   float
declare   @c   float
declare   @d   float
declare   @e   float
declare   @f   float

set   @index   =   1
while(@index   <   1297797)
begin  
set   @a   =(select   L1   from   vv   where   ID   =   @index)
set   @b   =(select   L2   from   vv   where   ID   =   @index)
set   @c   =(select   L3   from   vv   where   ID   =   @index)
set   @d   =(select   L4   from   vv   where   ID   =   @index)
set   @e   =(select   L5   from   vv   where   ID   =   @index)
set   @f   =(select   L6   from   vv   where   ID   =   @index)
if(@a   > =   @b   AND   @a   > =   @c   AND   @a     > =   @d   AND   @a     > =@e   AND   @a   > =   @f)
  begin      
      update   vv
      set   M   =   1   where   ID   =   @index
  end
else   if(@b   > =   @a   AND   @b   > =   @c   AND   @b     > =   @d   AND   @b     > =@e   AND   @b   > =   @f)
  begin
      update   vv
      set   M   =   2   where   ID   =   @index
  end
else   if(@c   > =@a   AND   @c   > =   @b   AND   @c     > =   @d   AND   @c     > =@e   AND   @c   > =   @f)
  begin
      update   vv
      set   M   =   3   where   ID   =   @index
  end
else   if(@d   > =   @a   AND   @d   > =   @b   AND   @d     > =   @c   AND   @d     > =@e   AND   @d   > =   @f)
  begin      
      update   vv
      set   M   =   4   where   ID   =   @index
  end
else   if(@e   > =   @a   AND   @e   > =@b   AND   @e     > =   @c   AND   @e     > =@d   AND   @e   > =   @f)


  begin      
      update   vv
      set   M   =   5   where   ID   =   @index
  end
else   (@f   > =   @a   AND   @f   > =   @b   AND   @f     > =   @c   AND   @f     > =@d   AND   @f   > =   @e)
  begin      
      update   vv
      set   M   =   6   where   ID   =   @index
  end

set   @index   =   @index   +   1
end
GO

这代码能运行,但我觉得太慢了。1百万多行要很长时间才能弄完。
求助高手给我建议!!

[解决办法]
--建立一个函数
CREATE FUNCTION F_MAXINT(@L1 INT,@L2 INT,@L3 INT,@L4 INT,@L5 INT,@L6 INT)
RETURNS INT
AS
BEGIN
DECLARE @MAX INT
SET @MAX = @L1
IF @MAX < @L2 SET @MAX = @L2
IF @MAX < @L3 SET @MAX = @L3
IF @MAX < @L4 SET @MAX = @L4
IF @MAX < @L5 SET @MAX = @L5
IF @MAX < @L6 SET @MAX = @L6

RETURN @MAX
END
GO


--测试
DECLARE @T TABLE ([ID] INT IDENTITY,L1 INT,L2 INT,L3 INT,L4 INT,L5 INT,L6 INT,M INT)
INSERT INTO @T(L1,L2,L3,L4,L5,L6)
SELECT 1,2,3,4,5,6 UNION ALL
SELECT 2,3,4,5,6,7 UNION ALL
SELECT 3,4,5,8,1,2 UNION ALL
SELECT 4,5,6,9,2,3 UNION ALL
SELECT 5,6,1,10,3,4 UNION ALL
SELECT 11,1,2,3,4,5


--SELECT M = DBO.F_MAXINT(L1,L2,L3,L4,L5,L6) FROM @T
UPDATE @T SET M = DBO.F_MAXINT(L1,L2,L3,L4,L5,L6)

SELECT * FROM @T

热点排行