+ -
当前位置:首页 → 问答吧 → 把表格名称作为存储过程的参数传递,求解决方法

把表格名称作为存储过程的参数传递,求解决方法

时间:2011-12-04

来源:互联网

我想通过存储过程求两个表格的交集

ALTER procedure [dbo].[p_CopyData]
@SrcTableName nvarchar(50),
@DestTableName nvarchar(50)
as
begin
declare @num int,@i int
exec('select '+@DestTableName+'.code into #t_code from '+@SrcTableName+' join '+@DestTableName+'
on '+@SrcTableName+'.code='+@DestTableName+'.code')
end


在exec语句后,我还有针对表格#t_code的一些操作,最后该表需要被删除,经试验,exec语句中用到的表格#t_code不能在exec语句外使用
有没有什么好的解决方法?

作者: liyongf   发布时间: 2011-12-04

改成如下面所示就行了:
SQL code
create table t1(code varchar(10))
insert into t1 select 'aaa'
insert into t1 select 'bbb'
create table t2(code varchar(10))
insert into t2 select 'bbb'
go
go
create procedure [dbo].[p_CopyData]
@SrcTableName nvarchar(50),
@DestTableName nvarchar(50)
as
begin
declare @num int,@i int
exec('insert into #t_code select '+@DestTableName+'.code from '+@SrcTableName+' join '+@DestTableName+'
on '+@SrcTableName+'.code='+@DestTableName+'.code')
end
go
create table #t_code(code varchar(10))
exec p_copyData 't1','t2'
select * from #t_code
/*
code
----------
bbb

(1 行受影响)
*/
go
drop table t1,t2,#t_code
drop procedure p_copydata


在存储过程内部生成的临时表在存储过程外部无法调用,但在调用存储过程前生成的临时表,可以在存储过程中向其中插入数据.

作者: qianjin036a   发布时间: 2011-12-04

存储过程内部定义的临时表的作用域只是当前这个存储过程中,临时表将在退出其作用域时由系统自动删除

作者: pengxuan   发布时间: 2011-12-04

#t_code--改为 ##t_code 全局临时表也可接收
建议
用临时表或表变量接收

作者: roy_88   发布时间: 2011-12-04

热门下载

更多