• 点击这里给我发消息
  • 点击这里给我发消息
设为首页 \ 加入收藏    
您现在的位置: 主页 > 技术支持 >
技术支持
新闻资讯
产品中心
解决方案
成功案例
技术支持
关于我们
联系我们
联系我们
西安卓识信息科技有限公司
电话:029-81323040
地址:陕西省西安市莲湖区大庆路15号玉林佳苑1105室
主页:http://www.soft-zs.com
联系人:夏先生
电话:18992884096
QQ:39260460
 
技术支持
标题: SQL行列转换通用存储过程
[发表时间: 2012-09-09 12:05 ] |[浏览:次]


ALTER PROCEDURE proc_hanglie
       @tbname sysname, --要处理的表名或视图名
       @fdname sysname, --作为转换后的列名
       @new_fdname sysname='' --为转换前的列指定一个新列名
AS

/*
--行列互换通用存储过程: 将指定的表,按指定的字段进行行列互换
--Modified by windy8848
*/

declare @str1 nvarchar(max), @str2 nvarchar(max),
        @str3 nvarchar(max), @str4 nvarchar(max),
        @str5 nvarchar(max), @i varchar(10)
       
select @str1 = '' , @str2 = '' , @str3 = '' , @str4 = '' , @str5 = '' , @i = '0'
select @str1 = @str1 + ',@' + @i + ' nvarchar(max)',
       @str2 = @str2 + ',@' + @i + '=''' + case isnull(@new_fdname , '') when '' then '' else @new_fdname + '=' end + '''''' + name + '''''''',
       @str3 = @str3 + ' select @' + @i + '=@' + @i + '+'', ['' + [' + @fdname +']+'']=''+cast(isnull([' + name + '],0) as varchar) from [' + @tbname + ']',
       @str4 = @str4 + ',@' + @i + '='' select ''+@' + @i,
       @str5 = @str5 + '+'' union all ''+@' + @i,
       @i=cast(@i as int)+1
from syscolumns
where object_name(id)=@tbname and name<>@fdname


select @str1=substring(@str1,2,8000),
       @str2=substring(@str2,2,8000),
       @str4=substring(@str4,2,8000),
       @str5=substring(@str5,16,80000)

DECLARE @sql NVARCHAR(MAX)
SET @sql = 'declare ' + @str1 + ' select ' + @str2 + @str3 + ' select ' + @str4 + ' EXEC(' + @str5 + ')'      

EXEC(@sql)

GO

 

+ 上一篇:用友通软件里面有3个帐套,现在有一个帐套登不进去,其他的可以
+ 下一篇:通用交叉表生成存储过程
 

西安卓识信息科技有限公司 版权所有【陕ICP备11007810号