9

Helo,Memorizza stored procedure di SQL Server valore restituito

La mia domanda è che ho una stored procedure in SQL Server che restituisce i conteggi di un campo. Voglio memorizzare i risultati di questa stored procedure in una variabile (scalare?) Di una stored procedure diversa.

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 

Io attualmente faccio come:

DECLARE @count int 

EXEC sp_My_Other_SP @count OUTPUT 

Poi lo uso come

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

Tuttavia la sua ritorno l'altro stored procedure risultati, nonché i principali risultati stored procedure che è un problema nella mia applicazione .NET.

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

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

(Sopra è un tentativo di rappresentazione dei risultati restituiti set)

Vorrei sapere se c'è un modo per memorizzare i risultati di una stored procedure in una variabile che non lo fa anche in uscita esso.

Grazie per qualsiasi aiuto.

+2

dovrai mostrarci altro codice poiché la tua domanda non è chiara. –

+0

Sono d'accordo .. mostraci l'intero contesto .. la chiamata al "altro" memorizzato proc. – madcolor

+0

Il problema è che lo sproc che restituisce il conteggio include più di quello nel suo set di risultati, e questo risultato si trova nel 2 ° sproc. –

risposta

12

È possibile acquisire i risultati della stored procedure in una tabella temporanea in modo che non venga restituita dalla stored procedure di chiamata.

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

Ho usato questo approccio, ma invece di una tabella hash ho usato il tipo di tabella scalare come: DECLARE @temp_tbl TABELLA (int value) INSERT INTO @temp_tbl EXEC sp_My_SP \t \t \t SET @count = (SELECT TOP 1 valore FROM @temp_tbl) – Phil

+0

Questo è ovviamente meno efficiente dal momento che stai selezionando i dati che non ti interessano. Faresti meglio ad aggiungere un nuovo parametro a sp_My_Other_SP che controlla se il set di risultati viene restituito o meno se stai cercando un conteggio. –

+0

Questo non ha senso, mi interessa il conteggio perché lo userò sempre ed è vitale per il resto della SP. – Phil

4

Bene, il modo più semplice per risolvere questo problema è ricodificare il processo memorizzato in modo che l'istruzione select che restituisce l'altro set di risultati che in questo caso non si desidera venga estensivamente condizionato, solo quando NON si sta richiedendo il conteggio

Aggiungi un altro parametro chiamato @GetCount

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

Poi invece di

Select ... 

scrittura

If @GetCount = 1 
    Select ... 
2

Hai provato cambiando

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

a

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

Sebbene questo codice possa rispondere alla domanda, sarebbe meglio spiegare come risolve il problema e perché utilizzarlo. Le risposte al solo codice non sono utili a lungo termine. –

Problemi correlati