遍历数据库添加默认值
遍历数据库,如果是数字型的列,就加默认值0
-
如果是日期型的列,就加默认值getdate()
-
该怎么做呢
问题点数:30、回复次数:5Top
1 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-12-05 16:12:03 得分 1
改表结构?Top
2 楼bzscs(沙虫 我爱小美)回复于 2005-12-05 16:27:10 得分 0
是的啊,修改结构,从access导入的表,默认值都没有了,该怎么用sql一次性加上去,手工加麻烦了点Top
3 楼superunusa(迷失方向的蚂蚁)回复于 2005-12-05 16:32:11 得分 1
估计不好做,你可以用语句民改
Top
4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-05 17:50:27 得分 20
CREATE PROCEDURE UpdateAllDefault
as
declare cur cursor
read_only for
select c.表名, c.列名,d.data_type as 类型,d.column_default as 默认值
from
(select a.name as 表名, b.name as 列名
from
(select * from dbo.sysobjects where type ='u' and name <> 'dtproperties') a
inner join
(select * from syscolumns) b on a.id = b.id) c
inner join information_schema.columns d on c.表名=d.table_name and c.列名=d.column_name
declare @s varchar(500)
declare @表名 varchar(40)
declare @列名 varchar(40)
declare @类型 varchar(40)
declare @默认值 varchar(40)
open cur
fetch next from cur into @表名, @列名, @类型, @默认值
while (@@fetch_status = 0)
begin
if isnull(@默认值,'')=''
begin
if @类型 in ('int','money') --数据类型,自己添加
begin
set @s = ' alter table '+ @表名+' add default(0) for ' + @列名
print @s
exec (@s)
end
if @类型 in ('datetime','smalldatetime') --日期类型
begin
set @s = ' alter table '+ @表名+' add default(getdate()) for ' + @列名
print @s
exec (@s)
end
end
fetch next from cur into @表名, @列名, @类型, @默认值
end
close cur
deallocate cur
GO
Top
5 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-12-05 18:44:12 得分 8
select t.name,c.name,systypes.name
from sysobjects t,syscolumns c,systypes
where t.type='U' and t.id=c.id and systypes.type=c.type
然后用游标吧Top




