第一个存储过程如下:
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
程序体第一个存储过程的执行结果怎样才能成为第二个存储过程的输入?
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
程序体第一个存储过程的执行结果怎样才能成为第二个存储过程的输入?
最近才接触存储过程,能不能详细些?
@table varchar(255) -- 表名
AS...
create table #t (
...
)
insert #t exec queryproc ..参数.....
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
@table varchar(255) -- 表名
AS...
create table #t (
...
)
insert #t exec queryproc ..参数..
...
drop table #t
@table varchar(255) -- 表名
AS...
create table #t (
...
)
insert #t exec queryproc ..参数..
declare @sql
set @sql='select * from '+#t
exec(@sql)
提示#t列名无效,怎么修改?
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列名无效,怎么修改?
改为
set @sql='select * from '+ '#t'
或
set @sql='select * from #t '
或直接执行select * from #t.
错误的原因是"+"加号是用来连接字符串的,所以加号前后都必须是字符串,而楼主写的
set @sql='select * from '+#t
中,#t是临时表对象名,只有用单引号把临时表对象名括起来,才是字符串,即'#t',这样才能和之前的字符串连接.