OVH Cloud OVH Cloud

Requete avec sp_addlinkedserver

26 réponses
Avatar
aitoz
Bonjour,

En inscrivant ma requete comme suivant, il m'indique que je dois activer et
désactiver les caractères ANSI !?
Comment faire dans ma procédure stockée ?

CREATE PROCEDURE ps_sgsa_suivifourrecep


@RE_RFOU VARCHAR(40)

AS
SELECT * FROM OPENQUERY (NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT
WHERE ( ( ( GPRECEPT.RE_RFOU)="@RE_RFOU") )
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU'
)
GO

10 réponses

1 2 3
Avatar
aitoz
Ok j'ai trouvé la réponse facilement !
Mais je voudrais savoir ???

comment passer un argument à travers ma procédure stockée à la variable
@RE_RFOU ???
Parce que je n'arrive pas a ressortir mes valeurs. Mon résultat s'affiche,
mais vide.
Et si j'enleve les " je n'arrive plus a sauvegarder ma procédure il me dit
qu'il y a des erreurs.
Comment faire ?
Avatar
Fred BROUARD
Il n'est pas possible de paramétrer une requête SQL en général.
Or ta requête :
SELECT GPRECEPT.RE_FOUR...
FROM GPRECEPT
va être exécutée sur le serveur lié de manière distante.
Il faut donc réaliser ce filtrage paramétré de manière locale.

Le plus simple est d'envoyer le résultat de la requête dans une table locale et
de filtrer dessus.

Essaye :

CREATE PROCEDURE ps_sgsa_suivifourrecep @RE_RFOU VARCHAR(40)

AS

