sql sever 列转行存储过程

本文介绍了一个SQL存储过程,用于将指定表格中从某一列开始的所有列转换为行,适用于需要进行列到行数据转换的业务场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  业务场景: 实现一个表中,从第几列开始,以后列都转为行

 不逼逼多,上货


create PROCEDURE [dbo].[proc_unpivot]
(@tableName varchar(50),  --@tableName  表名
 @num  varchar(50) )      --@num  从那一列开始,列变行

 AS
 BEGIN
  declare @LieName varchar(50)
  declare @LieName2 varchar(50)
  declare @sql varchar(max)
  declare @sql2 varchar(max)
  declare @Zsql varchar(max)
  set @sql=''
  set @sql2=''
  if(SUBSTRING(@TableName,0,7)='[dbo].')
   begin
     set  @TableName=SUBSTRING(@TableName,8,len(@TableName)-8)
   end
   else
    begin
	   set  @TableName=@TableName
	end
  --第1个游标
  declare My_Cursor CURSOR for 
  select name from syscolumns 
  Where ID=OBJECT_ID(@tableName)
  and colid<@num 
  order by colid
  Open  My_Cursor
  fetch next from My_Cursor into @LieName
  while @@fetch_status=0  
  begin
       set @sql=@sql+'
	   '+@LieName+','
	fetch next from My_Cursor into @LieName
  end     
  Close My_Cursor
  Deallocate My_Cursor
  --set @sql=SUBSTRING(@sql,1,LEN(@sql)-1)
  ---第2个游标
  declare My_Cursor2 CURSOR for 
  select name from syscolumns 
  Where ID=OBJECT_ID(@tableName)
  and colid>=@num 
  order by colid
  Open  My_Cursor2
  fetch next from My_Cursor2 into @LieName2
  while @@fetch_status=0  
  begin
       set @sql2=@sql2+@LieName2+','
	fetch next from My_Cursor2 into @LieName2
  end 
  Close My_Cursor2
  Deallocate My_Cursor2
  set @sql2=SUBSTRING(@sql2,1,LEN(@sql2)-1)
  --print @sql2
  set @Zsql='select'+@sql+'
       数量,'+'
       列名称'+'
  from '+@tableName +'
  unpivot (数量 for 列名称 in('+@sql2+')) N'
  print @Zsql
  exec(@Zsql)
 END

这是我写的存储过程,你只需拷过去

然后 运行 exec  proc_unpivot @tablename,@num

@tablename意思:表名

@num 意思:从这个表中,第几列开始以后列都转行。包括此列

如: exec  proc_unpivot ‘表名A’,2    ,意思: 从表名A开始 第2列开始,以后列都转行,包括第2列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值