使用变量@user创建临时表

时间:2019-06-03 16:08:33

标签: sql-server

我有一个存储过程,该过程接收一个变量@user并创建一个名为@user的临时表,例如#mrossi。

declare @user nvarchar(100)
    ,@sql nvarchar(100)
set @sql = 'CREATE TABLE #'+@user+'(Tipo nvarchar(10),Val float)'
exec(@sql)

执行结束没有问题,但是未创建表。

我怎么了?

2 个答案:

答案 0 :(得分:0)

一旦存储过程被调用,临时表就会“脱离作用域”,并在您回到任何调用过程时被删除。

您可能已经注意到,在SSMS中,在创建临时表的窗口中调用代码后,#temp表确实会挂起。

您可以试验## temp表,这些表一直存在,直到创建它们的连接关闭。但是请注意,它们对于所有连接都是全局可见的。

declare @user nvarchar(100), @sql nvarchar(100);

SET @user = 'don';

SET @user = @user + REPLACE(cast(newid() as nvarchar(100)),'-','');
print @user;
set @sql = 'CREATE TABLE ##'+@user+' (Tipo nvarchar(10),Val float)'
exec(@sql);
print @@error;
set @sql = 'INSERT ##' + @user + ' VALUES(''foo'',3.14)'
exec(@sql);

set @sql = 'SELECT * FROM ##' + @user;
exec(@sql);

答案 1 :(得分:0)

已创建表,但是您无法在创建表的脚本执行范围之外访问该表或变量。您可以按如下方式访问该表-

declare @user nvarchar(100)
,@sql nvarchar(100)

SET @user = 'Test'
SET @sql = 'CREATE TABLE #'+@user+'(Tipo nvarchar(10),Val float)

SELECT * FROM #test'

EXEC(@sql)