我现在是用游标动态生成临时表,遇到一个问题.
举例说明:
declare @strsql varchar(4000)
set @strsql='create table #Lanvasi( a varchar(100) )'exec (@strsql)select * from #Lanvasi-------------------
--出现错误提示
服务器: 消息 208,级别 16,状态 1,行 6
对象名 '#Lanvasi' 无效。这是怎么回事呢?
是不是临时表只存在exec运行的那个连接.运行完连接关闭,临时表就自动删除了吗
怎么样才能得到临时表
举例说明:
declare @strsql varchar(4000)
set @strsql='create table #Lanvasi( a varchar(100) )'exec (@strsql)select * from #Lanvasi-------------------
--出现错误提示
服务器: 消息 208,级别 16,状态 1,行 6
对象名 '#Lanvasi' 无效。这是怎么回事呢?
是不是临时表只存在exec运行的那个连接.运行完连接关闭,临时表就自动删除了吗
怎么样才能得到临时表
set @strsql='create table #Lanvasi( a varchar(100) )'
exec (@strsql+' select * from #Lanvasi')
set @strsql='create table #Lanvasi( a varchar(100) )'exec (@strsql + 'select * from #Lanvasi')
我现在程序的目的是在程序中创建一个connection,然后根据一个表生成临时表.
再返回connection.这样就可以在程序中使用这个临时表,
set @strsql='insert into #Lanvasi ...'exec (@strsql)select * from #Lanvasi
set @strsql='create table #Lanvasi( a varchar(100) )'
exec (@strsql+' select * from #Lanvasi')
set @strsql='create table #Lanvasi( a varchar(100) )'
exec (@strsql)
到此 ,#Lanvasi的生命周期已经结束
所以在下面引用的时候会提示 对象名 '#Lanvasi' 无效。
select * from #Lanvasi上面的几位已给出正确答案
好像以上几位说的不对吧?
!!!!!
——可能原因是:你执行建表的一段语句所在的数据库是什么?
比如:
use master
go
declare @strsql varchar(4000)
set @strsql='create table #Lanvasi( a varchar(100) )'
exec (@strsql)
go
这样临时表就是建在master库里的,要进行查询,则
use master
go
select * from #Lanvasi
go
或者是select * from master..#Lanvasi
create table #Lanvasi( a varchar(100) )declare @strsql varchar(4000)
set @strsql='insert into #Lanvasi ...'exec (@strsql)select * from #Lanvasi
-----------------------------------------
create table #Lanvasi( a varchar(100) )
这个是动态生成的,是从一个表中取得数据然后生成表名,字段
declare @strsql varchar(4000)
declare @tablename varchar(200)
set @strsql='create table ##'+tablename +'( a varchar(100) )'
exec (@strsql)
GO