请问存储过程中表名怎么样用变量来替代??
if object_id('dbo.c_dq') is not null
drop procedure dbo.c_dq
go
CREATE PROCEDURE dbo.c_dq
@ssdq varchar(20) = null
AS
declare @mydq nvarchar(20)
declare @temp_tabname nvarchar(1000)
declare @temp_msdm nvarchar(20)
declare @exec_str nvarchar(2000)
DEALLOCATE dq_cursor
declare dq_cursor scroll cursor for select msdm from hcszhmc where lsdq='tb'
open dq_cursor
FETCH first from dq_cursor into @temp_msdm
if @@FETCH_STATUS=0
begin
declare @temp_datas table
(id bigint identity(1,1) not null,
lsdq nvarchar(20) not null,
msdm nvarchar(20) not null,
rq smalldatetime not null,
je money default(0))
while @@FETCH_STATUS =0
begin
FETCH NEXT FROM dq_cursor INTO @temp_msdm
set @temp_tabname=rtrim(@temp_msdm)+'..hrc21'
insert @temp_datas (lsdq,msdm,rq,je) select @ssdq,ddm,rq,je from @temp_tabname
end
end
else
print '.............................'
close dq_cursor
DEALLOCATE dq_cursor
select * from @temp_datas
GO
/*********************
insert @temp_datas (lsdq,msdm,rq,je) select @ssdq,ddm,rq,je from @temp_tabname
出错:
服务器: 消息 137,级别 15,状态 2,过程 c_dq,行 27
必须声明变量 '@temp_tabname'。
@temp_tabname若变成temp_tabname则存储过程可以被建立,当然执行的时候会出错,因为库中没有此表...:(
@temp_datas是存储过程中建立的临时存储记录集...
若我改成exec 'insert '+@temp_datas+' (lsdq,msdm,rq,je) select '+@ssdq+',ddm,rq,je from '+@temp_tabname
则出现如下错误:
服务器: 消息 137,级别 15,状态 2,过程 c_dq,行 26
必须声明变量 '@temp_datas'。
刚开始学存储过程...这个问题怎么解决呢?
需要建多个过程吗?