Возвращаемое значение для хранимой процедуры SQL Server - PullRequest
9 голосов
/ 27 августа 2009

Helo,

У меня вопрос: у меня есть одна хранимая процедура в SQL Server, которая возвращает количество полей. Я хочу сохранить результаты этой хранимой процедуры в переменной (скаляр?) Другой хранимой процедуры.

sp_My_Other_SP:

CREATE PROCEDURE [dbo].sp_My_Other_SP
@variable int OUTPUT -- The returned count
AS

BEGIN -- SP

SET NOCOUNT ON;

SET @SQL = "SELECT COUNT(*) FROM blah"
EXEC(@SQL)

END -- SP

Я сейчас делаю это так:

DECLARE @count int

EXEC sp_My_Other_SP @count OUTPUT

Тогда я использую это как

IF (@count > 0)
BEGIN
...
END

Однако он возвращает результаты других хранимых процедур, а также основные результаты хранимых процедур, что является проблемой в моем приложении .NET.

-----------
NoColName
-----------
14

-----------
MyCol
-----------
abc
cde
efg

(Выше приведена попытка представления возвращаемых наборов результатов)

Я хотел бы знать, есть ли способ сохранить результаты хранимой процедуры в переменную, которая также не выводит ее.

Спасибо за любую помощь.

Ответы [ 4 ]

13 голосов
/ 27 августа 2009

Вы можете записать результаты хранимой процедуры во временную таблицу, чтобы она не возвращалась вызывающей хранимой процедурой.

create table #temp (id int, val varchar(100))
insert into #temp
exec sp_My_Other_SP @value, @value, @value, @count OUTPUT
4 голосов
/ 27 августа 2009

Что ж, самый простой способ исправить это - перекодировать сохраненный процесс, чтобы оператор выбора, который возвращает «другой» набор результатов, который вы не хотите в этом случае, был условно расширен, только если вы НЕ запрашиваете подсчитывать

Добавить еще один параметр с именем @GetCount

@GetCount TinyInt Defualt = 0 // or
@GetCount Bit Default = 0 

Тогда вместо просто

Select ...

запись

   If @GetCount = 1
     Select ...
2 голосов
/ 10 сентября 2010

Вы пытались изменить

SET @SQL = "SELECT COUNT(*) FROM blah" 
EXEC(@SQL) 

до

SELECT @variable = COUNT(*) FROM blah" 
-- don't do EXEC(@SQL) 

0 голосов
/ 18 ноября 2015
THE FIRST PROCEDURE:
CREATE PROC DD43
@ID INT OUTPUT AS
(SELECT @ID=COUNT(*) FROM CS2)

SECOND PROCEDURE:

 CREATE PROC DD45 AS
 DECLARE @COUNT INT
 DECLARE @COUN INT
 EXEC DD43 @COUN OUT --CALLING THE FIRST PROCEDURE
 SET @COUNT= (SELECT @COUN)
 SELECT @COUNT

 EXEC DD45 
...