sql 存储过程,将结果集赋给变量,

liaoxueping 2010-05-08 05:01:12

----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500)
as
begin
declare @msg_billid varchar(200)
create table #tab_content(
billid varchar(800)
)
set nocount on
insert #tab_content
exec ('select billid from permit_msg where content like ''%'+@content+'%''' )
set nocount off
select billid from permit_msg where billid in (select billid from #tab_content)
end
go

----存储过程2,获取存储过程pro_aaa的结果集,
alter procedure pro_bb
as
begin
declare @billid varchar(200)
exec @billid= pro_aaa 'tests'
select * from permit_msg where billid in (@billid)
end
go



我想要存储过程pro_bb中的变量@billid获取存储过程pro_aaa的结果集,如 1 3 5 的 billid
在执行的时候SQL select * from permit_msg where billid in (1,3,5)
上面说法只是讲我的存储过程pro_bb简单化其实有很多的判断条件,我想要问的就是怎样去实现,我想要获取
存储过程1的结果集
我试了很多的方法都不行




...全文
1678 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
年经的萝卜 2010-09-25
  • 打赏
  • 举报
回复
declare @a varchar(100);
set @a=(select count(*) a from tb) ;
select @a+1
liaoxueping 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 htl258 的回复:]
引用 20 楼 liaoxueping 的回复:
引用 18 楼 liaoxueping 的回复:
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@bill……
[/Quote]



问题已经解决了
我没有用两个存储过程
我将两个存储过程放在了一个存储过程
将第一个存储过程的内容放在第一二个存储过程
放在一个临时表里面
问题解决
非常感谢
把分给你了
幸运的意外 2010-05-10
  • 打赏
  • 举报
回复
将结果集放到一个临时表里吧.
yujunlin32167 2010-05-10
  • 打赏
  • 举报
回复
收藏学习一下...
liaoxueping 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 htl258 的回复:]
引用 20 楼 liaoxueping 的回复:
引用 18 楼 liaoxueping 的回复:
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@bill……
[/Quote]


第二种方法不行
请你指教第一种方法!
谢谢
liaoxueping 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 htl258 的回复:]
引用 20 楼 liaoxueping 的回复:
引用 18 楼 liaoxueping 的回复:
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@bill……
[/Quote]

我这里已经用了你讲的第二种方法!
liaoxueping 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 liaoxueping 的回复:]
引用 18 楼 liaoxueping 的回复:
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
b……
[/Quote]

第二种方法
我试了还是不行
第一种方法的话,我在第一个存储过程中已经是用临时表的方式获取billid了
在第二个存储过程我得通过第一个存储过程获取billid的值,保存在变量里面
当成条件去查询,也许我还没有完全明白你的意思吧
还是请你多多的指教!


我这里没有你讲的第二种方法
htl258_Tony 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 liaoxueping 的回复:]
引用 18 楼 liaoxueping 的回复:
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
b……
[/Quote]
RE:
1.如果串真的有那么长,那建议用临时表的方式处理
2.你不管把变量设多长,都会截掉,是否你看到的只是一种假象,你在查询分析器点“查询-->查询选项-->结果-文本-->每列中显示的最大字符数(把256改为8192)”,再看看。
liaoxueping 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liaoxueping 的回复:]
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
begin
declare @msg_billid ……
[/Quote]



我检查出来问题了
问题在于如果根据条件获取的billid如果60多个的话,就会自动截取掉后面的并没有全部都显示出来
后来我把@billid varchar(500)弄成@billid varchar(5000)之后还是没有全部出来而是
1230,1246,1269,1271,1272,1273,1278,1279,1280,1281,1282,1283,1284,1285,1286,1288,1289,1290,1291,1292,1299,1300,1301,1302,1303,1325,1333,1334,1354,1400,1401,1418,1441,1507,1511,1512,1517,1518,1519,1523,1525,1526,1527,1528,1529,1530,1532,1542,1543,1544,1545,1,也截取掉了。为什么会有这样的情况
我想把@billid varchar(500)弄成text类型再转换成varchar(8000)或者5000也还是不行啊
htl258_Tony 2010-05-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liaoxueping 的回复:]
引用 15 楼 liaoxueping 的回复:
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
begin
declare @msg_billid ……
[/Quote]那应该是你的条件的问题,仔细检查一下变量后面的WHERE条件
liaoxueping 2010-05-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liaoxueping 的回复:]
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
begin
declare @msg_billid varchar(200)
create table……



