存储过程中操作结果集

DiscussQuestions 2010-10-09 11:20:50
现在需要写一个存储过程
如:

create table user_info
(
uid int identity(1,1) primary key,
uname varchar(50)
)
go

insert into user_info values('张三')
insert into user_info values('李四')
insert into user_info values('王五')
insert into user_info values('赵六')
insert into user_info values('陈七')
go


create proc sp_operatordata
@ids
as
declare @sql varchar(4000)
。。。。。。--省略部分
go


我需要达到的目的,当执行这个存储过程,传入参数(1,3,5) 然后在存储过程里面查询出结果,
我需要遍历操作这个结果集,然后通过判断取出我想要的数据,最后执行其它的语句
如:存储过程中查询出uid为1,3,5的用户,然后操作查询结果,将uid为3、5的用户过滤出来

...全文
94 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wufeng4552 的回复:]

引用 7 楼 zsh0809 的回复:
用function就可以了:

SQL code
CREATE FUNCTION proc_Test(strID AS VARCHAR(20))
RETURNS ##TMP TABLE(....) -----全局定义临时表的表结构
AS
BEGIN
DECLARE @SQL AS VARCHAR(4000)
SET @SQL='SELE……
[/Quote]
恩,是的,谢谢水锅。
DiscussQuestions 2010-10-09
  • 打赏
  • 举报
回复
怎么不用游标解决这个问题呢,
目的:在存储过程中操作查询结果集
kevn 2010-10-09
  • 打赏
  • 举报
回复
插到临时不行?
DiscussQuestions 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zsh0809 的回复:]
引用 2 楼 discussquestions 的回复:

引用 1 楼 sql2088 的回复:
SQL code
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0


不是这样的,可能是我描述有歧义
……
[/Quote]

游标有点慢,所以才想问有没有更好的方式,操作临时表不一样的要把数据弄出来吗
水族杰纶 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 discussquestions 的回复:]
引用 6 楼 wufeng4552 的回复:
引用 2 楼 discussquestions 的回复:
引用 1 楼 sql2088 的回复:
SQL code
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0……
[/Quote]
已经晕了
SQL2088 2010-10-09
  • 打赏
  • 举报
回复
放到临时表,如6楼水哥写的
水族杰纶 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zsh0809 的回复:]
用function就可以了:

SQL code
CREATE FUNCTION proc_Test(strID AS VARCHAR(20))
RETURNS ##TMP TABLE(....) -----全局定义临时表的表结构
AS
BEGIN
DECLARE @SQL AS VARCHAR(4000)
SET @SQL='SELECT * INTO ##TM……
[/Quote]
函数体内是不能执行动态语句的
DiscussQuestions 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wufeng4552 的回复:]
引用 2 楼 discussquestions 的回复:
引用 1 楼 sql2088 的回复:
SQL code
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0


不是这样的,可能是我描述有歧义
比……
[/Quote]


这样数据插入临时表一样的需要查询出来操作啊,效果一样啊,最终目的是要在存储过程里面操作查询出来的结果
vivai2010 2010-10-09
  • 打赏
  • 举报
回复
create proc sp_operatordata
@ids varchar(100)
as
begin
select * from user_info where @ids like '%'+convert(varchar(10),uid)+'%';
end
go
「已注销」 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 discussquestions 的回复:]

引用 1 楼 sql2088 的回复:
SQL code
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0


不是这样的,可能是我描述有歧义
比如 set @sql = 'select * from u……
[/Quote]
第一种方法:用游标操作结果集
第二张方法:将结果存放到临时表中,在操作临时表
jwwyqs 2010-10-09
  • 打赏
  • 举报
回复
create table user_info
(
uid int identity(1,1) primary key,
uname varchar(50)
)
go

insert into user_info values('张三')
insert into user_info values('李四')
insert into user_info values('王五')
insert into user_info values('赵六')
insert into user_info values('陈七')
go

create proc sp_operatordata
@sql varchar(4000)
as
begin
select * from user_info where @sql like '%'+uname+'%'
end

exec sp_operatordata '王五,赵六'
/*结果*/
uid nname
3 王五
4 赵六
「已注销」 2010-10-09
  • 打赏
  • 举报
回复
用function就可以了:
CREATE FUNCTION  proc_Test(strID AS VARCHAR(20))
RETURNS ##TMP TABLE(....) -----全局定义临时表的表结构
AS
BEGIN
DECLARE @SQL AS VARCHAR(4000)
SET @SQL='SELECT * INTO ##TMP FROM TB WHERE ID IN (' +strID +')'
EXEC @SQL
RETURN ##TMP
END
水族杰纶 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 discussquestions 的回复:]
引用 1 楼 sql2088 的回复:
SQL code
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0


不是这样的,可能是我描述有歧义
比如 set @sql = 'select * from us……
[/Quote]
如果这个结果是执行存储过程得到就将结果插入临时表

create table #temp(...)
insert #temp exec ...
水族杰纶 2010-10-09
  • 打赏
  • 举报
回复
create proc sp_operatordata
@ids varchar(100)
as
select * from user_info
where charindex(','+uid+',',','+@ids+',')>0
go

--or
create proc sp_operatordata
@ids varchar(100)
as
exec('select * from user_info
where uid in('+@ids+')')
go
vivai2010 2010-10-09
  • 打赏
  • 举报
回复
数据库中操作结果集?
用游标
jwwyqs 2010-10-09
  • 打赏
  • 举报
回复
create table user_info
(
uid int identity(1,1) primary key,
uname varchar(50)
)
go

insert into user_info values('张三')
insert into user_info values('李四')
insert into user_info values('王五')
insert into user_info values('赵六')
insert into user_info values('陈七')
go


create proc sp_operatordata
@ids
as
declare @sql varchar(4000)
select * from user_info where @sql like '%'+uname+'%'
go
DiscussQuestions 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sql2088 的回复:]
SQL code
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0
[/Quote]

不是这样的,可能是我描述有歧义
比如 set @sql = 'select * from user_info where uid in (' + ids + ')'

然后执行这条语句,会得到一个结果集,我如何操作这个结果集
SQL2088 2010-10-09
  • 打赏
  • 举报
回复
declare @sql varchar(4000)
set @sql ='1,3,5'
select * from user_info
where charindex(','+uid+',',','+@sql+',')>0

22,210

社区成员

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

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