2012-09-27 4 views
7

Ich habe eine gespeicherte Prozedur Test_Sp die Daten auf diese Weise zurückgibt:SQL Server: Legen Sie gespeicherte Prozedur Ergebnisse in Tabelle basierend auf Parametern

Id Name  Age Address State Country 
1 ManiS 25  aaaa  bbb  ccc 

Diese gespeicherte Prozedur 6 Spalten von Daten zurückgibt, aber ich möchte einfügen nur die ersten 2 Spalten in eine temporäre Tabelle ..

Meine temporäre Tabelle variabel ist:

Declare @testTbl Table (RowId int identity, Name nvarchar(100), Age int); 
INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23; 
Select * from @testTbl; 

Aber ich bekomme diese Fehlermeldung:

Msg 50000, Level 16, State 0, Procedure Test_Sp, Line 16
Cannot use the ROLLBACK statement within an INSERT-EXEC statement.

Ich bin mir bewusst über Select * into & wenn ich eine temporäre Tabelle mit denselben Spalten wie Stored Procedure Ausgabemittel wird es funktionieren ..

Meine Frage: ist es möglich, nur zwei Spalten in eine temporäre Tabelle einfügen Variable aus der gespeicherten Prozedur Ausgabe basierend auf Parametern?

+2

Warum nicht einfach alle 6 Spalten einfügen und ignorieren die 4, die Sie nicht interessieren? Oder schreiben Sie eine neue gespeicherte Prozedur? Oder ändern Sie die gespeicherte Prozedur so, dass sie weiß, dass Sie in manchen Fällen nur zwei Spalten haben möchten? –

+0

Hallo @AaronBertrand ... ich habe dieses SP (Test_Sp) für ein anderes Szenario verwendet, daher werde ich diesem sp neue Spalten hinzufügen, so dass es keine Auswirkungen auf die Einfügung dieser temporären Tabellenvariablen hat (weil diese temporäre Variable von verschiedenen sp verwendet wird) ... –

+0

Es klingt, als ob Sie verschiedene gespeicherte Prozeduren benötigen, um verschiedene Zwecke zu erfüllen. Wenn die gespeicherte Prozedur dazu nicht geschrieben wird, gibt es keine Möglichkeit zu sagen: "Hey, gib einfach zwei Spalten zurück, okay?" Es gibt [Tricks mit OPENROWSET] (http://stackoverflow.com/questions/653714/how-to-select-into-tempe-table-from-stored-procedure), aber vielleicht sollten Sie [lesen Sie dies] (http : //www.sommarskog.se/share_data.html). –

Antwort

17

1 Option:

Eine Zwischen temporäre Tabelle mit allen Spalten, die Renditen SP und dann tun Sie dies:

INSERT INTO Temp 
Exec [Test_Sp] 23; 

Dann

INSERT INTO @testTbl(Name,Age) 
select name,age from temp 

Option 2:

Ändern Sie Ihren Sproc und fügen Sie einen weiteren Bit-Datentyp-Parameter @limitedcolumnhinzuIf @ limitedcolumn = true die Rückkehr nur erforderliche Spalten sonst alle Spalten zurück

INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23,true; 
Verwandte Themen