请问存储过程中表名怎么样用变量来替代??
热门软件下载:
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。
刚开始学存储过程...这个问题怎么解决呢?
需要建多个过程吗?
推荐阅读
exec (insert + @temp_datas + (lsdq,msdm,rq,je) select + @ssdq +,ddm,rq,je from +@temp_tabname)
用动态sql
up
用动态sql语句,
表名不能使用变量.
用动态sql,如 caiyunxia(monkey) 所说那样.
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
create table #temp_datas
(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
exec(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
相关评论