Сравните следующие хранимые процедуры:
CREATE PROCEDURE testProc1
AS
SELECT * INTO #temp FROM information_schema.tables
SELECT * FROM #temp
GO
CREATE PROCEDURE testProc2
AS
EXEC('SELECT * INTO #temp FROM information_schema.tables')
SELECT * FROM #temp
GO
Теперь, если я запускаю testProc1
, он работает, а #temp
, кажется, существует только во время этого вызова. Однако testProc2
, похоже, вообще не работает, так как вместо этого я получаю сообщение об ошибке Invalid object name '#temp'
.
Почему такое различие и как я могу использовать временную таблицу для SELECT * INTO
, если имя исходной таблицы является параметром хранимой процедуры и может иметь произвольную структуру?
Обратите внимание, что я использую Microsoft SQL Server 2005.