2009-03-10 13 views
2

Ich führe einen SP innerhalb eines SP. Der SP gibt 10 Params zurück. Ich interessiere mich nur für 5 von ihnen. Wie füge ich nur diese 5 in die temporäre Tabelle ein.SQL Server - Selektiv Einfügen von Feldern in temporäre Tabelle

Der Code, den ich bisher habe:

DECLARE @tmpUnion TABLE 
    (
    UnionCode VARCHAR(10), 
    UnionDate DATETIME, 
    UnionPosition VARCHAR(30), 
    UnionInitFees BIT, 
    UnionDues BIT 
) 

    --getDetails returns 10 params. I need only these 5 
    INSERT INTO @tmpUnion 
    (UnionCode, UnionDate, UnionPosition, UnionInitFees, UnionDues) 
    EXEC getDetails 
     @iUserId = @OriginalLoginId 

Antwort

-1

Sie können nicht. Die Tabellenvariable muss genau mit der Struktur der zurückgegebenen Daten übereinstimmen.

+0

Eine bessere Antwort würde den Weg zeigen, anstatt nur zu sagen "Sie können nicht" – NotMe

2

Setzen Sie das Ergebnis von getDetails in eine tablevar, die alle Rückgabewerte enthält, und fügen Sie dann die zusätzliche Tabelle ein.

Sie könnten auch check out this site für weitere Informationen zum Freigeben von Daten zwischen gespeicherten Prozeduren.

+0

Ich log, wenn ich sagte, die GetDetails gibt 10 Werte zurück. Tatsächlich gibt es mehr als 50 zurück. Wenn möglich, möchte ich den zusätzlichen Aufwand für das Erstellen einer temporären Tabelle mit all diesen Spalten vermeiden. – DotnetDude

2

Verwenden OPENROWSET wie so:

Select 
     * 
from OPENROWSET('SQLOLEDB','Data Source=Server_name;Trusted_Connection=yes; 
     Integrated Security=SSPI','Execute yourdb..get_orders') 

Jetzt können Sie bequem die resultset filtern

Select 
employeeid,orderid,orderdate 
from 

OPENROWSET('SQLOLEDB','Data Source=Server_name;Trusted_Connection=yes; 
     Integrated Security=SSPI','Execute yourdb..get_orders') 

where 
     orderdate>='19960101' and orderdate<'19970101' 

Sie brauchen nicht eine temporäre Tabelle zu erstellen, und Sie müssen auch nicht befürchten die Struktur des Verfahrens.

Found here

EDIT: Endlösung von Kommentaren nach Diskussion bewegt.

+0

#TempTable erstellt eine globale Tabelle richtig? Wenn ich dies deklariere, brauche ich die Spalten und die Datentypen nicht anzugeben? – DotnetDude

+0

Doppelter Hash (##) erstellt globale Tabelle. Sie müssen die Struktur der Ergebnismenge kennen. Ich denke, ich habe kürzlich daran gearbeitet, ich muss den Code finden. – WakeUpScreaming

+0

Ich nehme natürlich an, dass Sie keinen Zugriff auf die gespeicherte Prozedur haben oder aus einem anderen Grund nicht ändern können. – WakeUpScreaming

Verwandte Themen