在存储过程怎样根据一个表(存放所要创建表的字段信息的表)动态创建一个临时表,并选择表中的所有内容(100分)

  • 主题发起人 主题发起人 meiguibao
  • 开始时间 开始时间
M

meiguibao

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)]在存储过程怎样根据一个表(存放所要创建表的字段信息的表)动态创建一个临时表,
并选择表中的所有内容,代码如下。可是在(select * from FenShuBiao)时出错。
代码如下:

CREATE PROCEDURE CreateFenShuBiao AS
begin
declare @BiaoZiDuan varchar(500) --表字段
declare cur_XiangMuJiBieBiao cursor keyset for select distinct 编号 from 项目级别表 for read only --项目级别表
declare @BianHao char(2) --编号
declare @JiLuGeShu int --记录个数
select @BiaoZiDuan = 'create table #FenShuBiao (人员编号 char(9),职称 char(2) , 医院级别 char(2),' +
'达标 bit , 原因 char(100),'

open cur_XiangMuJiBieBiao
fetch first from cur_XiangMuJiBieBiao into @BianHao
select @BiaoZiDuan = @BiaoZiDuan + 'F'+@BianHao + space(1) + 'numeric(10,1),'

set @JiLuGeShu = 0
while @JiLuGeShu < @@Cursor_rows - 1
begin
fetch next from cur_XiangMuJiBieBiao into @BianHao
select @BiaoZiDuan = @BiaoZiDuan + 'F' + @BianHao + space(1) + 'numeric(10,1),'
set @JiLuGeShu = @JiLuGeShu + 1
end
close cur_XiangMuJiBieBiao
deallocate cur_XiangMuJiBieBiao
select @BiaoZiDuan = left(@BiaoZiDuan,len(@BiaoZiDuan) - 1)
select @BiaoZiDuan = @BiaoZiDuan + ')'
exec (@BiaoZiDuan)
select * from FenShuBiao ----- 出错的地方 -----
end
GO
 
exec('select * from FenShuBiao')
 
你创建的#FenShuBiao和你的select * from #FenShuBiao 不再一个作用域,应该把
select * from #FenShuBiao 加在@biaoziduan的动态sql语句中一起执行
 
怎样才能让他们在一个作用域中呢?
戓者
加在@biaoziduan的动态sql语句中一起执行 的代码 怎么写?

万分感谢!
 
select @BiaoZiDuan = @BiaoZiDuan + ' select * from #FenShuBiao'
exec (@BiaoZiDuan)
 
'create table #FenShuBiao ‘
能建成 #FenShuBiao 吗?

若能建表 #FenShuBiao
select * from FenShuBiao ?出错正常吧。

改成'create table FenShuBiao可以吗?



 
先在外部写CREATE TABLE #FenShuBiao (X char(1))
再在EXECUTE()中写'ALTER TABLE ...'可以成功。
EXECUTE()中生成的临时表是实际存在的,但存储过程并不这么认为(编译都不会通过),
因此,应显式地在外部生成一张临时表(针对你的问题,随便什么内容都行),再在EXECUTE()中作各种
处理,这样,在外部就可以对其操作了。
我的存储过程都是这么处理的。
 
多人接受答案了。
 
后退
顶部