À 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.
SELECT * INTO #TempTable
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
'EXEC OtherDb.DataProd.abc')
SELECT * FROM #TempTable
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
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 ?
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')