2009-07-24 2 views
3

Angenommen, ich habe Proc 1 gespeichert, das einige Daten zurückgibt. Wie kann ich diesen gespeicherten Prozess ausführen und einige Parameter in einem anderen gespeicherten Prozess basierend auf den Ergebnissen dieses gespeicherten Prozesses festlegen.Versuch, auf die Ergebnisse/Ergebnismenge einer EXEC-Anweisung eines SQL-Servers zuzugreifen

Zum Beispiel: Tabelle:

UserInfo (UserID [int], Name [varchar], DateOfBirth [datetime]) 

Stored Proc 1:

CREATE Procedure StoredProc1 
    @Name [varchar] 
AS 
    SELECT UserID, Name, DateOfBirth FROM UserInfo WHERE Name = @Name 

Stored Proc 2:

CREATE Procedure StoredProc2 
    @AmountOfNames [int] OUT 

SELECT @AmountOfNames=COUNT(EXEC StoredProc1 @Name='Irwin') 

Ich weiß, dass 2 Stored Proc ist nicht, wie es sein sollte erstellt werden, aber das ist, was ich tun möchte, legen Sie die Anzahl basierend auf den letzten Ergebnissen fest.

kann ich nicht proc 1

+1

Ich denke, Sie wollten sagen, dass Sie gespeicherte ProC# 1 nicht ändern können. –

+0

@@ ROWCOUNT? Nicht sicher, wenn Sie das suchen. – shahkalpesh

Antwort

2

Sie die Ergebnisse Ihrer ersten gespeicherten proc fangen kann in eine temporäre Tabelle oder Tabellenvariable ...

DECLARE @MyResults TABLE(UserID int, Name varchar(30), DateOfBirth datetime) 

INSERT @MyResults 
EXEC StoredProc1 'Scott' 

-- do what you want with the table here... 

oder - Sie den @@ ROWCOUNT-Variable verwenden die Zählung der Ergebnisse von Ihrem ersten proc zu greifen. Dies kann oder möglicherweise nicht je nachdem, was in Ihrer ersten gespeicherte Prozedur nach der select-Anweisung kam ...

DECLARE @Count int 

EXEC StoredProc1 'Scott' 
SET @Count = @@ROWCOUNT 

-- do whatever you want with the count here... 

Wenn Sie die beste Wahl keine Kontrolle über StoredProc1 haben, könnte die temporäre Tabelle, da können Sie 't garantieren, dass die Ergebnisse von @@ ROWCOUNT nach der SELECT-Anweisung in Ihrem StoredProc1-Prozess durch den Code zurückgesetzt werden.

+0

Denken Sie daran, dass Sie INSERT EXEC nicht mehr als einmal innerhalb eines SQL SP Batch verwenden können. –

+0

meine Einfügung blieb versagt, aber die @@ RowCount geholfen viel – Irwin

+0

@Ganesh R, ich dachte, es hatte mit Verschachtelungsprozeduren zu tun, die diese verwenden und nicht wie oft in einem Verfahren Sie es tun. –

2

gespeichert modify Wenn Sie das Schema der Rückkehr von SP1 kennen, können Sie dies tun:

CREATE SP2 
AS 
BEGIN 

CREATE TABLE #Results1 (
    UserID VARCHAR(50), 
    Name  VARCHAR(100), 
    DateOfBirth DATETIME 
) 

INSERT INTO #Results1 
EXEC sp1 @Param1, @Param2 

SELECT COUNT(UserID) FROM #Results1 

END 
2

Sie haben bereits gute Antworten (und haben eine akzeptiert), aber Sie könnten immer noch Interesse an How to Share Data Between Stored Procedures haben. Viele Informationen über verschiedene Methoden der Kommunikation zwischen den Verfahren, wie sie funktionieren und warum Sie sich (oder auch nicht) dafür entscheiden sollten, jedes zu verwenden.

Verwandte Themen