CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

邹建大哥救救我吧~!!动态列转行的问题!急救~!!!高手请快进!在线等

楼主yangbo1983857(帝喾)2006-09-23 16:49:00 在 MS-SQL Server / 疑难问题 提问

最近忙存储过程,里面有这样一个很棘手的问题。  
  就是我创建一个identity的列的表,然后动态的根据情况alter   add一定的列  
  这样我可以拼成一个sql   查询语句。  
  然后执行了后可以达到一个很多列,只有一行的数据  
  现在要把这个一列很多行的值,转成一个很多行的表里面  
  列名           列名           列名  
  value       value           value  
   
  转成  
   
  列名             值  
  columns       value  
  columns       value 问题点数:100、回复次数:12Top

1 楼yangbo1983857(帝喾)回复于 2006-09-23 16:51:31 得分 0

首先列名,我不知道,我只知道有多少列!Top

2 楼paoluo(一天到晚游泳的鱼)回复于 2006-09-23 16:59:02 得分 0

每列的類型是不是一致的??Top

3 楼paoluo(一天到晚游泳的鱼)回复于 2006-09-23 17:09:08 得分 30

--建立測試環境  
  Create   Table   TEST  
  (Col1 Int,  
    Col2 Int,  
    Col3 Int,  
    Col4 Int,  
    Col5 Int)  
  --插入數據  
  Insert   TEST   Select   2,3,5,7,9  
  GO  
  --測試  
  Declare   @S   Varchar(8000)  
  Select   @S   =   ''  
  Select   @S   =   @S   +'   Union   All   Select   '''+   Name   +   '''   As   ColName,'+   Name   +'   As   Value   From   TEST'    
  From   SysColumns    
  Where   ID=OBJECT_ID('TEST')  
  Order   By   ColID  
  Select   @S   =   Stuff(@S,1,10,'')  
  EXEC(@S)  
  --刪除測試環境  
  Drop   Table   TEST  
  --結果  
  /*  
  ColName Value  
  Col1 2  
  Col2 3  
  Col3 5  
  Col4 7  
  Col5 9  
  */  
   
   
  Top

4 楼yangbo1983857(帝喾)回复于 2006-09-23 18:17:04 得分 0

如果是  
  Create   Table   #TEST  
  (Col1 Int,  
    Col2 Int,  
    Col3 Int,  
    Col4 Int,  
    Col5 Int)  
   
  怎么办呢???  
  能在系统表取到值吗?Top

5 楼yangbo1983857(帝喾)回复于 2006-09-23 18:25:38 得分 0

我转换后的的结果或者表还需要用,这个结果能生成一个表吗?最好是临时表  
  #tableTop

6 楼yangbo1983857(帝喾)回复于 2006-09-23 18:34:45 得分 0

高手呢?  
  怎么没有人了???  
  救救我吧~!Top

7 楼zjcxc(邹建)回复于 2006-09-23 20:09:07 得分 70

--   如果是  
  Create   Table   #TEST  
  (Col1 Int,  
    Col2 Int,  
    Col3 Int,  
    Col4 Int,  
    Col5 Int)  
  INSERT   #TEST   SELECT   1,   2,   3,   4,   5  
  GO  
   
  --測試  
  Declare   @S   Varchar(8000)  
  Select   @S   =   ''  
  Select   @S   =   @S   +'   Union   All   Select   '''+   Name   +   '''   As   ColName,'+   Name   +'   As   Value   From   #TEST'    
  From   tempdb.dbo.syscolumns    
  Where   ID=OBJECT_ID('tempdb..#TEST')  
  Order   By   ColID  
  Select   @S   =   Stuff(@S,1,10,'')  
  EXEC(@S)  
   
  --刪除測試環境  
  Drop   Table   #TEST  
   
  --   结果:  
  ColName   Value  
  -------   -----------  
  Col1         1  
  Col2         2  
  Col3         3  
  Col4         4  
  Col5         5  
   
  (5   行受影响)  
  Top

8 楼zjcxc(邹建)回复于 2006-09-23 20:12:06 得分 0

我转换后的的结果或者表还需要用,这个结果能生成一个表吗?最好是临时表  
   
   
  局部的临时表不现实,   因为局部临时表在处理过程结束后就自动删除了.  
  可以用全局的临时表  
   
  Declare   @S   Varchar(8000)  
  Select   @S   =   ''  
  Select   @S   =   @S   +'   Union   All   Select   '''+   Name   +   '''   As   ColName,'+   Name   +'   As   Value   From   #TEST'    
  From   tempdb.dbo.syscolumns    
  Where   ID=OBJECT_ID('tempdb..#TEST')  
  Order   By   ColID  
  Select   @S   =   'SELECT   *   INTO   ##TEST   FROM('   +   Stuff(@S,1,10,'')   +   ')a'  
  EXEC(@S)  
  SELECT   *   FROM   ##TEST  
  goTop

9 楼yangbo1983857(帝喾)回复于 2006-09-24 08:47:38 得分 0

谢谢邹建大哥~!!!!!!您真是太牛了啊~!这是您第二次帮我解决难题了!  
  真感谢您!Top

10 楼paoluo(一天到晚游泳的鱼)回复于 2006-09-25 08:15:20 得分 0

真是暈啊,怎麼在下班的時候才回復上來。Top

11 楼kenpa(大海无量)回复于 2006-10-12 02:33:19 得分 0

remarkTop

12 楼kiss_me(祥仔)回复于 2006-10-12 13:52:49 得分 0

很好啊1Top

相关问题

关键词

得分解答快速导航

  • 帖主:yangbo1983857
  • paoluo
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...

社区焦点:

教你怎样用C#搞笑整人
最懒惰的程序员写的Cache
程序员如何掌握专业英语
Java栈与堆
分享:让人懊恼的面试
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo