У меня есть следующее утверждение в Хранимой процедуре:
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, если это помогает.
В вашей хранимой процедуре вы либо
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
Вы должны передать @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
То, что вы ловите в переменной @Count - это статус выполнения хранимой процедуры GetItemCount, а не значение, как вы ожидаете. Чтобы поймать это значение, у вас есть два пути.
Объявить другой параметр @count как OUTPUT в GetItemCount. Таким образом, объявление GetItemCount будет выглядеть следующим образом
CREATE PROCEDURE GetItemCount @ID int, @count int output
Внутри, вы можете использовать
SELECT @count = COUNT(Item) FROM tblItem WHERE ID = @ID
Другой способ
DECLARE @Count table(counting INT)
Insert into @Count
EXEC GetItemCount 123
SELECT Counting FROM @Count