if object_id('tempdb..#tmp') is not null
    drop table #tmp
GO
----创建测试数据
declare @t table(DJBH VARCHAR(20),ID int,ShL numeric(20,2))
insert @t
select 'XSC001',24949,3 union all
select 'XSC001',21943,2
----生成临时表
select top 100 id = identity(int,0,1) into #tmp from syscolumns,sysobjects
----查询
select a.* from @t as a,#tmp as b 
where b.id + 1 <= a.ShL
order by a.DJBH,a.ID DESCdrop table #tmp/*结果
DJBH    ID      ShL
------------------------------------------
XSC001  24949   3.00
XSC001  24949   3.00
XSC001  24949   3.00
XSC001  21943   2.00
XSC001  21943   2.00
*/

解决方案 »

  1.   

    回 hellowork(一两清风)
    用一条语句能不能搞定?不要用存储过程。因为我这个要返回很多值的,这样写太麻烦了。
      

  2.   

    hellowork(一两清风)的方法可以实现
      

  3.   

    这是循环的一种特殊实现方式,即使用表来实现循环,而不是WHILE语句.其实这种实现办法并不麻烦,只是多了一步创建循环要使用的ID临时表的步骤,如果应用程序中要频繁使用这个ID临时表,可以把该表变成全局临时表(##),然后就可以不必每次都创建临时表,只要反复使用主SQL语句就行了.例如这样:
    1.应用程序第一次运行时生成ID全局临时表
    select top 100 id = identity(int,0,1) into ##tmp from syscolumns,sysobjects
    2.以后每次循环时只调用下面的语句就可以了,不必再重新生成ID临时表
    select a.* from @t as a,##tmp as b 
    where b.id + 1 <= a.ShL
    order by a.DJBH,a.ID DESC
      

  4.   

    我测试过了。因为还要关联好几个表的数据,这样的话我只能用一个游标,每次取一个ID出来,再执行你那个语句。否则查出来的数据就是错误的。
    象上面的数量是5,我这里放到实例中去后每个ID都有5行
      

  5.   

    请问用SQL语句如何更改用户表名
      

  6.   

    使用sp_rename系统存储过程
    例如:将表 customers 重命名为 custs
    EXEC sp_rename 'customers', 'custs'