转置的存储过程

 

create       proc       proc_sky_blue       (@tablename       varchar(200))  

as  

begin  

        set       nocount       on  

        declare       @col       nvarchar(256)  

        declare       @makesql       nvarchar(4000)  

        declare       @insertsql       nvarchar(4000)  

        declare       @caculatesql       nvarchar(400)  

        declare       @count       int  

        declare       @i       int  

        create       table       #tmp       (colname       nvarchar(20))  

        select       @caculatesql       =       'select       @count=count(1)       from       '       +       @tablename  

        exec       sp_executesql       @caculatesql,       N   '@count       int       output   ',@count       output  

        if       @count       >   =1024  

        begin  

                raiserror(   '表的行数太多了,我转不了   ',16,1)  

        end  

        else  

        begin  

                select       @i=0  

                while       @count       >   0  

                begin  

                        select       @i=@i+1  

                        select       @makesql       =       'alter       table       #tmp       add       col   '+convert(varchar(20),@i)+   '       int   '  

                        exec(@makesql)  

                        select       @count=@count-1  

                end  

                declare       my_cursor       cursor       for  

                select       name       from       syscolumns       where       order       by       colid  

                open       my_cursor  

                fetch       next       from       my_cursor       into       @col  

                while       @@fetch_status       =       0  

                begin  

                        select       @makesql       =   'select       @insertsql=       @insertsql       +       convert(varchar(4),   '+@col+   ')       +   '   ',   '   '       from       '       +@tablename  

                        select       @insertsql       =N   'insert       #tmp       values       (   '   '   '+@col+       '   '   ',   '  

                        execute       sp_executesql       @makesql,N   '@insertsql       nvarchar(4000)       output   '       ,@insertsql       output  

                        select       @insertsql       =       left(@insertsql,len(@insertsql)-1)       +   ')   '  

                        exec(@insertsql)  

                        fetch       next       from       my_cursor       into       @col  

                end  

                close       my_cursor  

                deallocate       my_cursor  

                select       *       from       #tmp  

                set       nocount       off  

        end  

end   
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值