----存储过程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的结果集
我试了很多的方法都不行
@content varchar(500)
as
begin
select * from permit_msg where billid in (select billid from permit_msg where content like '%'+@content+'%')
end
go只需要一个过程就可以了
@content varchar(500)
as
begin
select * from permit_msg where content like '%'+@content+'%'
end
go
--调用:
exec pro_bb 'test'再看了一下,好像这样就可以了吧
declare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
alter procedure pro_bb
as
begin
declare @billid table(billid int)
insert @billid exec pro_aaa 'tests'
select a.* from permit_msg a,@billid b where a.billid=b.billid
end
go
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
--调用:
declare @billid varchar(500)
exec pro_aaa 'test',@billid out
select @billid --这里可以看到输出值如果主要目的是为了得到过程的输出值,可以参考这样。
我是想要把查询出来的billid作为在第二个存储过程 @billi变量的值要等于select @billid 这个值
这个不行啊
我要的要在第二个存储过程中的变量@billid获取第一个存储过过程中的结果集
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
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
http://hi.baidu.com/hnczliaoxueping/blog/item/000a640bdd441e32b0351d52.html
谢谢.....
那个问题是解决了
但是现在又出现一个问题就是我返回的@billid有个时候就是按
1230,1246,1269这种正确的返回,有个时候满足条件得到的@billid
则返回就是,1271,1272,1273,1278,1279,1280,多了一个,是不是在这里判断的时候
select @billid=isnull(@billid+',','')+ltrim(billid)
有问题
谢谢
我检查出来问题了
问题在于如果根据条件获取的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也还是不行啊
1.如果串真的有那么长,那建议用临时表的方式处理
2.你不管把变量设多长,都会截掉,是否你看到的只是一种假象,你在查询分析器点“查询-->查询选项-->结果-文本-->每列中显示的最大字符数(把256改为8192)”,再看看。
第二种方法
我试了还是不行
第一种方法的话,我在第一个存储过程中已经是用临时表的方式获取billid了
在第二个存储过程我得通过第一个存储过程获取billid的值,保存在变量里面
当成条件去查询,也许我还没有完全明白你的意思吧
还是请你多多的指教!
我这里没有你讲的第二种方法
set @a=(select count(*) a from tb) ;
select @a+1