[求助]数据库自动更新问题!解决给分..UP也有分,少!

sunzhemei 2005-01-19 05:35:21
时间不多了。谢谢各位大侠帮忙!^_^

在一个表中,字段:cpid,name,end_time;想要对cpid进行每月更新。要求:每天系统自动检查时间,当日期到了end_time,cpid的自动更新,且是随机的,不能重复。
请问怎么做呢,时间真的很紧,谢谢各位帮忙啊。

我自己也写了一个,可是老有错了。如果各位能帮我指出错误也给分,至于UP者,少分!解决问题者多分!
...全文
226 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hai2003xp 2005-01-21
  • 打赏
  • 举报
回复
ing ……
sunzhemei 2005-01-21
  • 打赏
  • 举报
回复
怎么就没有人来帮忙再想想呢!
还有更好的解决方案吗??
^_^
sunzhemei 2005-01-20
  • 打赏
  • 举报
回复
谢谢各位。已经有位朋友帮我解决了!
谢谢大家的参与!
既然这样,我把它公开出来,一块儿学习一下!
一天后,每人平均分分!嘻嘻
如果有人能用不同的方法也做出来的话,
那我就考虑一下,是不是应该给他多点儿的分数喽!
好,下一帖,我就把程序发出来!!
子陌红尘 2005-01-20
  • 打赏
  • 举报
回复
第二个while循环里的select @id=99999999*rand()是何用意?不需要再生成一个新的@id,直接用原来的不就可以了吗?用了反而导致表中的cpid有重复。


while(@@fetch_status=0)
begin
select @id=9999999*rand()
while @id not in (select cpid from date_test where left(end_time,10)=left(getdate(),10))
begin
select @id=99999999*rand()
if @id in (select cpid from date_test )
begin
update date_test set cpid=@id
where current of cur_updateid
fetch next from cur_updateid into @id
end
else
begin
continue
end
end
end
Softlee81307 2005-01-20
  • 打赏
  • 举报
回复
up
Softlee81307 2005-01-20
  • 打赏
  • 举报
回复
up
sunzhemei 2005-01-20
  • 打赏
  • 举报
回复
to : gsh945(太平洋底)
可是,我想要把这个ID规定在一个范围之内的话呢,比如在5位到10位之间呢。
这样,是要进行一个判断的吧
那这样,会不会有重复呢?
那像我朋友这样做的,应该更不会有重复的吧。
谢谢你!
这不,我又学习到新东西了!!
^_^
GHOSTSEA 2005-01-20
  • 打赏
  • 举报
回复
看不懂啊,还是帮你顶啊~~~~~
Softlee81307 2005-01-20
  • 打赏
  • 举报
回复
up
Softlee81307 2005-01-20
  • 打赏
  • 举报
回复
up
郭大侠_ 2005-01-20
  • 打赏
  • 举报
回复
新建一个作业,每天执行一次。
将 @id=9999999*rand()
改为
@id=newid()
newid()函数肯定不会重复的。
631799 2005-01-20
  • 打赏
  • 举报
回复
叫你up有分
抱朴守拙 2005-01-20
  • 打赏
  • 举报
回复
学习,替你高兴!
sunzhemei 2005-01-20
  • 打赏
  • 举报
回复
OK,我现在把我朋友帮我搞定的东西拿出来,大家一起研究,探讨
也希望大家能够继续努力!谢谢各位!下面就我是朋友做的东西:
创建表:
create table date_test
(
cpid varchar(20),
name varchar(20),
end_time datetime
)
select* from date_test
添加数据:当执行时,满足end_time为当前时,自动更新ID,并且end_time向后加一个月,即:成为了2005-2-20
insert into date_test values('232323','mei','2005-1-20')
insert into date_test values('121212','mei','2005-1-20')
insert into date_test values('2004313','nl','2005-1-20')
insert into date_test values('2004314','nl','2004-12-20')



/****************************************************/
/****************************************************/
/****************************************************/
创建存储过程,调用了游标:
CREATE procedure chagerecord
as
/*定义一个游标来存放查询到符合条件的记录*/
set nocount on

declare @upid varchar(20)
declare @tempuid varchar(20)
declare @temprnd varchar(4)
declare resultrecord cursor for
select cpid from date_test where left(end_time,12)=left(getdate(),12)

open resultrecord

fetch next from resultrecord into @upid

while @@fetch_status=0
begin
set @tempuid= ltrim(str(year(getdate())))+ltrim(str(month(getdate())))+ltrim(str(day(getdate())))

set @temprnd=round(9999*rand(),0)

set @tempuid=ltrim(str(@tempuid))+@temprnd

update date_test set cpid=@tempuid,end_time=dateadd(mm,1,getdate()) where cpid=@upid

fetch next from resultrecord into @upid
end
close resultrecord
deallocate resultrecord
GO

做一个作业,作业中调用即可:
exec chagerecord

select * from date_test
sunzhemei 2005-01-19
  • 打赏
  • 举报
回复
to Littleming(小明)
我试过了,不行
Littleming 2005-01-19
  • 打赏
  • 举报
回复
/********************************** 你的代码 ************************/
select @id=9999999*rand()
while @id not in (select cpid from date_test where left(end_time,10)=left(getdate(),10))
begin
select @id=99999999*rand()
if @id in (select cpid from date_test )
begin
update date_test set cpid=@id
where current of cur_updateid
fetch next from cur_updateid into @id
end
else
begin
continue
end
end

/***************************** 改成 ********************************/
while exists(select cpid from date_test where cpid=@id)
set @id=9999999*rand()

update date_test set cpid=@id
where current of cur_updateid
fetch next from cur_updateid into @id

/****************************************************/
再处理一个作业
子陌红尘 2005-01-19
  • 打赏
  • 举报
回复
将执行的规则定义在一个SP中,用JOB调度执行即可。
jiang130 2005-01-19
  • 打赏
  • 举报
回复
要定時更新用作業
skywebnet 2005-01-19
  • 打赏
  • 举报
回复
定义 作业 完成定时更新
UP

iswear428 2005-01-19
  • 打赏
  • 举报
回复
大致上应该写一个存储过程,然后放到作业中

不明白对”cpid进行每月更新“?什么意思,是不是
SET CPID=NEWID ( )
加载更多回复(3)

27,580

社区成员

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

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