web-dev-qa-db-fra.com

Exec procédure stockée dans la table temporaire dynamique

À ma connaissance; Ce que je veux faire n’est pas possible en SQL, mais cela vaut la peine de vous demander.

Disons que j'ai une procédure stockée abc qui renvoie les colonnes Id et Value. Cette procédure stockée est principalement utilisée par d'autres services pour des raisons fonctionnelles. Je ne l'utiliserai que de temps en temps pour le contrôle des données.

Donc, l'utiliser dans le cadre de ma procédure stockée:

DECLARE @tABC TABLE
(
   ID      INT,
   Value   DECIMAL(12,2)
)

INSERT INTO @tABC
   EXEC OtherDb.DataProd.abc

Oky, cela fonctionnera donc parfaitement pour l'instant, mais que se passe-t-il s'ils modifient la structure de leur procédure stockée?

Ajouter ou supprimer une colonne de leur procédure stockée va casser mon code. Y a-t-il moyen de rendre mon code plus flexible?.

Ma dernière tentative désespérée a quelque chose comme ça:

WITH tempTable AS
(
    EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable

Ce qui évidemment échoua misérablement.

14
JAT
SELECT * INTO #TempTable 
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
     'EXEC OtherDb.DataProd.abc')

SELECT * FROM #TempTable
8
Raj

Insérer dans une table temporaire. Je sais que cela fonctionne en 2008 et au-dessus, pas sûr de 2005. Vos colonnes de table temporaire doivent correspondre à vos colonnes Stored Proc.

create table #mytable (custid int,company varchar(50),contactname varchar(50)
                , phone varchar(50),address1 varchar(50)
                , address2 varchar(50),city varchar(50)
                ,st varchar(2),Zip varchar(20))

insert into #mytable (custid,company,contactname,phone,address1,address2,city,st,Zip)
exec dbo.sp_Node_CustomerList_wService @segid = 1

select * from #mytable
where custid = 5

drop table #mytable
6
Tim Melton

Sinon, jetez un coup d'oeil ici, d'autres options sont expliquées ici: Insérer les résultats d'une procédure stockée dans une table temporaire ?

0
NickyvV

c'est un moyen meilleur et facile d'utiliser openrowset

SELECT * INTO #tempTable FROM OPENROWSET ('SQLNCLI', 'Server = localhost; Trusted_Connection = yes;', 'EXEC OtherDb.DataProd.abc')

0
Ali Yesilli