OVH Cloud OVH Cloud

Colonnes retournées par une SP

8 réponses
Avatar
Patrice
Après exécution d'une procédure, côté client j'ai les métadonnées sur les
colonnes (type, taille etc...).
Je voudrais faire la même chose mais sur le serveur.

Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :

INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
connaisse la structure...
SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'

Est-ce possible ? (me reste toujours la possibilité de faire un outil client
plutôt qu'un script SQL).

Merci d'avance.

Patrice
--

8 réponses

Avatar
Thierry
select * into #tmp from openQuery(localhost,'EXECUTE
BaseDeDonnée.dbo.Procédure')

Il faut d'abord déclarer ton serveur en serveur distant (mais lui même en
fait !).

sp_addserver 'localhost'
GO
sp_serveroption 'localhost', 'data access', true
GO

--
Thierry


"Patrice" a écrit dans le message de news:

Après exécution d'une procédure, côté client j'ai les métadonnées sur les
colonnes (type, taille etc...).
Je voudrais faire la même chose mais sur le serveur.

Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :

INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
connaisse la structure...
SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'

Est-ce possible ? (me reste toujours la possibilité de faire un outil
client
plutôt qu'un script SQL).

Merci d'avance.

Patrice
--





Avatar
Patrice
Je ne dirais qu'un mot. Astucieux !

--

"Thierry" a écrit dans le message de
news:O8zh7%
select * into #tmp from openQuery(localhost,'EXECUTE
BaseDeDonnée.dbo.Procédure')

Il faut d'abord déclarer ton serveur en serveur distant (mais lui même en
fait !).

sp_addserver 'localhost'
GO
sp_serveroption 'localhost', 'data access', true
GO

--
Thierry


"Patrice" a écrit dans le message de news:

> Après exécution d'une procédure, côté client j'ai les métadonnées sur


les
> colonnes (type, taille etc...).
> Je voudrais faire la même chose mais sur le serveur.
>
> Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>
> INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
> connaisse la structure...
> SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>
> Est-ce possible ? (me reste toujours la possibilité de faire un outil
> client
> plutôt qu'un script SQL).
>
> Merci d'avance.
>
> Patrice
> --
>
>
>




Avatar
bruno reiter [MVP]
intéressant, on peut se passer du serveur lié en utilisant openrowset

select * into #sp_who from openrowset('MSDASQL',
'DRIVER={SQL Server};SERVER=MonServeur; Initial Catalog=master;Integrated
Security=True',
'EXEC master.dbo.sp_who active')

toutes les procédures ne sont pas cependant exécutables ainsi, par ex qd on
a une table temp dans la proc

br


"Thierry" wrote in message
news:O8zh7#
select * into #tmp from openQuery(localhost,'EXECUTE
BaseDeDonnée.dbo.Procédure')

Il faut d'abord déclarer ton serveur en serveur distant (mais lui même en
fait !).

sp_addserver 'localhost'
GO
sp_serveroption 'localhost', 'data access', true
GO

--
Thierry


"Patrice" a écrit dans le message de news:

> Après exécution d'une procédure, côté client j'ai les métadonnées sur


les
> colonnes (type, taille etc...).
> Je voudrais faire la même chose mais sur le serveur.
>
> Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>
> INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
> connaisse la structure...
> SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>
> Est-ce possible ? (me reste toujours la possibilité de faire un outil
> client
> plutôt qu'un script SQL).
>
> Merci d'avance.
>
> Patrice
> --
>
>
>




Avatar
Thierry
Avec OpenRowSet, ça va passer par oledb(+odbc dans ton exemple) alors
qu'avec un serveur déclaré avec sp_addserver, ça me semble beaucoup plus
direct.

Cela dit, dans le cas présenté par Patrice, il serait d'écrire une fonction
qui retrourne une table plutôt qu'une procédure stockée.

--
Thierry


"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news: uGV%23B$
intéressant, on peut se passer du serveur lié en utilisant openrowset

select * into #sp_who from openrowset('MSDASQL',
'DRIVER={SQL Server};SERVER=MonServeur; Initial Catalog=master;Integrated
Security=True',
'EXEC master.dbo.sp_who active')

toutes les procédures ne sont pas cependant exécutables ainsi, par ex qd
on
a une table temp dans la proc

br


"Thierry" wrote in message
news:O8zh7#
select * into #tmp from openQuery(localhost,'EXECUTE
BaseDeDonnée.dbo.Procédure')

Il faut d'abord déclarer ton serveur en serveur distant (mais lui même en
fait !).

sp_addserver 'localhost'
GO
sp_serveroption 'localhost', 'data access', true
GO

--
Thierry


"Patrice" a écrit dans le message de news:

> Après exécution d'une procédure, côté client j'ai les métadonnées sur


les
> colonnes (type, taille etc...).
> Je voudrais faire la même chose mais sur le serveur.
>
> Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>
> INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
> connaisse la structure...
> SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>
> Est-ce possible ? (me reste toujours la possibilité de faire un outil
> client
> plutôt qu'un script SQL).
>
> Merci d'avance.
>
> Patrice
> --
>
>
>








Avatar
bruno reiter [MVP]
A ma connaissance, le mode d'accès est identique pour openrowset et
openquery, on évite juste les serveurs liés pour des raisons de sécurité
(quand on peut) et s'il s'agit de requêtes ad hoc

j'ai utilisé MSDASQL seulement pour pouvoir utiliser une connection
approuvée.

comme tu dis une fonction est plus efficace quand c'est possible.

br

"Thierry" wrote in message
news:#
Avec OpenRowSet, ça va passer par oledb(+odbc dans ton exemple) alors
qu'avec un serveur déclaré avec sp_addserver, ça me semble beaucoup plus
direct.

Cela dit, dans le cas présenté par Patrice, il serait d'écrire une


fonction
qui retrourne une table plutôt qu'une procédure stockée.

--
Thierry


"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news: uGV%23B$
> intéressant, on peut se passer du serveur lié en utilisant openrowset
>
> select * into #sp_who from openrowset('MSDASQL',
> 'DRIVER={SQL Server};SERVER=MonServeur; Initial


Catalog=master;Integrated
> Security=True',
> 'EXEC master.dbo.sp_who active')
>
> toutes les procédures ne sont pas cependant exécutables ainsi, par ex qd
> on
> a une table temp dans la proc
>
> br
>
>
> "Thierry" wrote in message
> news:O8zh7#
>> select * into #tmp from openQuery(localhost,'EXECUTE
>> BaseDeDonnée.dbo.Procédure')
>>
>> Il faut d'abord déclarer ton serveur en serveur distant (mais lui même


en
>> fait !).
>>
>> sp_addserver 'localhost'
>> GO
>> sp_serveroption 'localhost', 'data access', true
>> GO
>>
>> --
>> Thierry
>>
>>
>> "Patrice" a écrit dans le message de news:
>>
>> > Après exécution d'une procédure, côté client j'ai les métadonnées sur
> les
>> > colonnes (type, taille etc...).
>> > Je voudrais faire la même chose mais sur le serveur.
>> >
>> > Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>> >
>> > INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
>> > connaisse la structure...
>> > SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>> >
>> > Est-ce possible ? (me reste toujours la possibilité de faire un outil
>> > client
>> > plutôt qu'un script SQL).
>> >
>> > Merci d'avance.
>> >
>> > Patrice
>> > --
>> >
>> >
>> >
>>
>>
>
>




Avatar
Thierry
A ton avis, quel est la diffèrence entre sp_addLinkedServer et sp_addServer
?
Car c'est surtout de celà qu'il s'agit.

--
Thierry


"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news:
A ma connaissance, le mode d'accès est identique pour openrowset et
openquery, on évite juste les serveurs liés pour des raisons de sécurité
(quand on peut) et s'il s'agit de requêtes ad hoc

j'ai utilisé MSDASQL seulement pour pouvoir utiliser une connection
approuvée.

comme tu dis une fonction est plus efficace quand c'est possible.

br

"Thierry" wrote in message
news:#
Avec OpenRowSet, ça va passer par oledb(+odbc dans ton exemple) alors
qu'avec un serveur déclaré avec sp_addserver, ça me semble beaucoup plus
direct.

Cela dit, dans le cas présenté par Patrice, il serait d'écrire une


fonction
qui retrourne une table plutôt qu'une procédure stockée.

--
Thierry


"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news: uGV%23B$
> intéressant, on peut se passer du serveur lié en utilisant openrowset
>
> select * into #sp_who from openrowset('MSDASQL',
> 'DRIVER={SQL Server};SERVER=MonServeur; Initial


Catalog=master;Integrated
> Security=True',
> 'EXEC master.dbo.sp_who active')
>
> toutes les procédures ne sont pas cependant exécutables ainsi, par ex
> qd
> on
> a une table temp dans la proc
>
> br
>
>
> "Thierry" wrote in message
> news:O8zh7#
>> select * into #tmp from openQuery(localhost,'EXECUTE
>> BaseDeDonnée.dbo.Procédure')
>>
>> Il faut d'abord déclarer ton serveur en serveur distant (mais lui même


en
>> fait !).
>>
>> sp_addserver 'localhost'
>> GO
>> sp_serveroption 'localhost', 'data access', true
>> GO
>>
>> --
>> Thierry
>>
>>
>> "Patrice" a écrit dans le message de news:
>>
>> > Après exécution d'une procédure, côté client j'ai les métadonnées
>> > sur
> les
>> > colonnes (type, taille etc...).
>> > Je voudrais faire la même chose mais sur le serveur.
>> >
>> > Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>> >
>> > INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
>> > connaisse la structure...
>> > SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>> >
>> > Est-ce possible ? (me reste toujours la possibilité de faire un
>> > outil
>> > client
>> > plutôt qu'un script SQL).
>> >
>> > Merci d'avance.
>> >
>> > Patrice
>> > --
>> >
>> >
>> >
>>
>>
>
>








Avatar
bruno reiter [MVP]
Dans ce cas, c'est strictement identique, regardes les scripts des sp

br

"Thierry" wrote in message
news:
A ton avis, quel est la diffèrence entre sp_addLinkedServer et


sp_addServer
?
Car c'est surtout de celà qu'il s'agit.

--
Thierry


"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news:
>A ma connaissance, le mode d'accès est identique pour openrowset et
> openquery, on évite juste les serveurs liés pour des raisons de sécurité
> (quand on peut) et s'il s'agit de requêtes ad hoc
>
> j'ai utilisé MSDASQL seulement pour pouvoir utiliser une connection
> approuvée.
>
> comme tu dis une fonction est plus efficace quand c'est possible.
>
> br
>
> "Thierry" wrote in message
> news:#
>> Avec OpenRowSet, ça va passer par oledb(+odbc dans ton exemple) alors
>> qu'avec un serveur déclaré avec sp_addserver, ça me semble beaucoup


plus
>> direct.
>>
>> Cela dit, dans le cas présenté par Patrice, il serait d'écrire une
> fonction
>> qui retrourne une table plutôt qu'une procédure stockée.
>>
>> --
>> Thierry
>>
>>
>> "bruno reiter [MVP]" <remove.this! a écrit dans le
> message
>> de news: uGV%23B$
>> > intéressant, on peut se passer du serveur lié en utilisant openrowset
>> >
>> > select * into #sp_who from openrowset('MSDASQL',
>> > 'DRIVER={SQL Server};SERVER=MonServeur; Initial
> Catalog=master;Integrated
>> > Security=True',
>> > 'EXEC master.dbo.sp_who active')
>> >
>> > toutes les procédures ne sont pas cependant exécutables ainsi, par ex
>> > qd
>> > on
>> > a une table temp dans la proc
>> >
>> > br
>> >
>> >
>> > "Thierry" wrote in message
>> > news:O8zh7#
>> >> select * into #tmp from openQuery(localhost,'EXECUTE
>> >> BaseDeDonnée.dbo.Procédure')
>> >>
>> >> Il faut d'abord déclarer ton serveur en serveur distant (mais lui


même
> en
>> >> fait !).
>> >>
>> >> sp_addserver 'localhost'
>> >> GO
>> >> sp_serveroption 'localhost', 'data access', true
>> >> GO
>> >>
>> >> --
>> >> Thierry
>> >>
>> >>
>> >> "Patrice" a écrit dans le message de news:
>> >>
>> >> > Après exécution d'une procédure, côté client j'ai les métadonnées
>> >> > sur
>> > les
>> >> > colonnes (type, taille etc...).
>> >> > Je voudrais faire la même chose mais sur le serveur.
>> >> >
>> >> > Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>> >> >
>> >> > INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que


je
>> >> > connaisse la structure...
>> >> > SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>> >> >
>> >> > Est-ce possible ? (me reste toujours la possibilité de faire un
>> >> > outil
>> >> > client
>> >> > plutôt qu'un script SQL).
>> >> >
>> >> > Merci d'avance.
>> >> >
>> >> > Patrice
>> >> > --
>> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>




Avatar
Patrice
En fait les SP existent déjà. Je cherchais à voir la faisabilité d'utiliser
les métadata des colonnes retournés par une proc pour générer des fragments
de page ASPX avec les longueurs, contrôles etc appropriés....

Merci à tous.

Patrice

--

"Thierry" a écrit dans le message de
news:%
Avec OpenRowSet, ça va passer par oledb(+odbc dans ton exemple) alors
qu'avec un serveur déclaré avec sp_addserver, ça me semble beaucoup plus
direct.

Cela dit, dans le cas présenté par Patrice, il serait d'écrire une


fonction
qui retrourne une table plutôt qu'une procédure stockée.

--
Thierry


"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news: uGV%23B$
> intéressant, on peut se passer du serveur lié en utilisant openrowset
>
> select * into #sp_who from openrowset('MSDASQL',
> 'DRIVER={SQL Server};SERVER=MonServeur; Initial


Catalog=master;Integrated
> Security=True',
> 'EXEC master.dbo.sp_who active')
>
> toutes les procédures ne sont pas cependant exécutables ainsi, par ex qd
> on
> a une table temp dans la proc
>
> br
>
>
> "Thierry" wrote in message
> news:O8zh7#
>> select * into #tmp from openQuery(localhost,'EXECUTE
>> BaseDeDonnée.dbo.Procédure')
>>
>> Il faut d'abord déclarer ton serveur en serveur distant (mais lui même


en
>> fait !).
>>
>> sp_addserver 'localhost'
>> GO
>> sp_serveroption 'localhost', 'data access', true
>> GO
>>
>> --
>> Thierry
>>
>>
>> "Patrice" a écrit dans le message de news:
>>
>> > Après exécution d'une procédure, côté client j'ai les métadonnées sur
> les
>> > colonnes (type, taille etc...).
>> > Je voudrais faire la même chose mais sur le serveur.
>> >
>> > Pour mieux exprimer mon idée j'aurais voulu quelque chose comme :
>> >
>> > INSERT INTO #tmp EXECUTE MaProcédure -- Sauf qu'il faut déjà que je
>> > connaisse la structure...
>> > SELECT * FROM Information_Schema.Columns WHERE Table_Name='#tmp'
>> >
>> > Est-ce possible ? (me reste toujours la possibilité de faire un outil
>> > client
>> > plutôt qu'un script SQL).
>> >
>> > Merci d'avance.
>> >
>> > Patrice
>> > --
>> >
>> >
>> >
>>
>>
>
>