我在这个页面中http://hi.baidu.com/hnczliaoxueping/blog/item/000a640bdd441e32b0351d52.html
---内容

if(@content<>'')
begin
declare @billid varchar(200)
exec pro_aaa 'tests',@billid out
select @billid
set @strSql_msg=@strSql_msg+' and billid in ('+@billid+')'
end
else
begin
set @strSql_msg=@strSql_msg
set @strSql_pop=@strSql_pop
end
[/Quote]

那个问题是解决了
但是现在又出现一个问题就是我返回的@billid有个时候就是按
1230,1246,1269这种正确的返回,有个时候满足条件得到的@billid
则返回就是,1271,1272,1273,1278,1279,1280,多了一个,是不是在这里判断的时候
select @billid=isnull(@billid+',','')+ltrim(billid)
有问题
谢谢





zhangsong841 2010-05-08
  • 打赏
  • 举报
回复
用函数吧,函数可返回一个值或者一张表,
具体用法网上搜索下。。。
htl258_Tony 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liaoxueping 的回复:]
引用 11 楼 htl258 的回复:
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
begin
declare @msg_billid varchar(200)
create table……
[/Quote]说说不对的具体情况,有什么提示
liaoxueping 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 htl258 的回复:]
SQL code
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
begin
declare @msg_billid varchar(200)
create table #tab_content(
bil……
[/Quote]
我用简单例子的时候是OK
但是放到我那个正式的存储过程就不对了!
htl258_Tony 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liaoxueping 的回复:]
引用 10 楼 liaoxueping 的回复:
我要将得到的billid结果集放在另外一个存储过程中的变量中!



这个SQL在
http://hi.baidu.com/hnczliaoxueping/blog/item/000a640bdd441e32b0351d52.html
谢谢.....
[/Quote]
那些好像没问题吧
liaoxueping 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liaoxueping 的回复:]
我要将得到的billid结果集放在另外一个存储过程中的变量中!
[/Quote]


这个SQL在
http://hi.baidu.com/hnczliaoxueping/blog/item/000a640bdd441e32b0351d52.html
谢谢.....
永生天地 2010-05-08
  • 打赏
  • 举报
回复
试一下看

----存储过程2,获取存储过程pro_aaa的结果集,
alter procedure pro_bb
as
begin
declare @billid varchar(200)
create table #tab_content(
billid varchar(800)
)
insert into #tab_content(billid)
exec pro_aaa 'tests'
select * from permit_msg where billid in (select billid from #tab_content )
end
go
htl258_Tony 2010-05-08
  • 打赏
  • 举报
回复
----存储过程pro_aaa,获取满足条件的billid即主键ID
alter procedure pro_aaa
@content varchar(500) ,
@billid varchar(500) out
as
begin
declare @msg_billid varchar(200)
create table #tab_content(
billid varchar(800)
)
set nocount on
insert #tab_content
exec ('select billid from permit_msg where content like ''%'+@content+'%''' )
set nocount off
select @billid=isnull(@billid+',','')+ltrim(billid)
from permit_msg
where billid in (select billid from #tab_content)
end
go
----存储过程2,获取存储过程pro_aaa的结果集,
alter procedure pro_bb
as
begin
declare @billid varchar(200)
exec pro_aaa 'tests',@billid out
exec('select * from permit_msg where billid in ('+@billid+')')
end
go
liaoxueping 2010-05-08
  • 打赏
  • 举报
回复
我要将得到的billid结果集放在另外一个存储过程中的变量中!
liaoxueping 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huminghua 的回复:]
select一下返回一个你想要的东西啊!嘿嘿!有请高手来回答!
[/Quote]

这个不行啊
我要的要在第二个存储过程中的变量@billid获取第一个存储过过程中的结果集
加载更多回复(8)

22,210

社区成员

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

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