原语句如下:



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] 举报,一经查实,本站将立刻删除。