原语句如下:
 ?
 ?
 ?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?())?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|