日期:2014-05-17  浏览次数:20387 次

创建临时表的困惑
小弟目前有个问题 要用SQL临时才能解决

就是我要设计一个在前端给予这个临时表命名的表名后

再对这个表进行查询的一些作业

我试着写下以下的代码:



SQL code

create proc 新增谓词表
(
@user varchar(20)
)
as 
create table #@user谓词表(id int,Property nvarchar(100),Propertyvalue nvarchar(200),defaultelement nvarchar(200))
go

declare @user varchar(20)
set @user='我是'
exec 新增谓词表 @user




之后查询这个表 

select * from #我是谓词表  

select * from #@user谓词表

我下搜寻这个表的命令 都找不到这个表 请问这里该如何编写才能得到我的需求呢?


------解决方案--------------------
探讨
我不小心把declare @sql varchar(200) 改成了 @sql varchar(20)
我改回来之后 重新编译 创造正常的表是可以的 但似乎不能创造临时表
我要的功能是要能创造临时表
这边我直接改写成

SQL code

declare @sql varchar(200)
set @sql='create table #'+@user+N'谓词表(id int,……

------解决方案--------------------
临时表不能这样用。

临时表有作用于范围,在存储过程中创建的临时表,只能在存储过程内部使用,再调用存储过程的地方是看不到里面创建的临时表的。
就像一个函数内的局部变量一样,再这个函数外是不能访问的。

你可以用全局临时表,表名用 ##我是谓词表

把你的代码中的 # 改成 ##