第一个存储过程如下:
CREATE PROCEDURE queryproc
@table varchar(255),
@where1 varchar(255),
@where2 varch(255)
AS
declare @sql
set @sql='select * from '+@table+' where '+@where
+' union all '
+'select * from '+@table+' where '+@whereexec(@sql)
go第二个存储过程是通用分页存储过程。CREATE PROCEDURE paging
@table varchar(255) -- 表名
AS
程序体第一个存储过程的执行结果怎样才能成为第二个存储过程的输入?

解决方案 »

  1.   

    第一个存储过程里将结果以OUTPUT参数返回~然后在第二个存储过程中定义第一个存储过程中返回的结果的数据类型,并且接收
      

  2.   

    to resen_tu() :
    最近才接触存储过程,能不能详细些?
      

  3.   

    要用临时表CREATE PROCEDURE paging
    @table varchar(255) -- 表名
    AS...
    create table #t (
    ...
    )
    insert #t exec queryproc ..参数.....
      

  4.   

    一:将存储过程返回值插入到临时表中
    create table tbtest(id int identity(1,1),dt datetime default getdate())
    insert tbtest default values
    insert tbtest default values
    insert tbtest default values
    GO
    create proc sp1
    as
          select * from tbtest
    GO
    create proc sp2
    as
          create table #t(id int,dt datetime)
          insert into #t exec sp1      /*将存储过程1返回值写入临时表中*/
          select * from #t
          drop table #t
    GOEXEC sp2drop table tbtest
    drop proc sp1,sp2
    ---------------------------------------------------------------------------------
    二:   CREATE PROCEDURE 帮助的例子E.
    E. 使用 OUTPUT 游标参数
    OUTPUT 游标参数用来将存储过程的局部游标传递回调用批处理、存储过程或触发器。首先,创建以下过程,在 titles 表上声明并打开一个游标:USE pubs
    IF EXISTS (SELECT name FROM sysobjects 
          WHERE name = 'titles_cursor' and type = 'P')
    DROP PROCEDURE titles_cursor
    GO
    CREATE PROCEDURE titles_cursor @titles_cursor CURSOR VARYING OUTPUT
    AS
    SET @titles_cursor = CURSOR
    FORWARD_ONLY STATIC FOR
    SELECT *
    FROM titlesOPEN @titles_cursor
    GO接下来,执行一个批处理,声明一个局部游标变量,执行上述过程以将游标赋值给局部变量,然后从该游标提取行。USE pubs
    GO
    DECLARE @MyCursor CURSOR
    EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
       FETCH NEXT FROM @MyCursor
    END
    CLOSE @MyCursor
    DEALLOCATE @MyCursor
    GO
      

  5.   

    CREATE PROCEDURE paging
    @table varchar(255) -- 表名
    AS...
    create table #t (
    ...
    )
    insert #t exec queryproc ..参数..
    ...
    drop table #t
      

  6.   

    CREATE PROCEDURE paging
    @table varchar(255) -- 表名
    AS...
    create table #t (
    ...
    )
    insert #t exec queryproc ..参数..
    declare @sql
    set @sql='select * from '+#t
    exec(@sql)
    提示#t列名无效,怎么修改?
      

  7.   

    上面有点小错误,应该是:
    CREATE PROCEDURE paging
    @table varchar(255) -- 表名
    AS...
    create table #t (
    ...
    )
    insert #t exec queryproc ..参数..
    declare @sql varchar(500)
    set @sql='select * from '+#t
    exec(@sql)
    提示#t列名无效,怎么修改?
      

  8.   

    把set @sql='select * from '+#t
    改为
    set @sql='select * from '+ '#t'

    set @sql='select * from #t '
    或直接执行select * from #t.
    错误的原因是"+"加号是用来连接字符串的,所以加号前后都必须是字符串,而楼主写的
    set @sql='select * from '+#t
    中,#t是临时表对象名,只有用单引号把临时表对象名括起来,才是字符串,即'#t',这样才能和之前的字符串连接.