高分:求修改表中所有字段 NULL 改为 NOT NULL

zlt982001 2005-06-09 04:12:40

要求一段通用的脚本,指定一个表名,修改所有表中的所有字段有 NULL 的设置 为 NOT NULL

前提条件

1.表中所有数据的字段内容都没有存在 NULL
2.表中字段名称都不确定
3.字段可能有各种形态,如有默认值约束,索引,主键 这3种形态,要求设置 NOT NULL 后不会丢失这些状态,并且现有的字段类型,长度不变.
4. 不要使用 重建表,复制数据的方式

其实就是要使用这种方式来设置
Alter Table tablename ALter column columnName datatype not null
但是要求 处理未知的字段名和数据类型长度



请大家看清楚条件再回答



...全文
335 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
filebat 2005-06-15
  • 打赏
  • 举报
回复
to fengfangfang() ( )
" 设置合适的条件更新syscolumns表中的isnullable"这种方法是不行的啦,因为isnullable是一个计算列.
觉得还是用alter table比较爽.


zlt982001 2005-06-15
  • 打赏
  • 举报
回复
看来又白问了
zlt98 2005-06-14
  • 打赏
  • 举报
回复
换号再顶,干吗限制3次连续回复
zlt982001 2005-06-10
  • 打赏
  • 举报
回复
up
zlt982001 2005-06-10
  • 打赏
  • 举报
回复
请大家认真的看我的前提条件
3.字段可能有各种形态,如有默认值约束,索引,主键 这3种形态,要求设置 NOT NULL 后不会丢失这些状态,并且现有的字段类型,长度不变.
zlt982001 2005-06-10
  • 打赏
  • 举报
回复
To : duanduan1122(我要做老大!!!)
你的脚本是错误的
1.使用以后,字段类型全部编程 sysname ??? 长度变成 128
2.也没有注意 有索引,主键,和约束的情况,所以执行不了

TO: libin_ftsafe(子陌红尘)
你的脚本也没有 注意 有索引,主键,和约束的情况


duanduan1122 2005-06-09
  • 打赏
  • 举报
回复
注意使用时候2个地方需要注意:
1。yourtable要变成你的表名
2。利用查找替换就可以了。
3。需要换2个地方
duanduan1122 2005-06-09
  • 打赏
  • 举报
回复
1.创建一张表,表名为yourtable,其中id列为空
create table yourtable
(id int)
2。脚本
declare @tname varchar(30),@cname varchar(20),@sql varchar(500)

declare cur cursor for
select s1.name,s3.name from syscolumns s1 join sysobjects s2
on s1.id=s2.id
join systypes s3
on s1.xtype=s3.xtype
where s2.id=(select object_id('yourtable'))


open cur

fetch next from cur into @tname,@cname

while @@fetch_status=0
begin
set @sql='Alter Table yourtable
ALter column '+@tname+' ' + @cname+' not null'
print (@sql)
exec(@sql)

fetch next from cur into @tname,@cname
end

close cur
deallocate cur

3。查看
sp_help yourtable
Andy__Huang 2005-06-09
  • 打赏
  • 举报
回复
你要改為not null,那麼你要填是什麼內容?既然是not null ,它肯定要有數據,或者你可以用空字符串來代替它?

华芸智森 2005-06-09
  • 打赏
  • 举报
回复
http://www.softhouse.com.cn/html/200409/2004090810400700000559.html
华芸智森 2005-06-09
  • 打赏
  • 举报
回复
试试 sp_msforeachtable 。
子陌红尘 2005-06-09
  • 打赏
  • 举报
回复
declare @s varchar(8000)
declare @t varchar(100)

set @s = ''
set @t = 't1'

select
@s = @s + ' alter table '+@t+' alter column '+b.name+' '+c.name+' not null;'
from
sysobjects a,
syscolumns b,
systypes c
where
a.id = b.id
and
b.type = c.type
and
a.xtype = 'U'
and
a.id = object_id(@t)
exec(@s)
fengfangfang 2005-06-09
  • 打赏
  • 举报
回复
设置合适的条件更新syscolumns表中的isnullable

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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