2008-10-17 7 views
13

Ich habe ein sproc, die eine einzelne Zeile und Spalte mit einem Text zurückgibt, muss ich diesen Text auf eine Variable setzen, so etwas wie:einen SP Rückgabewert einer Variablen in SQL Server Set

declare @bla varchar(100) 
select @bla = sp_Name 9999, 99989999, 'A', 'S', null 

aber natürlich funktioniert dieser code nicht ...

danke!

Antwort

29

folgt Wenn Sie nicht in der Lage sind, die gespeicherte Prozedur zu ändern, wäre eine andere Lösung, die eine temporäre Tabelle zu definieren sein, und legen Sie die Ergebnisse in diesem

DECLARE @Output VARCHAR(100) 

CREATE TABLE #tmpTable 
(
    OutputValue VARCHAR(100) 
) 
INSERT INTO #tmpTable (OutputValue) 
EXEC dbo.sp_name 9999, 99989999, 'A', 'S', null 

SELECT 
    @Output = OutputValue 
FROM 
    #tmpTable 

DROP TABLE #tmpTable 
+0

Wäre sehr praktisch (wenn Sie Berechtigungen hatten), dies als Ihren eigenen gespeicherten Prozess mit mehr Wert einzurichten. Wahrscheinlich werden Sie das mehrere Male anrufen wollen. – brianb

+0

Dies schien bei T-SQL SQL2005 nicht zu funktionieren. Mein sp gibt einen int zurück. Ich habe die temporäre Tabelle erstellt, keine Syntaxfehler erhalten und sie wird ausgeführt, aber das int in der temporären Tabelle hat keinen Wert. Die Lösung von DiGi [auf dieser Seite] hat für mich funktioniert. thx – raddevus

+0

Ich habe dies in SQL Server 2008 R2 überprüft. Es funktioniert gut – Shanaka

19

Wenn die gespeicherte Prozedur einen einzigen Wert zurückgibt Sie einen der Parameter für die gespeicherte Prozedur definieren könnte eine Ausgangsgröße zu sein, und dann wäre die gespeicherte Prozedur den Wert des Parametersatzes

CREATE PROCEDURE dbo.sp_Name 
    @In INT, 
    @Out VARCHAR(100) OUTPUT 

AS 
BEGIN 
    SELECT @Out = 'Test' 
END 
GO 

Und Sie dann den Ausgangswert erhalten als

DECLARE @OUT VARCHAR(100) 
EXEC sp_name 1, @Out OUTPUT 
PRINT @Out 
+0

das Problem ist, dass ich nicht den Code der Prozedur ändern kann ... – Bruno

15
DECLARE 
    @out INT 

EXEC @out = sp_name 'param', 2, ... 

Mehr Informationen in T-SQL "EXECUTE" help (Hilfe ist von MSSQL 2008, aber das funktioniert auch im Jahr 2000)

+0

Dies funktioniert nur bei Prozeduren mit OUT-Parametern. Nicht, wenn die Prozedur einen skalaren Wert zurückgibt (was für die ursprüngliche Frage der Fall ist). – Bill

+0

Arbeiten ohne 2012 zumindest, nicht für 2008 getestet – JBone

Verwandte Themen