SELECT *
FROM (SELECT * FROM OPENQUERY
(NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU,
GPRECEPT.RE_CODE, GPRECEPT.RE_COMM,
GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE,
GPRECEPT.RE_QRST, GPRECEPT.RE_UQTE,
GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT') T
WHERE GPRECEPT.RE_RFOU = @RE_RFOU"
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU

GO

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

aitoz a écrit:
Bonjour,

En inscrivant ma requete comme suivant, il m'indique que je dois activer et
désactiver les caractères ANSI !?
Comment faire dans ma procédure stockée ?

CREATE PROCEDURE ps_sgsa_suivifourrecep


@RE_RFOU VARCHAR(40)

AS
SELECT * FROM OPENQUERY (NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT
WHERE ( ( ( GPRECEPT.RE_RFOU)="@RE_RFOU") )
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU'
)
GO




Avatar
aitoz
Ca ne fonctionne pas !
Peut etre qu'une formulation plus précise m'aiderais ;-)

merci

"Fred BROUARD" a écrit dans le message de news:

Il n'est pas possible de paramétrer une requête SQL en général.
Or ta requête :
SELECT GPRECEPT.RE_FOUR...
FROM GPRECEPT
va être exécutée sur le serveur lié de manière distante.
Il faut donc réaliser ce filtrage paramétré de manière locale.

Le plus simple est d'envoyer le résultat de la requête dans une table
locale et de filtrer dessus.

Essaye :

CREATE PROCEDURE ps_sgsa_suivifourrecep @RE_RFOU VARCHAR(40)

AS

SELECT *
FROM (SELECT * FROM OPENQUERY
(NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU,
GPRECEPT.RE_CODE, GPRECEPT.RE_COMM,
GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE,
GPRECEPT.RE_QRST, GPRECEPT.RE_UQTE,
GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT') T
WHERE GPRECEPT.RE_RFOU = @RE_RFOU"
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU

GO

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

aitoz a écrit:
Bonjour,

En inscrivant ma requete comme suivant, il m'indique que je dois activer
et désactiver les caractères ANSI !?
Comment faire dans ma procédure stockée ?

CREATE PROCEDURE ps_sgsa_suivifourrecep


@RE_RFOU VARCHAR(40)

AS
SELECT * FROM OPENQUERY (NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT
WHERE ( ( ( GPRECEPT.RE_RFOU)="@RE_RFOU") )
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU'
)
GO








Avatar
Thierry
Bonjour,

Ce ne sera pas très performant de faire comme celà.
Il est possible de filtrer par paramètre une requête distribuée, mais il ne
faut pas utiliser OPENQUERY().

SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM NOM_SERVEUR_LIE...GPRECEPT
WHERE GPRECEPT.RE_RFOU = @RE_RFOU
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU


--
Thierry


"Fred BROUARD" a écrit dans le message de news:

Il n'est pas possible de paramétrer une requête SQL en général.
Or ta requête :
SELECT GPRECEPT.RE_FOUR...
FROM GPRECEPT
va être exécutée sur le serveur lié de manière distante.
Il faut donc réaliser ce filtrage paramétré de manière locale.

Le plus simple est d'envoyer le résultat de la requête dans une table
locale et de filtrer dessus.

Essaye :

CREATE PROCEDURE ps_sgsa_suivifourrecep @RE_RFOU VARCHAR(40)

AS

SELECT *
FROM (SELECT * FROM OPENQUERY
(NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU,
GPRECEPT.RE_CODE, GPRECEPT.RE_COMM,
GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE,
GPRECEPT.RE_QRST, GPRECEPT.RE_UQTE,
GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT') T
WHERE GPRECEPT.RE_RFOU = @RE_RFOU"
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU

GO

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

aitoz a écrit:
Bonjour,

En inscrivant ma requete comme suivant, il m'indique que je dois activer
et désactiver les caractères ANSI !?
Comment faire dans ma procédure stockée ?

CREATE PROCEDURE ps_sgsa_suivifourrecep


@RE_RFOU VARCHAR(40)

AS
SELECT * FROM OPENQUERY (NOM_SERVEUR_LIE,
'SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM GPRECEPT
WHERE ( ( ( GPRECEPT.RE_RFOU)="@RE_RFOU") )
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU'
)
GO








Avatar
aitoz
Quandje fais ça :

SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM NOM_SERVEUR_LIE...GPRECEPT
WHERE GPRECEPT.RE_RFOU = @RE_RFOU
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU



Il me dit error 107, il ne connait pas la table GPRECEPT ou l'alias ou le
nom de la table.

Dois-je indiquer quelque chose autrement ?
Avatar
aitoz
Encore merci Thierry !

J'ai mis ta requete dans EM dans l'analyseur de requete et il l'a corrigé
toute seule.
Mainenant ca marche et bien.
Puré merci parce que je commencais a perdre enormément de temps !

Voici la procédure stockée qui passe :

CREATE PROCEDURE ps_sgsa_suivifourrecep

@RE_RFOU VARCHAR(40)

AS
SELECT re_four, re_rfou, re_code, re_comm, re_lign, re_arti, re_desi,
re_nbre, re_qrst, re_uqte, re_ctva, re_pcde, re_upri, re_prht
FROM Nomserveur...GPRECEPT GPRECEPT_1
WHERE (re_rfou = @RE_RFOU)
ORDER BY re_four, re_rfou
GO
Avatar
Thierry
Il faut donner un alias dans le FROM.

FROM NOM_SERVEUR_LIE...GPRECEPT as GPRECEPT
--
Thierry


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

Quandje fais ça :

SELECT GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU, GPRECEPT.RE_CODE,
GPRECEPT.RE_COMM, GPRECEPT.RE_LIGN, GPRECEPT.RE_ARTI,
GPRECEPT.RE_DESI, GPRECEPT.RE_NBRE, GPRECEPT.RE_QRST,
GPRECEPT.RE_UQTE, GPRECEPT.RE_CTVA, GPRECEPT.RE_PCDE,
GPRECEPT.RE_UPRI, GPRECEPT.RE_PRHT
FROM NOM_SERVEUR_LIE...GPRECEPT
WHERE GPRECEPT.RE_RFOU = @RE_RFOU
ORDER BY GPRECEPT.RE_FOUR, GPRECEPT.RE_RFOU



Il me dit error 107, il ne connait pas la table GPRECEPT ou l'alias ou le
nom de la table.

Dois-je indiquer quelque chose autrement ?



Avatar
aitoz
Mince !

J'ai encore un dernier probleme.
Quand j'exécute la procédure stockée du serveur avec les paramètres,
ca fonctionne très bien.
Mais quand je lance mon application cliente, sur un poste du réseau avec le
parametre
il m'affiche une erreur system.
Voici le code utilisé :
Dim Dc_SuiviFour As New SqlClient.SqlCommand
Dim Da_SuiviFour As New SqlClient.SqlDataAdapter(Dc_SuiviFour)
Dim Ds_SuiviFour As MyDataset17
Dim MyEtat As SGSA.SC_ST_SuiviRecFour

'Ouverture de la connexion
SqlConnection1.Open()

Dc_SuiviFour.Parameters.Add(New SqlClient.SqlParameter("@T1",
SqlDbType.VarChar, 40)).Value = T1

With Dc_SuiviFour
.Connection = SqlConnection1
.CommandType = CommandType.StoredProcedure
.CommandText = "ps_sgsa_suivifourrecep"
End With

Da_SuiviFour.Fill(Ds_SuiviFour, "element1")

SqlConnection1.Close()

... etc....
Avatar
Thierry
Le paramètre de la proc. stockée s'appelle @T1 ou @RE_RFOU ?

Dc_SuiviFour.Parameters.Add(New SqlClient.SqlParameter("@RE_RFOU ",
SqlDbType.VarChar, 40)).Value
--
Thierry


"aitoz" a écrit dans le message de news:
%
Mince !

J'ai encore un dernier probleme.
Quand j'exécute la procédure stockée du serveur avec les paramètres,
ca fonctionne très bien.
Mais quand je lance mon application cliente, sur un poste du réseau avec
le parametre
il m'affiche une erreur system.
Voici le code utilisé :
Dim Dc_SuiviFour As New SqlClient.SqlCommand
Dim Da_SuiviFour As New SqlClient.SqlDataAdapter(Dc_SuiviFour)
Dim Ds_SuiviFour As MyDataset17
Dim MyEtat As SGSA.SC_ST_SuiviRecFour

'Ouverture de la connexion
SqlConnection1.Open()

Dc_SuiviFour.Parameters.Add(New SqlClient.SqlParameter("@T1",
SqlDbType.VarChar, 40)).Value = T1

With Dc_SuiviFour
.Connection = SqlConnection1
.CommandType = CommandType.StoredProcedure
.CommandText = "ps_sgsa_suivifourrecep"
End With

Da_SuiviFour.Fill(Ds_SuiviFour, "element1")

SqlConnection1.Close()

... etc....




Avatar
aitoz
Voici mon code en VB.NET :

'Définition de l'objet SqlCommand
Dim Dc_SuiviFour As New SqlClient.SqlCommand
Dim Da_SuiviFour As New SqlClient.SqlDataAdapter(Dc_SuiviFour)
Dim Ds_SuiviFour As New MyDataset17
Dim MyEtat As SGSA.SC_ST_SuiviRecFour

'Ouverture de la connexion
SqlConnection1.Open()
Dc_SuiviFour.Parameters.Add(New SqlClient.SqlParameter("@T1",
SqlDbType.VarChar, 40)).Value = T1
Dc_SuiviFour.Parameters.Add(New SqlClient.SqlParameter("@T2",
SqlDbType.VarChar, 40)).Value = T2
With Dc_SuiviFour
.Connection = SqlConnection1
.CommandType = CommandType.StoredProcedure
.CommandText = "ps_sgsa_suivifourrecep"
End With
Da_SuiviFour.Fill(Ds_SuiviFour)ic

Et voici le code de ma procédure stockée :

ALTER PROCEDURE ps_sgsa_suivifourrecep
@T1 VARCHAR(40),
@T2 VARCHAR(40)

AS
SELECT re_four, re_rfou, re_code, re_comm, re_lign, re_arti, re_desi,
re_nbre, re_qrst, re_uqte, re_ctva, re_pcde, re_upri, re_prht
FROM PFLEX...GPRECEPT GPRECEPT_1
WHERE (re_rfou BETWEEN @T1 AND @T2)
ORDER BY re_four, re_rfou

J'ai une erreur systeme au moment ou je fais le FILL.
Et je rappel que la procédure stockée fonctionne très bien quand je
l'execute via le query manager.
Elle fonoctionne très bien avec ces trois instructions :

EXEC ps_sgsa_suivifourrecep 901000, 902000
EXEC ps_sgsa_suivifourrecep '901000', '902000'
EXEC ps_sgsa_suivifourrecep "901000", "902000"

Merci de votre aide.

Pour finir je rappel que je lance le programme sur un poste client.
1 2 3