CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

SQL语句问题,详情请进。

楼主blackpearl2(黑珍珠)2004-07-03 14:17:35 在 MS-SQL Server / 基础类 提问

比如有一表Tabel1有三个字段分别为   int   a   default   0,int   b   default   0,   int   c   default   0,现在Tabel1已经有数据了,想将整型的   a,b,c   都改成   money类型,如何写这一条SQL语句,解决马上结贴。 问题点数:100、回复次数:4Top

1 楼yesterday2000(一笑而过)回复于 2004-07-03 14:21:40 得分 10

删除字段  
  ALTER   TABLE   table_NAME   DROP   COLUMN   column_NAME  
  修改字段类型  
  ALTER   TABLE   table_name     ALTER   COLUMN   column_name   new_data_type  
  改名  
  sp_rename  
  更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。  
   
  语法  
  sp_rename   [   @objname   =   ]   'object_name'   ,  
          [   @newname   =   ]   'new_name'  
          [   ,   [   @objtype   =   ]   'object_type'   ]Top

2 楼zjcxc(邹建)回复于 2004-07-03 14:22:21 得分 0

----a.先删除要处理字段的默认值约束  
  declare   @s   varchar(8000)  
  set   @s=''  
  select   @s=@s+'  
  alter   table   ['+b.name+']   drop   constraint   ['+d.name+']'  
  from   syscolumns   a  
  join   sysobjects   b   on   a.id=b.id  
  join   syscomments   c   on   a.cdefault=c.id  
  join   sysobjects   d   on   c.id=d.id  
  where   b.name='Tabel1'    
  and   a.name   in('a','b','c')  
  exec(@s)  
   
  --再修改字段类型  
  alter   table   table1   alter   column   a   money  
  alter   table   table1   alter   column   b   money  
  alter   table   table1   alter   column   c   money  
   
  --为字段加回默认值  
  set   @s='alter   table   table1   add   constraint  
  [df__table1__a__'+cast(newid()   as   varchar(36))  
  +']   default   (0)   for   a'  
  exec(@s)  
  set   @s='alter   table   table1   add   constraint  
  [df__table1__b__'+cast(newid()   as   varchar(36))  
  +']   default   (0)   for   b'  
  exec(@s)  
  set   @s='alter   table   table1   add   constraint  
  [df__table1__c__'+cast(newid()   as   varchar(36))  
  +']   default   (0)   for   c'  
  exec(@s)Top

3 楼zjcxc(邹建)回复于 2004-07-03 14:24:39 得分 90

 
  --或者这样处理:  
   
  --原字段改名  
  exec   sp_rename   'table1.a','a_bak'  
  exec   sp_rename   'table1.b','b_bak'  
  exec   sp_rename   'table1.c','c_bak'  
  go  
   
  --添加新字段  
  alter   table   table1   add   a   money   default   0  
  alter   table   table1   add   b   money   default   0  
  alter   table   table1   add   c   money   default   0  
  go  
   
  --旧列数据复制到新列  
  update   table1   set   a=a_bak,b=b_bak,c=c_bak  
  go  
   
  --删除旧列字段  
  alter   table   table1   drop   column   a_bak  
  alter   table   table1   drop   column   b_bak  
  alter   table   table1   drop   column   c_bak  
  Top

4 楼blackpearl2(黑珍珠)回复于 2004-07-03 14:44:09 得分 0

--删除旧列字段  
  alter   table   table1   drop   column   a_bak  
  alter   table   table1   drop   column   b_bak  
  alter   table   table1   drop   column   c_bak  
  这个执行失败,原因是它有默认值,不可以删除,不过这样也可以用了,谢谢。结贴。Top

相关问题

  • sql语句,详情请进。
  • sql语句,详情请进。
  • sql语句,详情请进。
  • sql语句,详情请进
  • sql语句,详情请进
  • sql语句问题,详情请进。
  • sql语句问题,详情请进。
  • 求一SQL语句,进入看详情,在线等
  • UPDATE语句,sql 语句高手请进
  • UPDATE语句,sql 语句高手请进

关键词

  • 字段
  • alter
  • tabel
  • newid
  • 类型
  • column
  • df
  • table
  • cast
  • default

得分解答快速导航

  • 帖主:blackpearl2
  • yesterday2000
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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