Могу ли я вставить в временную таблицу из SP без объявления таблицы? - PullRequest
0 голосов
/ 16 июня 2011

Вот мой код:

alter procedure test1 as
select DeptID,DeptName from Department
go

alter procedure test2 as
--Create Table #tab (DeptID INT, DeptName VARCHAR(255))
INSERT INTO #tab
exec test1
select * from #tab
drop table #tab
go

exec test2

Я получаю сообщение об ошибке типа "Недопустимое имя объекта #tab"

Если я добавлю в начале Create Table #tab (DeptID INT, DeptName VARCHAR(255)), то я не получу никакой ошибки.

Что не так в моем коде? Могу ли я заполнить временную таблицу из результатов хранимой процедуры, не объявляя временную таблицу и определения ее столбцов?

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

При загрузке временной таблицы из хранимой процедуры сначала необходимо СОЗДАТЬ таблицу.

Не существует прямого эквивалента

SELECT * INTO #temptable FROM AnotherTable

Непростая версия (читайтевсе о плохих вещах в «Как обмениваться данными между хранимыми процедурами» . И проще ) будет

SELECT * INTO #temptable FROM OPENQUERY(Loopback, 'exec test1')
1 голос
/ 16 июня 2011

Это потому, что ожидаемая Локальная временная таблица #tab не существует в сеансе.

Таким образом, создание таблицы не должно быть закомментированной строкой.если вы хотите обойтись без создания таблицы, то она должна выглядеть примерно так:

Alter procedure test2 
As
Set NoCount ON
IF OBJECT_ID('tempdb..#tab') IS NOT NULL
Begin
    Drop table #temp
End

SELECT DeptID, DeptName INTO #tab from Department
Select * from #tab
Drop table #tab

Go

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...