OVH Cloud OVH Cloud

SQL 2000 : EXEC et FUNCTION

2 réponses
Avatar
Arnaud CAVELIER
Bonjour,

Pour bien comprendre le contexte, voici quelques préliminaires :

Dans mes procédures stockées, j'ai pris l'habitude de créer mes requêtes SQL
en assemblant mes clauses dans des chaines de caractères pour faciliter la
lecture et permettre la création de requêtes complexes.

En fonction de divers paramètres, j'assemble les clauses qui vont bien et au
final je fais un EXEC(@Sql) et cela fonctionne très bien.

J'aimerais étendre ce mode de fonctionnement à la programmation de mes
functions. Or, on ne peut pas exécuter la commande EXEC !

Voici un exemple :
Dans une table SUPPLEMENT, j'ai la colonne FORMULE nvarchar(200) qui
contient une formule du style 'Nb*0.2'
J'aimerais avoir une fonction CALCULE(@Nb,@nSuppl) et qui me retournerait le
résultat du calcul en fonction du paramètre @Nb.

J'ai donc commencé à assembler mes clauses, mais il faut exécuter :
SET @Sql='SELECT @Resu=replace(FORMULE,''Nb'',@Nb) FROM SUPPLEMENT WHERE
nSuppl=@nSuppl'
EXEC(@Sql)
RETURN @Resu

Dans un PS, cela fonction, mais on ne peut pas faire d'EXEC dans une
fonction...

Avez-vous des pistes ?

Merci de votre aide
Arnaud

2 réponses

Avatar
Stephane Le Coustre
bonjours

tu peut executer que des procedure stocker etendue dans une fonction

si tu veut plus ample information sur les fonction va voir dans l'aide de
CREATE FUNCTION
dans la rubrique "NOTES"

"Arnaud CAVELIER" a écrit :

Bonjour,

Pour bien comprendre le contexte, voici quelques préliminaires :

Dans mes procédures stockées, j'ai pris l'habitude de créer mes requêtes SQL
en assemblant mes clauses dans des chaines de caractères pour faciliter la
lecture et permettre la création de requêtes complexes.

En fonction de divers paramètres, j'assemble les clauses qui vont bien et au
final je fais un EXEC(@Sql) et cela fonctionne très bien.

J'aimerais étendre ce mode de fonctionnement à la programmation de mes
functions. Or, on ne peut pas exécuter la commande EXEC !

Voici un exemple :
Dans une table SUPPLEMENT, j'ai la colonne FORMULE nvarchar(200) qui
contient une formule du style 'Nb*0.2'
J'aimerais avoir une fonction CALCULE(@Nb,@nSuppl) et qui me retournerait le
résultat du calcul en fonction du paramètre @Nb.

J'ai donc commencé à assembler mes clauses, mais il faut exécuter :
SET @Sql='SELECT @Resu=replace(FORMULE,''Nb'',@Nb) FROM SUPPLEMENT WHERE
nSuppl=@nSuppl'
EXEC(@Sql)
RETURN @Resu

Dans un PS, cela fonction, mais on ne peut pas faire d'EXEC dans une
fonction...

Avez-vous des pistes ?

Merci de votre aide
Arnaud


Avatar
bruno reiter [MVP]
Cette méthode n'est généralement pas bonne pour des requêtes complexes pour
des raisons de performance, le plan d'execution doit être recréé chaque fois
et le cout peut etre important, surtout si la proc est souvent utilisée, à
plus forte raison en interactif.

br

"Arnaud CAVELIER" wrote in
message news:
Bonjour,

Pour bien comprendre le contexte, voici quelques préliminaires :

Dans mes procédures stockées, j'ai pris l'habitude de créer mes requêtes


SQL
en assemblant mes clauses dans des chaines de caractères pour faciliter la
lecture et permettre la création de requêtes complexes.

En fonction de divers paramètres, j'assemble les clauses qui vont bien et


au
final je fais un EXEC(@Sql) et cela fonctionne très bien.

J'aimerais étendre ce mode de fonctionnement à la programmation de mes
functions. Or, on ne peut pas exécuter la commande EXEC !

Voici un exemple :
Dans une table SUPPLEMENT, j'ai la colonne FORMULE nvarchar(200) qui
contient une formule du style 'Nb*0.2'
J'aimerais avoir une fonction CALCULE(@Nb,@nSuppl) et qui me retournerait


le
résultat du calcul en fonction du paramètre @Nb.

J'ai donc commencé à assembler mes clauses, mais il faut exécuter :
SET @Sql='SELECT @Resu=replace(FORMULE,''Nb'',@Nb) FROM SUPPLEMENT WHERE
nSuppl=@nSuppl'
EXEC(@Sql)
RETURN @Resu

Dans un PS, cela fonction, mais on ne peut pas faire d'EXEC dans une
fonction...

Avez-vous des pistes ?

Merci de votre aide
Arnaud