2009-03-10 7 views
2

J'exécute un SP dans un SP. Le SP renvoie 10 paramètres. Je suis intéressé par seulement 5 d'entre eux. Comment est-ce que j'insère seulement ces 5 dans la table de temp.SQL Server - Insertion sélective de champs dans la table temporaire

Le code que j'ai jusqu'à présent:

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 

Répondre

-1

Vous ne pouvez pas. La variable de table doit correspondre exactement à la structure de waht retournée.

+0

Une meilleure réponse montrerait le chemin au lieu de simplement dire "vous ne pouvez pas" – NotMe

2

Mettez le résultat de getDetails dans un tablevar qui contient toutes les valeurs de retour, puis faites votre insertion hors de la table supplémentaire.

Vous pouvez également check out this site pour plus d'informations sur le partage de données entre des procédures stockées.

+0

J'ai menti quand j'ai dit que le getDetails renvoie 10 valeurs. En fait, il renvoie plus de 50. Si possible, je veux éviter la surcharge supplémentaire de créer une table temporaire avec toutes ces colonnes – DotnetDude

2

Utilisez OPENROWSET comme ceci:

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

Maintenant, vous pouvez facilement filtrer ResultSet

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' 

Vous n'avez pas besoin de créer une table temporaire et vous pouvez aussi ne pas besoin de se soucier la structure de la procédure.

Found here

EDIT: La solution finale est passé de commentaires après discussion.

+0

#TempTable crée une table globale droite? Quand je déclare ceci, je n'ai pas besoin de spécifier les colonnes et les types de données? – DotnetDude

+0

Double hash (##) crée une table globale. Vous aurez besoin de connaître la structure du jeu de résultats. Je pense que j'ai travaillé autour de cela récemment, je vais devoir trouver le code. – WakeUpScreaming

+0

Je suppose, bien sûr, que vous n'avez pas accès à la procédure stockée ou que pour une autre raison, vous ne pouvez pas la modifier. – WakeUpScreaming

Questions connexes