----存储过程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的结果集
我试了很多的方法都不行

解决方案 »

  1.   

    select一下返回一个你想要的东西啊!嘿嘿!有请高手来回答!
      

  2.   

    alter procedure pro_bb
    @content varchar(500)
    as
    begin
    select * from permit_msg where billid in (select billid from permit_msg where content like '%'+@content+'%')
    end  
    go只需要一个过程就可以了
      

  3.   

    alter procedure pro_bb
    @content varchar(500)
    as
    begin
    select * from permit_msg where content like '%'+@content+'%'
    end  
    go
    --调用:
    exec pro_bb 'test'再看了一下,好像这样就可以了吧
      

  4.   

    输出参数 
    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 
      

  5.   

    try
    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
      

  6.   

    ----存储过程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
    --调用:
    declare @billid varchar(500)
    exec pro_aaa 'test',@billid out
    select @billid --这里可以看到输出值如果主要目的是为了得到过程的输出值,可以参考这样。
      

  7.   

    我的主要目的不是为了查询显示
    我是想要把查询出来的billid作为在第二个存储过程 @billi变量的值要等于select @billid 这个值
      

  8.   


    这个不行啊
    我要的要在第二个存储过程中的变量@billid获取第一个存储过过程中的结果集
      

  9.   

    我要将得到的billid结果集放在另外一个存储过程中的变量中!
      

  10.   

    ----存储过程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
      

  11.   

    试一下看----存储过程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
      

  12.   

    这个SQL在
    http://hi.baidu.com/hnczliaoxueping/blog/item/000a640bdd441e32b0351d52.html
    谢谢.....
      

  13.   


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

  14.   

    那应该是你的条件的问题,仔细检查一下变量后面的WHERE条件
      

  15.   


    我检查出来问题了
    问题在于如果根据条件获取的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也还是不行啊
      

  16.   

    RE:
    1.如果串真的有那么长,那建议用临时表的方式处理
    2.你不管把变量设多长,都会截掉,是否你看到的只是一种假象,你在查询分析器点“查询-->查询选项-->结果-文本-->每列中显示的最大字符数(把256改为8192)”,再看看。
      

  17.   


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

  18.   

    declare @a varchar(100);
    set @a=(select count(*) a from tb) ;
    select @a+1