微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLSERVER2000中表变量的应用

原语句如下:

 

 

 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 ()) 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