OVH Cloud OVH Cloud

Procédure stockée système

2 réponses
Avatar
r rebeyrotte
Je voudrais ex=E9cuter si possible un select sur le r=E9sultat=20
de l'ex=E9cution d'une proc=E9dure stock=E9e syst=E8me par exemple
r=E9cup=E9rer uniquement "hostname" quand on lance exec sp_who

=3D=3D>
select=20
t.hostname =20
from=20
(exec sp_who) t

Mais =E7a ne fonctionne pas...

2 réponses

Avatar
Zoury
Salut!

J'suis justement en train de chercher de l'info là dessus.. j'ai découvert
(ENFIN!!!) qu'on pouvait faire un INSERT / EXEC... :
---
create procedure dbo.p
as
select 15
go
create table #t(i int)
go
insert #t exec p
go
select * from #t
go
drop table #t
go
drop procedure p
go
---

mais maintenant je cherches à éviter l'étape de la création de la table
temporaire parce que c'est peu pratique, si vous avez idées... ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"r rebeyrotte" a écrit dans le message
de news:12a601c46f1d$b83dd050$
Je voudrais exécuter si possible un select sur le résultat
de l'exécution d'une procédure stockée système par exemple
récupérer uniquement "hostname" quand on lance exec sp_who

==>
select
t.hostname
from
(exec sp_who) t

Mais ça ne fonctionne pas...
Avatar
Zoury
reSalut! :O)

Je me suis informer auprès de nos collègues anglophones. oj m'a suggéré un
"loopback" server (serveur local pointant sur lui même) accompagné de la
méthode OPENQUERY() :

voici exemple un basé sur l'autre d'avant :
---
-- on ajoute le loopback linked server
sp_addlinkedserver @server = N'MyLinkName',
@srvproduct = N' ',
@provider = N'SQLOLEDB',
@datasrc = N'MyServerName',
@catalog = N'MyCatalog'
go
-- on permet l'accès au donnée sur le linked server
exec sp_serveroption 'MyLinkName', 'data access', 'true'
go
-- créer une procédure stockée
create procedure p
as
select 1 as Value
go
-- exécute la procédure et envoi
-- les données dans la table #t
select Value
into #t
from openquery(MyLinkedServer, 'exec dbo.p')t
go
-- affiche le résultat de la requête
select * from #t
go
-- on libère les ressources..
drop table #t
go
drop procedure p
go
sp_dropserver 'MyLinkName'
go
---

oj recommande aussi l'usage de l'option fmtonly si la procédure stockée
utilise des tables temporaires, ainsi la requête deviendrait :
---
select Value
into #t
from openquery(MyLinkedServer, 'set fmtonly on; exec dbo.p')t
---


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/