表变量的性能差异,表变量的妙用

    技术2022-05-11  48

    declare   @d   datetime   set   @d = getdate ()  SELECT      [ P_ID ]    FROM       [ ProductInfo ]    WHERE   [ P_ID ]   IN  ( 28674 , 28667 , 28241 , 355 , 7210 , 14646 , 2164 , 11891 , 4519 , 14671 , 21788 , 21816 , 21817 , 21108 , 21196 ) select   [ 语句执行花费时间(毫秒) ] = datediff (ms, @d , getdate ())   现要求按括号中的ID顺序输出结果 此时, 可以用到SQLSERVER2000中特有的功能Table变量(亦可用临时表,但性能还是有不小的差距) 结果语句如下: declare   @d2   datetime set   @d2 = getdate ()  declare   @list    Nvarchar ( 4000 ) declare   @str   Nvarchar ( 10 ) declare   @orderid   int declare   @tmp   int Declare   @TableVar   Table  (OrderID  int    Primary   Key  ,TestID  int ) set   @list = ' 28674,28667,28241,355,7210,14646,2164,11891,4519,14671,21788,21816,21817,21108,21196 ' set   @orderid = 0 while  ( charindex ( ' , ' , @list ) > 0 )     begin           set   @str = substring ( @list , 1 , charindex ( ' , ' , @list ))     print   @str      set   @tmp =   cast ( Replace ( @str , ' , ' , '' as   int )     print   @tmp      set   @list = substring ( @list , len ( @str ) + 1 , len ( @list ) - len ( @str ) + 1 )     -- --set @str=Replace(@str,',','')      set   @orderid = @orderid + 1      print   @orderid      Insert   Into   @TableVar   Values  ( @orderid @tmp )     end --  Select TestID  From @TableVar order by OrderID select   [ P_ID ]   from  productinfo p  inner   join    @TableVar   a  on  p.p_ID = a.TestID order   by  a.OrderID select   [ 语句执行花费时间(毫秒) ] = datediff (ms, @d2 , getdate ()) 

     

    另外形如

    set @d=getdate() SELECT    ***

        select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

    set @d=getdate() 和select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 可测出执行时间


    最新回复(0)