暴力,表中增加一列,SQL应该怎么写。

Liyingyue_FFS 2008-07-28 04:00:37
有366张表,命名规则为log+月份+日期
比如log_1_1 log_2_29 log_10_31 log_12_31
现在要给所有的表加一列newcol int, 并且给所有表以前的记录该列赋值为9,这个SQL应该怎么写

另外,每个表里大概有1000W的记录 这个效率也是要考虑的~
...全文
2204 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
迈克尔1998 2011-10-29
  • 打赏
  • 举报
回复
表示看不懂
潜伏的猫 2010-10-07
  • 打赏
  • 举报
回复
这个麻烦
Liyingyue_FFS 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 perfectaction 的回复:]
SQL code
set nocount on
declare @dt datetime set @dt='2008-01-01'
declare @tbname varchar(50),@sql varchar(8000)
while @dt<=cast('2008-12-31' as datetime)
begin
set @sql='alter table log_'+rtrim(month(@dt))+'_'+rtrim(day(@dt))+' add newcol int'
exec(@sql)
set @sql='update log_'+rtrim(month(@dt))+'_'+rtrim(day(@dt))+' set newcol=9'
exec(@sql)
set @dt=dateadd(day,1,@dt)
print('log_'+rtrim…
[/Quote]

比较看好这个,我唯一能看懂逻辑的。问个问题,set nocount on 是什么意思?
hery2002 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ojuju10 的回复:]
用游标加动态的sql解决
[/Quote]
ojuju10 2008-07-28
  • 打赏
  • 举报
回复

用游标加动态的sql解决
-晴天 2008-07-28
  • 打赏
  • 举报
回复
动态SQL.
comszsoft 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 Liyingyue_FFS 的帖子:]
另外,每个表里大概有1000W的记录 这个效率也是要考虑的~
[/Quote]

1000W,给这个列赋默认值的时候就会把表锁住,其他操作估计无法进行了
中国风 2008-07-28
  • 打赏
  • 举报
回复
SQL05時
@wherehead=' and name like ''log_%_%''--Name改為o.Name

chuifengde 2008-07-28
  • 打赏
  • 举报
回复
如果只针对,log开头的表可以
sp_msforeachtable 'ALTER TABLE ? ADD newcol int DEFAULT 9 WITH values',@wherehead=' and name like ''log_%_%'''
中国风 2008-07-28
  • 打赏
  • 举报
回复
2000可用

declare hcforeach cursor global
for
select ' alter table '+quotename(Name)+' add newcol int exec(''update '+quotename(Name)+' set newcol=9 '')'
from sysobjects
where objectproperty(id,'isusertable')=1
and name like 'log[_][0-9]%[_][0-9]%'--自定義條件

exec sp_msforeach_worker '?'
中国风 2008-07-28
  • 打赏
  • 举报
回复
EXEC sp_msforeachtable @command1 = N'
if ''?'' like ''log[_][0-9]%[_]%''
begin
ALTER TABLE ? ADD newcol int
exec(''UPDATE ? SET newcol = 9'')
end'
nzperfect 2008-07-28
  • 打赏
  • 举报
回复
set nocount on
declare @dt datetime set @dt='2008-01-01'
declare @tbname varchar(50),@sql varchar(8000)
while @dt<=cast('2008-12-31' as datetime)
begin
set @sql='alter table log_'+rtrim(month(@dt))+'_'+rtrim(day(@dt))+' add newcol int'
exec(@sql)
set @sql='update log_'+rtrim(month(@dt))+'_'+rtrim(day(@dt))+' set newcol=9'
exec(@sql)
set @dt=dateadd(day,1,@dt)
print('log_'+rtrim(month(@dt))+'_'+rtrim(day(@dt))+' 处理完毕')
end
chuifengde 2008-07-28
  • 打赏
  • 举报
回复
sp_msforeachtable 'ALTER TABLE ? ADD newcol int DEFAULT 9 WITH values'
水族杰纶 2008-07-28
  • 打赏
  • 举报
回复
declare mycursor cursor for
select name from sysobjects where type='u'
open mycursor
....
用游标实现看看。不知道效率如何?

22,208

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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