2017-05-26 6 views
2

Ich habe eine gespeicherte Prozedur und 3 Variablen. Ich muss sie alle in derselben Zeile in einer temporären Tabelle einfügen. Ist das möglich? Ich versuchteStored Procedure und andere Variablen in eine temporäre Tabelle einfügen

INSERT INTO #Temp (@Ad, @B, @C, @SPInt) 
    SELECT 
     @Ad, @B, @C, EXEC sp_XYZ @A, @B, @C 

Aber das funktioniert nicht.

+0

Es ist unklar, aus Ihrer Frage, ob 'sp_XYZ' Reihen produziert und Sie wollen, dass die in '# temp', oder wenn Sie nur versuchen, den Rückgabewert zu erfassen (was viel einfacher ist:' EXEC @SPInt = sp_XYZ @A, @B, @ C' gefolgt von 'INSERT'). –

Antwort

3

Dieser einfachste Ansatz besteht darin, die gespeicherte Prozedur so zu ändern, dass die Eingabeargumente zusammen mit allem anderen zurückgegeben werden.

Ist das nicht der Fall, müssen Sie die Ausgabeergebnisse irgendwo speichern und dann in #Temp einfügen. Hier ist eine Möglichkeit:

create table #temp_exec (. . .); 
insert into #temp_exec (. . .) 
    exec sp_xyz @A, @B, @C; 

insert into #temp (a, b, c, . . .) 
    select @A, @B, @C, . . . 
    from #temp_exec; 

Wenn #temp als leer beginnt, dann brauchen Sie nicht eine andere Tabelle:

insert into #temp (. . .) 
    exec sp_xyz @A, @B, @C; 

update #temp 
    set a = @A, b = @b, c = @c; 
+0

Wie habe ich nicht daran gedacht. Danke! –

1

Nein, Sie können das alles nicht in einer Aussage tun.

Sie können die INSERT..EXEC in einer Anweisung ausführen und dann die Variablen in einer UPDATE-Anweisung hinzufügen. Dafür müssen Sie zwei verschiedene Anweisungen verwenden.

+0

Ok, danke. Das wird ein Problem sein, da der SP einen int zurückgibt. Ich nehme an, ich werde nur MAX (row_number) aktualisieren, das wird meine Ausführungszeit erheblich erhöhen :(. –

Verwandte Themen