Etant novice dans les procédures stockées, j'arrive à éxécuter des
procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc]
(
@PremiereDate DATETIME,
@DerniereDate DATETIME,
@NumNatureDispositif int
)
AS
SELECT TOP 100 PERCENT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0)
AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102))
AND (CodeNatureDispositif = @NumNatureDispositif)
OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0)
AND (CodeNatureDispositif = @NumNatureDispositif)
AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102))
ORDER BY [N°DOMAINE], DateDebutFormation
GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des
conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est
normalement générée dynamiquement.
J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie en
appelant la procédure, bout de requête que je récupère comme suit :
@SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête SQL,
j'ai un message me signalant une erreur de syntaxe
SELECT TOP 100 PERCENT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE (MappingON = - 1) @SuiteRequete
AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même
problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une
procédure stockée ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Philippe T [MS]
Bonjour,
Oui mais dans ces conditions il faut faire du SQL dynamique (voir sp_executesql dans l'aide en ligne).
---------------------------------------------------------------------- Philippe TROTIN - Microsoft Service France
"Bruno" wrote in message news:
Bonjour,
Etant novice dans les procédures stockées, j'arrive à éxécuter des procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc] ( @PremiereDate DATETIME, @DerniereDate DATETIME, @NumNatureDispositif int ) AS SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) AND (CodeNatureDispositif = @NumNatureDispositif) OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (CodeNatureDispositif = @NumNatureDispositif) AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) ORDER BY [N°DOMAINE], DateDebutFormation GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est normalement générée dynamiquement. J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie en appelant la procédure, bout de requête que je récupère comme suit : @SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête SQL, j'ai un message me signalant une erreur de syntaxe SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) @SuiteRequete AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une procédure stockée ?
Merci pour votre aide.
Bonjour,
Oui mais dans ces conditions il faut faire du SQL dynamique (voir
sp_executesql dans l'aide en ligne).
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"Bruno" <Bruno@discussions.microsoft.com> wrote in message
news:599A6C50-59CF-46F5-A8D4-5A8A7A2A2B70@microsoft.com...
Bonjour,
Etant novice dans les procédures stockées, j'arrive à éxécuter des
procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc]
(
@PremiereDate DATETIME,
@DerniereDate DATETIME,
@NumNatureDispositif int
)
AS
SELECT TOP 100 PERCENT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0)
AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102))
AND (CodeNatureDispositif = @NumNatureDispositif)
OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0)
AND (CodeNatureDispositif = @NumNatureDispositif)
AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102))
ORDER BY [N°DOMAINE], DateDebutFormation
GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des
conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est
normalement générée dynamiquement.
J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie
en
appelant la procédure, bout de requête que je récupère comme suit :
@SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête
SQL,
j'ai un message me signalant une erreur de syntaxe
SELECT TOP 100 PERCENT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE (MappingON = - 1) @SuiteRequete
AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même
problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une
procédure stockée ?
Oui mais dans ces conditions il faut faire du SQL dynamique (voir sp_executesql dans l'aide en ligne).
---------------------------------------------------------------------- Philippe TROTIN - Microsoft Service France
"Bruno" wrote in message news:
Bonjour,
Etant novice dans les procédures stockées, j'arrive à éxécuter des procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc] ( @PremiereDate DATETIME, @DerniereDate DATETIME, @NumNatureDispositif int ) AS SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) AND (CodeNatureDispositif = @NumNatureDispositif) OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (CodeNatureDispositif = @NumNatureDispositif) AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) ORDER BY [N°DOMAINE], DateDebutFormation GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est normalement générée dynamiquement. J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie en appelant la procédure, bout de requête que je récupère comme suit : @SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête SQL, j'ai un message me signalant une erreur de syntaxe SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) @SuiteRequete AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une procédure stockée ?
Merci pour votre aide.
Fred BROUARD
Votre requête est déjà assez mal écrite...
En effet l'utilisation de fonction de type CONVERT est ici inutile et couteuse ! Vos parenthèses nne servent à rien sauf pour le OR mais dans ce cas à quoi est-il lié ce OR ???
De plus, quel est l'intérêt du TOP 100 PERCENT ??? (à part faire perdre du temps...)
Récrivez de la sorte :
CREATE PROCEDURE [moi].[MaProc] ( @PremiereDate DATETIME, @DerniereDate DATETIME, @NumNatureDispositif int ) AS SELECT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE MappingON = - 1 AND TYPESDEFORMATION.ActionCorrectriceON = 0 AND DateDebutFormation BETWEEN @PremiereDate AND @DerniereDate AND CodeNatureDispositif = @NumNatureDispositif OR MappingON = - 1 AND TYPESDEFORMATION.ActionCorrectriceON = 0 AND CodeNatureDispositif = @NumNatureDispositif AND DateFinFormation BETWEEN @PremiereDate AND @DerniereDate ORDER BY [N°DOMAINE], DateDebutFormation
A +
Bruno a écrit:
Bonjour,
Etant novice dans les procédures stockées, j'arrive à éxécuter des procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc] ( @PremiereDate DATETIME, @DerniereDate DATETIME, @NumNatureDispositif int ) AS SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) AND (CodeNatureDispositif = @NumNatureDispositif) OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (CodeNatureDispositif = @NumNatureDispositif) AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) ORDER BY [N°DOMAINE], DateDebutFormation GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est normalement générée dynamiquement. J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie en appelant la procédure, bout de requête que je récupère comme suit : @SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête SQL, j'ai un message me signalant une erreur de syntaxe SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) @SuiteRequete AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une procédure stockée ?
Merci pour votre aide.
-- 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 ***********************
Votre requête est déjà assez mal écrite...
En effet l'utilisation de fonction de type CONVERT est ici inutile et couteuse !
Vos parenthèses nne servent à rien sauf pour le OR mais dans ce cas à quoi
est-il lié ce OR ???
De plus, quel est l'intérêt du TOP 100 PERCENT ??? (à part faire perdre du temps...)
Récrivez de la sorte :
CREATE PROCEDURE [moi].[MaProc]
(
@PremiereDate DATETIME,
@DerniereDate DATETIME,
@NumNatureDispositif int
)
AS
SELECT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE MappingON = - 1
AND TYPESDEFORMATION.ActionCorrectriceON = 0
AND DateDebutFormation
BETWEEN @PremiereDate AND @DerniereDate
AND CodeNatureDispositif = @NumNatureDispositif
OR MappingON = - 1
AND TYPESDEFORMATION.ActionCorrectriceON = 0
AND CodeNatureDispositif = @NumNatureDispositif
AND DateFinFormation
BETWEEN @PremiereDate AND @DerniereDate
ORDER BY [N°DOMAINE], DateDebutFormation
A +
Bruno a écrit:
Bonjour,
Etant novice dans les procédures stockées, j'arrive à éxécuter des
procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc]
(
@PremiereDate DATETIME,
@DerniereDate DATETIME,
@NumNatureDispositif int
)
AS
SELECT TOP 100 PERCENT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0)
AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102))
AND (CodeNatureDispositif = @NumNatureDispositif)
OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0)
AND (CodeNatureDispositif = @NumNatureDispositif)
AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102))
ORDER BY [N°DOMAINE], DateDebutFormation
GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des
conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est
normalement générée dynamiquement.
J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie en
appelant la procédure, bout de requête que je récupère comme suit :
@SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête SQL,
j'ai un message me signalant une erreur de syntaxe
SELECT TOP 100 PERCENT REFERENCE, DureeModule
FROM TYPESDEFORMATION
WHERE (MappingON = - 1) @SuiteRequete
AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102)
AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même
problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une
procédure stockée ?
Merci pour votre aide.
--
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 ***********************
En effet l'utilisation de fonction de type CONVERT est ici inutile et couteuse ! Vos parenthèses nne servent à rien sauf pour le OR mais dans ce cas à quoi est-il lié ce OR ???
De plus, quel est l'intérêt du TOP 100 PERCENT ??? (à part faire perdre du temps...)
Récrivez de la sorte :
CREATE PROCEDURE [moi].[MaProc] ( @PremiereDate DATETIME, @DerniereDate DATETIME, @NumNatureDispositif int ) AS SELECT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE MappingON = - 1 AND TYPESDEFORMATION.ActionCorrectriceON = 0 AND DateDebutFormation BETWEEN @PremiereDate AND @DerniereDate AND CodeNatureDispositif = @NumNatureDispositif OR MappingON = - 1 AND TYPESDEFORMATION.ActionCorrectriceON = 0 AND CodeNatureDispositif = @NumNatureDispositif AND DateFinFormation BETWEEN @PremiereDate AND @DerniereDate ORDER BY [N°DOMAINE], DateDebutFormation
A +
Bruno a écrit:
Bonjour,
Etant novice dans les procédures stockées, j'arrive à éxécuter des procédures relativement simple :
CREATE PROCEDURE [moi].[MaProc] ( @PremiereDate DATETIME, @DerniereDate DATETIME, @NumNatureDispositif int ) AS SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) AND (CodeNatureDispositif = @NumNatureDispositif) OR (MappingON = - 1) AND (TYPESDEFORMATION.ActionCorrectriceON = 0) AND (CodeNatureDispositif = @NumNatureDispositif) AND (DateFinFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) ORDER BY [N°DOMAINE], DateDebutFormation GO
En revanche, j'utilise des pages asp qui me génère dynamiquement un ou des conditions qui viennent compléter ma requête.
Par exemple, la partie AND (TYPESDEFORMATION.ActionCorrectriceON = 0) est normalement générée dynamiquement. J'ai essayé d'enfermer ce bout de requête dans une variable que j'envoie en appelant la procédure, bout de requête que je récupère comme suit : @SuiteRequete ntext
Mais, lorsque je l'insère, comme les autres variables, dans ma requête SQL, j'ai un message me signalant une erreur de syntaxe SELECT TOP 100 PERCENT REFERENCE, DureeModule FROM TYPESDEFORMATION WHERE (MappingON = - 1) @SuiteRequete AND (DateDebutFormation BETWEEN CONVERT(DATETIME, @PremiereDate, 102) AND CONVERT(DATETIME, @DerniereDate, 102)) etc...
J'ai essayé de rajouter de '+' ou des '||' mais j'ai toujours le même problème.
Est-il possible de rendre dynamique une partie d'un SELECT dans une procédure stockée ?
Merci pour votre aide.
-- 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 ***********************