SQLSERVER2000中表变量的应用(By downmoon) 

201 篇文章 0 订阅
75 篇文章 0 订阅

原语句如下:



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 ()) 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值