2017-02-23 40 views
1

У меня есть временная таблица, заполненная множеством целых чисел. Мне нужно передать эту заполненную временную таблицу в другую хранимую процедуру, однако SQL не позволяет вам передавать временную таблицу в другую хранимую процедуру (не в любом случае).Не удается передать временную таблицу из одной хранимой процедуры в другую с ошибкой «Должен объявить скалярную переменную»

Я создал ТИП, чтобы обойти это как https://msdn.microsoft.com/en-us/library/bb510489.aspx, но intellisense жалуется, что таблица, использующая этот пользовательский тип, не является скалярной переменной.

CREATE TYPE TableType AS TABLE 
(
    TheIds INT 
); 

DECLARE @IDsThatNeedToPass AS TableType 


INSERT INTO @IDsThatNeedToPass 
SELECT . . . 
. . . 

EXEC OtherStoredProcedure @IDsThatNeedToPass 

For some reason the EXEC command says that I 'Must declare the scalar variable "@IDsThatNeedToPass"' 

In addition to this, my OtherStoredProcedure cannot find my user-defined type. 

CREATE PROCEDURE [dbo].[OtherStoredProcedure] 
(
    @TheIds TableType READONLY -- Complains that Parameter or variable '@TheIds' has an invalid data type 
) 
... 

Любые идеи, что может быть причиной этого? Я использую Microsoft SQL Server Management Studio 2014.

ответ

0
Refer below one format of temp tables 

**Table variables (DECLARE @t TABLE)** are visible only to the connection 
that creates it, and are deleted when the batch or stored procedure ends. 

**Local temporary tables (CREATE TABLE #t)** are visible only to the 
connection that creates it, and are deleted when the connection is closed. 

**Global temporary tables (CREATE TABLE ##t)** are visible to everyone, and 
are deleted when all connections that have referenced them have closed. 

**Tempdb permanent tables (USE tempdb CREATE TABLE t)** are visible to 
everyone,and are deleted when the server is restarted. 
Смежные вопросы