SQL Server(存储过程)临时表与滞后名称解析[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 hdaptechivan 的 blog

奇怪的事情发生了,创建这个过程顺利地通过,这里只是把临时表替换成了一个永久性表,并没做其他任何改变,难道sql server在乎创建的是临时表还是永久性表,呵呵?发生的事情似乎是这样的,在将过程插入syscomments之前(存储过程编译后存放于系统表syscomments) sql server参照临时表解析create table,也许你会说将临时表换成一个table类型的变量就不会出现这样的问题,可是事实是不行,数据类型table同样受此局限。似乎是从sql server 7.0开始,支持永久性表的滞后名称解析,但不支持临时表的滞后名称解析。但不管是哪一种情况,第一个代码都无法执行,下面采取一个迂回策略来解决这个问题,请看:

create proc testp @var int

as

create table #mytemp(k1 int identity)

if @var=1

    alter table #mytemp add c1 int

else

    alter table #mytemp add c1 varchar(2)

insert #mytemp default values

exec('select c1 from #mytemp')

go

在这里只创建表一次,然后修改它,注意`exec('select c1 from #mytemp')

这条语句是必要的,因爲新添加的列对于添加它的过程并非立即可见,如果去掉exec执行该过程时,将会显示这样的错误:

本文关键:SQL Server(存储过程)临时表与滞后名称解析
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top