日期:2014-05-18  浏览次数:20504 次

问个存储过程,动态创建表的过程
假设是这样的,我在存储过程里面这么写的:

SQL code
exec('create table #table
           (
           whID int,
           placeID int
            )')


exec('select * from #table')


这样就报错了!说是#table不存在? 这怎么回事啊?临时表就没了吗?

------解决方案--------------------
SQL code

go
declare @str varchar(max)
set @str=''
set @str='create table test(
           whID int,
           placeID int)'
exec(@str)

go
declare @str varchar(50)
set @str=''
set @str='select * from  test'
exec(@str)


这样可以,但是不能创建临时表

------解决方案--------------------
临时表#的生存周期是当前程序块,你通过exec执行创建的临时表在exec执行完成后就被销毁了,所以查询不到了。可以创建全局的临时表##这样就可以了
SQL code

exec('create table ##table
           whID int,
           placeID int')


exec('select * from ##table')