我有一个存储过程,该过程接收一个变量@user
并创建一个名为@user
的临时表,例如#mrossi。
declare @user nvarchar(100)
,@sql nvarchar(100)
set @sql = 'CREATE TABLE #'+@user+'(Tipo nvarchar(10),Val float)'
exec(@sql)
执行结束没有问题,但是未创建表。
我怎么了?
答案 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)