Получил ли значение временной таблицы вызов процедуры хранения? Поскольку @productTable является временной таблицей, могу ли я EXEC [dbo.FindProductTotal] и получить значение в [dbo.updateProductTotal]? Мне кажется, что это не работает. Если нет, есть ли способ получить значение из результата первой временной таблицы из выполнения во второй процедуре магазина? Реальное кодирование более сложное, поэтому я не знаю, как просто делать простые таблицы вставки и обновления. Мне нужно знать, будет ли этот способ кодирования работать для моего реального кодирования.SQL Server: использование временной таблицы
ALTER PROCEDURE dbo.FindProductTotal (@ProductID int)
AS
DECLARE @productTable TABLE (subProductID int, productCode varchar(10), productDesc varchar(25), chargeAmt money)
insert into @productTable
select productID, productCode, productDesc, chargeAmt
from product
where region='CA'
--calculate charge here
UPDATE @productTable
SET chargeAmt = (calculation here)
where ProductID = @ProductID
ALTER PROCEDURE dbo.updateProductTotal (@ProductID int)
AS
DECLARE @productTable TABLE (subProductID int, productCode varchar(10), productDesc varchar(25), chargeAmt money)
EXEC dbo.FindProductTotal @ProductID = 123456
UPDATE dbo.Manufacture
SET productChgAmt = p.chargeAmt
FROM @productTable p
WHERE productID = @ProductID
Те не временные таблицы. Это переменные таблицы. Эти два [существенно отличаются] (http://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server), особенно в отношении сферы охвата. Хотя это будет работать с временными таблицами, я не верю, что переменные таблицы родителя доступны из области ребенка. Я считаю, что вы создаете здесь два разных объекта. –
Да, вы были правы. Это переменные таблиц. Можно ли предложить способ достичь той же цели - вызвать другую процедуру хранения и получить ее ценность? – angelcake
Ну, вы можете использовать фактическую временную таблицу, объявленную в родительском. Кажется немного странным иметь временный объект, который может не существовать в дочернем элементе, поэтому вы можете проверить это. Или вы можете передать [table-valued parameter] (https://msdn.microsoft.com/en-us/library/bb510489.aspx) дочерней процедуре, а затем вывести ее обратно родительскому элементу во второй переменной таблицы определяется как выход. Честно говоря, я вообще не написал такую процедуру; Я достаточно хорошо знаком с переменными таблицы, чтобы знать, что ваш метод не будет работать. Есть много способов сделать это, просто не это! –