Создать временную таблицу с переменной @user - PullRequest
0 голосов
/ 03 июня 2019

У меня есть процедура Store, которая получает переменную @user и создает временную таблицу с именем @user, например, # mrossi.

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

Выполнение завершается без проблем, но таблицане создан.

Что я не так?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Таблица создана, но вы не можете получить доступ к таблице или переменной вне области выполнения скрипта, в которой создана таблица. Вы можете получить доступ к таблице, как показано ниже-

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)
0 голосов
/ 03 июня 2019

после вызова хранимой процедуры временная таблица затем «выпадает из области видимости» и удаляется, когда вы возвращаетесь в какую-либо вызывающую процедуру.

Возможно, вы заметили, что в SSMS таблица #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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...