Ошибка неверного имени объекта для временной таблицы, определенной в хранимой процедуре - PullRequest
1 голос
/ 17 июня 2019

Я написал хранимую процедуру, которая выполняет хранимую процедуру, и полученный результат должен быть сохранен в локальной временной таблице. Хранимая процедура создается без каких-либо ошибок. Но когда я пытаюсь выполнить хранимую процедуру, она возвращает ошибку, что временная таблица является недопустимым именем объекта.

CREATE PROCEDURE .dbo.CalulateETFWeights
-- Add the parameters for the stored procedure here
@CURR_DATE varchar(255),
@ETF_DATE datetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

--Select max(ETF_DATE) into @ETF_DATE from .dbo.ETF_LIST_V --where ETF_LOAD_DATE = @CURR_DATE

-- Insert statements for procedure here
SELECT TqaSecCode, GlobalSecurity, Cusip
into #tempetftable
from .map.v_get_tqa_security where cusip in (select distinct ETF_CUSIP from .dbo.ETF_LIST_V where ETF_LOAD_DATE = 'Mon Jun 17 14:15:09 BST 2019')


Insert into #tempPriceTable
exec .tqaif.sp_get_ds_price_usd
    @sourceTable = '#tempetftable',
    @startDate = '20181219',
    @endDate = '20181219',
    @frequency = 'D'


Insert into .dbo.ETFComponentWeights

Select 
    C.ETF_CUSIP as W_CAL_CUSIP,
    C.STK_IDX as W_CAL_COMP,
    C.STK_QUANT as W_CAL_SHARES,
    CP.VALUE as W_CAL_PRICE,
    (C.STK_QUANT  * CP.VALUE_) as W_CAL_MVAL,
    (C.STK_QUANT * CP.VALUE_)/SUM(C.STK_QUANT * CP.VALUE) over (partition by C.ETF_CUSIP) as W_CAL_WEIGHT,
    @ETF_DATE as W_CAL_DATE

from .dbo.ETF_COMP_V C
    inner join (Select E.CUSIP, P.Value_ from #tempPriceTable P inner join #tempetftable E on P.TqaSecCode = E.TqaSecCode) CP
    on C.ETF_CUSIP = CP.CUSIP

Итак, я получаю ошибку Неверное имя объекта "#tempPriceTable".

Я не понимаю, почему это не работает? Кто-нибудь может подсказать, что я тут делаю не так? и почему #tempetftable работает нормально. Но #tempPriceTable здесь не работает в этом сценарии?

1 Ответ

1 голос
/ 17 июня 2019

Синтаксис:

SELECT TqaSecCode, GlobalSecurity, Cusip
into #tempetftable

создает новую временную таблицу и затем вставляет данные в эту новую таблицу.

Синтаксис:

Insert into #tempPriceTable
exec .tqaif.sp_get_ds_price_usd

является обычной "вставкой"в "оператор, который добавляет строки в существующую таблицу.Чтобы использовать этот синтаксис, вам нужно заранее создать пустую временную таблицу с правильной схемой.Так что вам нужно сделать что-то вроде:

CREATE TABLE #tempPriceTable (your schema)
Insert into #tempPriceTable
exec .tqaif.sp_get_ds_price_usd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...