关于在存储过程中使用游标操作数据库
2008-09-17 12:13
786 查看
----------------------使用游标操作数据库------------------------------------------
alter procedure doTable
as
DECLARE @A1 VARCHAR(200),@A2 VARCHAR(200),@A3 varchar(1000),@A4 varchar(200)
declare @i int
declare @j int
declare @length int
declare @questionId varchar(50)
declare @areaid varchar(50)
declare @creatuser varchar(50)
declare @content varchar(100)
declare @replyAccount varchar(50)
declare @replyMembeId varchar(50)
declare @postTime datetime
DECLARE test CURSOR FOR SELECT 标题,id,内容,分类 FROM view1
OPEN test
fetch next from test into @a1,@a2,@a3 ,@a4
while @@fetch_status<>-1
begin
---设定第几条数据
set @j=0
--------去除左右空格
set @a3=rtrim(ltrim(@a3))
set @i=charindex('|||',@a3)
while @i>=1
begin
---第一条数据的话
if @j=0
begin
set @questionId=newid()
-------添加到问题列表中
set @content=left(@a3,@i-1)
set @j=@j+1
---获得任意一个用户
select top 1 @creatuser=account from member order by newid()
---获得任意一个地区
select top 1 @areaid=id from memberarea order by newid()
insert into question (ID,F_CATALOGID,F_AREAID,TITLE,CONTENT,POSTUSER,createuser)
values (@questionId,@a2,@areaid,@a1,@content,@creatuser,@creatuser)
end
---如果不是第一条记录,那就是问题的回复
else
begin
-------添加回复问题的表中
---获得任意一个用户
select top 1 @replyAccount= account,@replyMembeId=id from member order by newid()
--一年内的随机时间
set @postTime=dateadd(day, -cast(ceiling(rand() *365) as int),convert(char(50),getdate(),20))
insert into QUESTIONREPLY (F_QUESTIONID,TITLE,CONTENT,REPLYUSER,CREATEDATE,replydate,createuser,posta,postb)
values (@questionId,@a1,left(@a3,@i-1),@replyAccount,@postTime,@postTime,@replyMembeId,cast(ceiling(rand() *2) as int)-1,cast(ceiling(rand() *2) as int)-1)
end
set @a3=substring(@a3,@i+3,len(@a3)-@i)
set @i=charindex('|||',@a3)
end
if @a3<>'/'
begin
if @j=0
begin
-------只有一条,添加到问题列表中
---获得任意一个用户
select top 1 @creatuser=account from member order by newid()
---获得任意一个地区
select top 1 @areaid=id from memberarea order by newid()
set @questionId=newid()
insert into question (id,F_CATALOGID,F_AREAID,TITLE,CONTENT,POSTUSER,createuser)
values (@questionId,@a2,@areaid,@a1,@a3,@creatuser,@creatuser)
end
else
begin
-------添加回复问题的表中
---获得任意一个用户
select top 1 @replyAccount= account,@replyMembeId=id from member order by newid()
--一年内的随机时间
set @postTime=dateadd(day, -cast(ceiling(rand() *365) as int),convert(char(50),getdate(),20))
insert into QUESTIONREPLY (F_QUESTIONID,TITLE,CONTENT,REPLYUSER,CREATEDATE,replydate,createuser,posta,postb)
values (@questionId,@a1,@a3,@replyAccount,@postTime,@postTime,@replyMembeId,cast(ceiling(rand() *2) as int)-1,cast(ceiling(rand() *2) as int)-1)
end
end
fetch next from test into @a1,@a2,@a3 ,@a4
end
close test
deallocate test
execute doTable
select 内容 from view1
select count(*) from question
select count(*) from questionreply
delete from question
delete from questionreply
alter procedure doTable
as
DECLARE @A1 VARCHAR(200),@A2 VARCHAR(200),@A3 varchar(1000),@A4 varchar(200)
declare @i int
declare @j int
declare @length int
declare @questionId varchar(50)
declare @areaid varchar(50)
declare @creatuser varchar(50)
declare @content varchar(100)
declare @replyAccount varchar(50)
declare @replyMembeId varchar(50)
declare @postTime datetime
DECLARE test CURSOR FOR SELECT 标题,id,内容,分类 FROM view1
OPEN test
fetch next from test into @a1,@a2,@a3 ,@a4
while @@fetch_status<>-1
begin
---设定第几条数据
set @j=0
--------去除左右空格
set @a3=rtrim(ltrim(@a3))
set @i=charindex('|||',@a3)
while @i>=1
begin
---第一条数据的话
if @j=0
begin
set @questionId=newid()
-------添加到问题列表中
set @content=left(@a3,@i-1)
set @j=@j+1
---获得任意一个用户
select top 1 @creatuser=account from member order by newid()
---获得任意一个地区
select top 1 @areaid=id from memberarea order by newid()
insert into question (ID,F_CATALOGID,F_AREAID,TITLE,CONTENT,POSTUSER,createuser)
values (@questionId,@a2,@areaid,@a1,@content,@creatuser,@creatuser)
end
---如果不是第一条记录,那就是问题的回复
else
begin
-------添加回复问题的表中
---获得任意一个用户
select top 1 @replyAccount= account,@replyMembeId=id from member order by newid()
--一年内的随机时间
set @postTime=dateadd(day, -cast(ceiling(rand() *365) as int),convert(char(50),getdate(),20))
insert into QUESTIONREPLY (F_QUESTIONID,TITLE,CONTENT,REPLYUSER,CREATEDATE,replydate,createuser,posta,postb)
values (@questionId,@a1,left(@a3,@i-1),@replyAccount,@postTime,@postTime,@replyMembeId,cast(ceiling(rand() *2) as int)-1,cast(ceiling(rand() *2) as int)-1)
end
set @a3=substring(@a3,@i+3,len(@a3)-@i)
set @i=charindex('|||',@a3)
end
if @a3<>'/'
begin
if @j=0
begin
-------只有一条,添加到问题列表中
---获得任意一个用户
select top 1 @creatuser=account from member order by newid()
---获得任意一个地区
select top 1 @areaid=id from memberarea order by newid()
set @questionId=newid()
insert into question (id,F_CATALOGID,F_AREAID,TITLE,CONTENT,POSTUSER,createuser)
values (@questionId,@a2,@areaid,@a1,@a3,@creatuser,@creatuser)
end
else
begin
-------添加回复问题的表中
---获得任意一个用户
select top 1 @replyAccount= account,@replyMembeId=id from member order by newid()
--一年内的随机时间
set @postTime=dateadd(day, -cast(ceiling(rand() *365) as int),convert(char(50),getdate(),20))
insert into QUESTIONREPLY (F_QUESTIONID,TITLE,CONTENT,REPLYUSER,CREATEDATE,replydate,createuser,posta,postb)
values (@questionId,@a1,@a3,@replyAccount,@postTime,@postTime,@replyMembeId,cast(ceiling(rand() *2) as int)-1,cast(ceiling(rand() *2) as int)-1)
end
end
fetch next from test into @a1,@a2,@a3 ,@a4
end
close test
deallocate test
execute doTable
select 内容 from view1
select count(*) from question
select count(*) from questionreply
delete from question
delete from questionreply
相关文章推荐
- 关于在存储过程中使用游标操作数据库
- 关于MSSQL存储过程中使用游标的一个小例子(学习)
- mysql 数据库 简单存储过程游标使用
- Oracle中 关于数据库存储过程和存储函数的使用
- MySQL中关于行转列的存储过程的写法(使用游标)
- 关于codesmith的一点使用--自动生成数据库中所有表的存储过程使用模板
- Oracle中 关于数据库存储过程和存储函数的使用
- 在SqlServer存储过程中使用Cursor(游标)操作记录
- 在SqlServer存储过程中使用Cursor(游标)操作记录
- SqlServer存储过程中使用Cursor(游标)操作记录
- MySQL中关于行转列的存储过程的写法(使用游标)
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Oracle中 关于数据库存储过程和存储函数的使用
- 在SqlServer存储过程中使用Cursor(游标)操作记录
- 何时使用数据库存储过程
- Mysql存储过程优化——使用临时表代替游标
- MySql 存储过程游标使用示例
- 存储过程中使用游标嵌套
- MySQL存储过程跨数据库操作同步数据
- Mysql存储过程优化——使用临时表代替游标(转)