CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

添加动态列的存储过程怎么写才对

楼主peopleyl(帅哥烦恼多)2006-03-01 17:51:31 在 MS-SQL Server / 疑难问题 提问

我问题的想法是把表t1中的所有tname   列读出来   添加到t2表变为行名  
   
  create   table   t1  
  (tid   int   primary   key,tname   char(20)  
  )  
  create   table   t2  
  (tid   int   primary   key  
  )  
  insert   into   t1   values(1,'一')  
  insert   into   t1   values(2,'二')  
  insert   into   t1   values(3,'三')  
  insert   into   t1   values(4,'四')  
  insert   into   t1   values(5,'五')  
   
  create   procedure   col  
  (  
        @i   int   out  
  )  
  as  
  declare   @count   int  
  declare   @while   int  
  declare   @var   varchar(20)  
  select   @count   =   count(*)   from   t1  
  select   @while   =   1  
  while   @while   <   @count    
  begin  
        select   @var   =   (select   tname   from   t1   where   tid   =   cast(@while   as   varchar(20)))  
        alter   table   t2   add   @var   varchar(30)   /*此处出错*/  
        set   @while   =   @while   +   1  
  end  
  select   @i   =   @@error  
   
  还有别的方法吗?  
         
   
  问题点数:30、回复次数:4Top

1 楼happyflystone(无枪的狙击手)回复于 2006-03-01 19:10:57 得分 30

set   nocount   on  
  create   table   t1  
  (tid   int   primary   key,tname   char(20)  
  )  
  create   table   t2  
  (tid   int   primary   key  
  )  
  insert   into   t1   values(1,'一')  
  insert   into   t1   values(2,'二')  
  insert   into   t1   values(3,'三')  
  insert   into   t1   values(4,'四')  
  insert   into   t1   values(5,'五')  
  ---方法一,也就是你的方法  
  declare   @count   int  
  declare   @while   int  
  declare   @var   varchar(20)  
  select   @count   =   count(*)   from   t1  
  select   @while   =   1  
  while   @while   <=   @count    
  begin  
        select   @var   =   (select   tname   from   t1   where   tid   =   cast(@while   as   varchar(20)))  
        exec('alter   table   t2   add   '+@var   +   '   varchar(30)')   /*此处出错*/  
        set   @while   =   @while   +   1  
  end  
  select   *   from   t2  
  /*  
  tid                   一                                                             二                                                             三                                                             四                                                             五                                                              
  -----------   ------------------------------   ------------------------------   ------------------------------   ------------------------------   ------------------------------    
  */  
  ----方法二:  
  drop   table   t2  
  declare   @s   varchar(8000)  
  set   @s   =   ''  
  select   @s=@s+',['+rtrim(tname)+']=0'   from   t1  
   
  exec('select   tid   '+@s   +'   into   t2   from   t1   where   1   =2')  
  select   *   from   t2  
  /*  
  tid                   一                                                             二                                                             三                                                             四                                                             五                                                              
  -----------   ------------------------------   ------------------------------   ------------------------------   ------------------------------   ------------------------------    
  */  
  drop   table   t1,t2Top

2 楼happyflystone(无枪的狙击手)回复于 2006-03-01 19:14:53 得分 0

过程你自己搞定吧!!!Top

3 楼treeClimber(我以我血荐轩辕)回复于 2006-03-02 14:23:11 得分 0

exec()     字符串+变量形式Top

4 楼zl1980(友情暂住)回复于 2006-05-01 00:37:35 得分 0

-*upTop

相关问题

  • 请教一个分段+动态列统计的存储过程!!!
  • 分段+动态列统计的存储过程-完整描述
  • 在Oracle的存储过程中动态调用存储过程
  • 如何在存储过程中动态选择列名和表名?
  • 再次请教一个分段+动态列统计的存储过程
  • 如何动态设置存储过程
  • 怎样写动态存储过程?
  • 存储过程中动态的问题
  • 动态存储过程问题。
  • 如何写动态存储过程?

关键词

  • t1
  • 添加
  • intdeclare
  • tname
  • 表
  • insert
  • tid
  • intot1values
  • count
  • create table

得分解答快速导航

  • 帖主:peopleyl
  • happyflystone

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo