9

Helo,SQL Server Хранилище возвращаемого значения хранимой процедуры

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

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 

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

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

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

+2

вы должны будете показать нам больше кода, так как ваш вопрос не ясен. –

+0

Согласен. Покажите нам весь контекст .. вызов «другой» хранимой процедуры. – madcolor

+0

Проблема в том, что sproc, возвращающий счет, включает в себя больше, чем в его наборе результатов, и этот вывод появляется во втором sproc. –

ответ

12

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

create table #temp (id int, val varchar(100)) 
insert into #temp 
exec sp_My_Other_SP @value, @value, @value, @count OUTPUT 
+2

Я использовал этот подход, но вместо того, хэш-таблицу я использовал таблицы типа скалярную как: DECLARE @temp_tbl ТАБЛИЦА (значение INT) INSERT INTO @temp_tbl ВЫПЛН sp_My_SP \t \t \t SET @count = (SELECT TOP 1 value FROM @temp_tbl) – Phil

+0

Это, конечно, менее эффективно, так как вы выбираете данные, которые вам не нужны. Вам лучше добавить новый параметр в sp_My_Other_SP, который будет контролировать, будет ли возвращен результат, если вы просто ищете счет. –

+0

Это не имеет смысла, я забочусь о графе, поскольку я всегда буду использовать его, и это жизненно важно для остальной части СП. – Phil

4

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

Добавить еще один параметр, называемый @GetCount

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

Тогда вместо того, чтобы просто

Select ... 

записи

If @GetCount = 1 
    Select ... 
2

Вы пробовали изменения

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

в

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

?

0
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 
+2

Хотя этот код может ответить на вопрос, было бы лучше объяснить, как он решает проблему и почему ее использовать. Ответы только на код не полезны в долгосрочной перспективе. –