Как использовать значение из одной хранимой процедуры в другом?

У меня есть следующее утверждение в Хранимой процедуре:

DECLARE @Count INT
EXEC @Count = GetItemCount 123
SELECT @Count

Который называет другую хранимую процедуру со следующим утверждением внутри:

SELECT COUNT(Item) FROM tblItem WHERE ID = @ID

Однако, когда я тестирую вызов, ДОЛЖНОСТНОЕ ЛИЦО производит значение правильно, но это не присвоено @Count Переменной правильно. Я видел примеры или хранимые процедуры, используемые как это, включая здесь, но ни один не имел параметр и используемое возвращаемое значение (что я мог найти). Идентификационный Параметр передается во второй оператор, который возвращает значение количества, используемое первым StoredProcedure - вся информация, которую я считал, кажется, указывает, что это должно работать - но это не делает значения @Count, нуль aways, даже когда GetItemCount всегда возвращает правильное значение.

Это находится в Microsoft SQL Server 2008, если это помогает.

12
задан Neil Knight 8 June 2010 в 09:55
поделиться

4 ответа

В вашей хранимой процедуре вы либо

a) Присваиваете значение счетчика выходному параметру:

CREATE PROCEDURE GetItemCount
  @id INT,
  @count INT OUTPUT
AS
  SELECT @count = COUNT(Item) FROM tblItem WHERE ID = @id

, вызываемому как:

DECLARE @count INT
EXEC GetItemCount 123, @count OUTPUT

, или b) Назначение значения счетчика в качестве возвращаемого значения:

CREATE PROCEDURE GetItemCount
  @id INT
AS
BEGIN
  DECLARE @count INT
  SELECT @count = COUNT(Item) FROM tblItem WHERE ID = @id

  RETURN @count
END  

называется:

DECLARE @count INT
EXEC @count = GetItemCount 123
29
ответ дан 2 December 2019 в 03:48
поделиться

Вы должны передать @Count в качестве выходного параметра.

Create Proc dbo.usp_Proc1

@Id int,
@Count int output

as begin

select @Count = Count(Item) from tblItem where id=@Id

end
Go

Declare @Count int
Declare @Id int

Set @Id = 1

Exec dbo.usp_Proc1 @Id, @Count output

select @Count
2
ответ дан 2 December 2019 в 03:48
поделиться

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

  1. Объявить другой параметр @count как OUTPUT в GetItemCount. Таким образом, объявление GetItemCount будет выглядеть следующим образом

    CREATE PROCEDURE GetItemCount @ID int, @count int output

Внутри, вы можете использовать

SELECT @count = COUNT(Item) FROM tblItem WHERE ID = @ID

  1. Чтобы объявить таблицу перед вызовом процедуры и получить это значение как столбец.
0
ответ дан 2 December 2019 в 03:48
поделиться

Другой способ

DECLARE @Count table(counting INT)
Insert into @Count
EXEC GetItemCount 123 
SELECT Counting FROM @Count 
5
ответ дан 2 December 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: