下午一直倒腾数据库的问题。其中有一个问题是随机获取一个表中的数据,而且在规定的时间段内不能更改数据。比如说,这个例子的引用背景是每个月随机产生4个用户,改用户是系统奖励的对象,而且在一个月内改4个用户的信息不变。本然再用一个表就可以轻松实现,但实际要求不能加表,所有只能在一个表内
以上是存储过程的全部代码,希望各位多多指点!
set
ANSI_NULLS
ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 章学敏
-- Create date: 2007-08-03
-- Description: 用于随机产生的奖励用户
-- =============================================
ALTER PROCEDURE [ dbo ] . [ Forum_GetAwardUser ]
( @count int = 1 , @IsOne int = 0 , @tempflag int = 1 , @IsThirthy int = 0 )
AS
BEGIN
declare @max int
declare @rd int
select top 1 @max = UserID from UserBase order by [ CreateTime ] desc
if exists ( select UserID from UserBase where IsAward = 1 )
set @tempflag = 1
if ( @IsThirthy = 1 )
begin
update UserBase set IsAward = 2 where IsAward = 1
end
if exists ( select UserID from UserBase where IsAward = 2 )
set @tempflag = 2
if (( @tempflag = 2 ) and ( @IsOne = 1 ))
begin
create table #td(ID int , [ Name ] nvarchar ( 20 ),NName nvarchar ( 20 ),Photo varchar ( 300 ))
update UserBase set IsAward = 0
while @count < 6
begin
select @rd = cast ( ceiling ( rand (checksum( newid ())) * @max ) as int )
if exists ( select UserID from UserBase where UserID = @rd )
begin
set @count = @count + 1
-- select UserID,UserName,Nickname,PhotoUrl from UserBase where UserID=@rd
-- insert into #td (ID,[Name],NName,Photo) values (select UserID,UserName,Nickname,PhotoUrl from UserBase where UserID=@rd)
insert into #td select UserID,UserName,Nickname,PhotoUrl from UserBase where UserID = @rd
update UserBase set IsAward = 1 where UserID = @rd
end
if not exists ( select UserID from UserBase where UserID = @rd )
set @count = @count
end
select distinct top 4 * from #td order by ID
drop table #td
end
else
select top 4 UserID as ID,UserName as [ Name ] ,Nickname as NName,PhotoUrl as Photo from UserBase where IsAward > 0 order by UserID
END
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 章学敏
-- Create date: 2007-08-03
-- Description: 用于随机产生的奖励用户
-- =============================================
ALTER PROCEDURE [ dbo ] . [ Forum_GetAwardUser ]
( @count int = 1 , @IsOne int = 0 , @tempflag int = 1 , @IsThirthy int = 0 )
AS
BEGIN
declare @max int
declare @rd int
select top 1 @max = UserID from UserBase order by [ CreateTime ] desc
if exists ( select UserID from UserBase where IsAward = 1 )
set @tempflag = 1
if ( @IsThirthy = 1 )
begin
update UserBase set IsAward = 2 where IsAward = 1
end
if exists ( select UserID from UserBase where IsAward = 2 )
set @tempflag = 2
if (( @tempflag = 2 ) and ( @IsOne = 1 ))
begin
create table #td(ID int , [ Name ] nvarchar ( 20 ),NName nvarchar ( 20 ),Photo varchar ( 300 ))
update UserBase set IsAward = 0
while @count < 6
begin
select @rd = cast ( ceiling ( rand (checksum( newid ())) * @max ) as int )
if exists ( select UserID from UserBase where UserID = @rd )
begin
set @count = @count + 1
-- select UserID,UserName,Nickname,PhotoUrl from UserBase where UserID=@rd
-- insert into #td (ID,[Name],NName,Photo) values (select UserID,UserName,Nickname,PhotoUrl from UserBase where UserID=@rd)
insert into #td select UserID,UserName,Nickname,PhotoUrl from UserBase where UserID = @rd
update UserBase set IsAward = 1 where UserID = @rd
end
if not exists ( select UserID from UserBase where UserID = @rd )
set @count = @count
end
select distinct top 4 * from #td order by ID
drop table #td
end
else
select top 4 UserID as ID,UserName as [ Name ] ,Nickname as NName,PhotoUrl as Photo from UserBase where IsAward > 0 order by UserID
END