SQL语句问题,详情请进。
比如有一表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




