修改Sql Server2000 数据表中某字段的默认值,而又不会使表中数据丢失,用 Sql脚本实现。在线等……

cym40011 2005-04-21 10:20:55
如题,
...全文
940 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
midhand 2005-04-21
  • 打赏
  • 举报
回复
邹大侠误会我的意思了,我说的关键要加上with values 不是说它是用来保留值,因为改默认值本身不会丢失数据,我的意思是说改默认值关键要记住加上With Values(我都是这样做的)
因为如果不加With Values,如果没有指定 WITH VALUES 且列允许空值,那么将在现有行的新列中存储 NULL 值。
zjcxc 2005-04-21
  • 打赏
  • 举报
回复
楼上看清楚我说的是什么

自己去查查with values是针对什么起作用的.
midhand 2005-04-21
  • 打赏
  • 举报
回复
邹大侠说的不很正确
按照我上面的方法,就可以在保留值的情况下改默认值
关键是要加上 With Values
midhand 2005-04-21
  • 打赏
  • 举报
回复
ALTER TABLE 表名 add DEFAULT ('修改后的默认值') for 字段名 WITH VALUES

注:如果该字段以前已经有默认值了,在修改之前需要先将约束删除,否则会报错
删约束的SQL:
Alter table 表名 drop constraint 约束名

关于约束名,需要先查一下,
查约束名的SQL:
select c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id('表名')
and b.name='字段名'

zjcxc 2005-04-21
  • 打赏
  • 举报
回复
简单地说,默认值不能改,只能删除后重建

当然,删除默认值(约束)不会影响表中现有的数据.
zjcxc 2005-04-21
  • 打赏
  • 举报
回复
/*--修改/删除有默认值的字段 示例--*/

--测试表
Create Table t1(
ID int Default(0),
Name Varchar(16) Default(16),
Memo Varchar(255) Default('')
)
go

--要求,删除name字段,将memo字段改为: Memo Varchar(32) Default(32)

--处理方法

----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='t1'
and (a.name='name' or a.name='memo')
exec(@s)

----b.再删除字段 name
alter table t1 drop column [name]

----c.修改字段 memo
alter table t1 alter column [memo] varchar(32)

----d.为字段 memo 添加默认值约束
set @s='alter table t1 add constraint
[df__t1__memo__'+cast(newid() as varchar(36))
+'] default (32) for memo'
exec(@s)
go

--插入数据测试
insert t1 values(default,default)
select * from t1
go

--删除测试
drop table t1

/*--测试结果
ID Memo
----------- --------------------------------
0 32

(所影响的行数为 1 行)
--*/

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