Existe t-il un moyen de passer un nom de colonne, de table, voire de tri
comme paramètre d'une FONCTION.
J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite un
exec, mais il semble que l'exec ou execute n'est pas possible depuis une
fonction alors que je peux le faire dans une procédure stockée.
Merci d'avance pour votre aide.
Existe t-il un moyen de passer un nom de colonne, de table, voire de tri
comme paramètre d'une FONCTION.
J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite un
exec, mais il semble que l'exec ou execute n'est pas possible depuis une
fonction alors que je peux le faire dans une procédure stockée.
Merci d'avance pour votre aide.
Existe t-il un moyen de passer un nom de colonne, de table, voire de tri
comme paramètre d'une FONCTION.
J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite un
exec, mais il semble que l'exec ou execute n'est pas possible depuis une
fonction alors que je peux le faire dans une procédure stockée.
Merci d'avance pour votre aide.
Si la fonction retourne une table il est possible de l'appeler et de lui
appliquer le tri ensuite :
SELECT * FROM MaFonction() ORDER BY MonChamp
Si il faut aussi lui passer uin nom de table, cela supprime une bonne part
de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
cas, autant générer peut-être du code SQL côté client ?
Patrice
--
"Evariste" a écrit dans le message de
news:
> Existe t-il un moyen de passer un nom de colonne, de table, voire de tri
> comme paramètre d'une FONCTION.
> J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite un
> exec, mais il semble que l'exec ou execute n'est pas possible depuis une
> fonction alors que je peux le faire dans une procédure stockée.
> Merci d'avance pour votre aide.
Si la fonction retourne une table il est possible de l'appeler et de lui
appliquer le tri ensuite :
SELECT * FROM MaFonction() ORDER BY MonChamp
Si il faut aussi lui passer uin nom de table, cela supprime une bonne part
de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
cas, autant générer peut-être du code SQL côté client ?
Patrice
--
"Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message de
news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> Existe t-il un moyen de passer un nom de colonne, de table, voire de tri
> comme paramètre d'une FONCTION.
> J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite un
> exec, mais il semble que l'exec ou execute n'est pas possible depuis une
> fonction alors que je peux le faire dans une procédure stockée.
> Merci d'avance pour votre aide.
Si la fonction retourne une table il est possible de l'appeler et de lui
appliquer le tri ensuite :
SELECT * FROM MaFonction() ORDER BY MonChamp
Si il faut aussi lui passer uin nom de table, cela supprime une bonne part
de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
cas, autant générer peut-être du code SQL côté client ?
Patrice
--
"Evariste" a écrit dans le message de
news:
> Existe t-il un moyen de passer un nom de colonne, de table, voire de tri
> comme paramètre d'une FONCTION.
> J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite un
> exec, mais il semble que l'exec ou execute n'est pas possible depuis une
> fonction alors que je peux le faire dans une procédure stockée.
> Merci d'avance pour votre aide.
disons que l'intérêt n'était pas trop la performance mais la possibilité
d'avoir une seule fonction générique, plutot qu'une mutlitude de fonctions
faisant similairement la même chose.
"Patrice" a écrit :
> Si la fonction retourne une table il est possible de l'appeler et de lui
> appliquer le tri ensuite :
> SELECT * FROM MaFonction() ORDER BY MonChamp
>
> Si il faut aussi lui passer uin nom de table, cela supprime une bonne
> de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
> cas, autant générer peut-être du code SQL côté client ?
>
> Patrice
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > Existe t-il un moyen de passer un nom de colonne, de table, voire de
> > comme paramètre d'une FONCTION.
> > J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite
> > exec, mais il semble que l'exec ou execute n'est pas possible depuis
> > fonction alors que je peux le faire dans une procédure stockée.
> > Merci d'avance pour votre aide.
>
>
>
disons que l'intérêt n'était pas trop la performance mais la possibilité
d'avoir une seule fonction générique, plutot qu'une mutlitude de fonctions
faisant similairement la même chose.
"Patrice" a écrit :
> Si la fonction retourne une table il est possible de l'appeler et de lui
> appliquer le tri ensuite :
> SELECT * FROM MaFonction() ORDER BY MonChamp
>
> Si il faut aussi lui passer uin nom de table, cela supprime une bonne
> de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
> cas, autant générer peut-être du code SQL côté client ?
>
> Patrice
>
> --
>
> "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
> news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > Existe t-il un moyen de passer un nom de colonne, de table, voire de
> > comme paramètre d'une FONCTION.
> > J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite
> > exec, mais il semble que l'exec ou execute n'est pas possible depuis
> > fonction alors que je peux le faire dans une procédure stockée.
> > Merci d'avance pour votre aide.
>
>
>
disons que l'intérêt n'était pas trop la performance mais la possibilité
d'avoir une seule fonction générique, plutot qu'une mutlitude de fonctions
faisant similairement la même chose.
"Patrice" a écrit :
> Si la fonction retourne une table il est possible de l'appeler et de lui
> appliquer le tri ensuite :
> SELECT * FROM MaFonction() ORDER BY MonChamp
>
> Si il faut aussi lui passer uin nom de table, cela supprime une bonne
> de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
> cas, autant générer peut-être du code SQL côté client ?
>
> Patrice
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > Existe t-il un moyen de passer un nom de colonne, de table, voire de
> > comme paramètre d'une FONCTION.
> > J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite
> > exec, mais il semble que l'exec ou execute n'est pas possible depuis
> > fonction alors que je peux le faire dans une procédure stockée.
> > Merci d'avance pour votre aide.
>
>
>
Je pense que le problème est que EXECUTE permettrait de modifier l'état de
la base ce qui n'est pas autorisé.
Que doit retourner cette fonction ?
Patrice
--
"Evariste" a écrit dans le message de
news:
> disons que l'intérêt n'était pas trop la performance mais la possibilité
> d'avoir une seule fonction générique, plutot qu'une mutlitude de fonctions
> faisant similairement la même chose.
>
>
> "Patrice" a écrit :
>
> > Si la fonction retourne une table il est possible de l'appeler et de lui
> > appliquer le tri ensuite :
> > SELECT * FROM MaFonction() ORDER BY MonChamp
> >
> > Si il faut aussi lui passer uin nom de table, cela supprime une bonne
part
> > de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
> > cas, autant générer peut-être du code SQL côté client ?
> >
> > Patrice
> >
> > --
> >
> > "Evariste" a écrit dans le message
de
> > news:
> > > Existe t-il un moyen de passer un nom de colonne, de table, voire de
tri
> > > comme paramètre d'une FONCTION.
> > > J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite
un
> > > exec, mais il semble que l'exec ou execute n'est pas possible depuis
une
> > > fonction alors que je peux le faire dans une procédure stockée.
> > > Merci d'avance pour votre aide.
> >
> >
> >
Je pense que le problème est que EXECUTE permettrait de modifier l'état de
la base ce qui n'est pas autorisé.
Que doit retourner cette fonction ?
Patrice
--
"Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message de
news:EBFD9078-CCFF-4F4B-BA22-2C4310164E05@microsoft.com...
> disons que l'intérêt n'était pas trop la performance mais la possibilité
> d'avoir une seule fonction générique, plutot qu'une mutlitude de fonctions
> faisant similairement la même chose.
>
>
> "Patrice" a écrit :
>
> > Si la fonction retourne une table il est possible de l'appeler et de lui
> > appliquer le tri ensuite :
> > SELECT * FROM MaFonction() ORDER BY MonChamp
> >
> > Si il faut aussi lui passer uin nom de table, cela supprime une bonne
part
> > de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
> > cas, autant générer peut-être du code SQL côté client ?
> >
> > Patrice
> >
> > --
> >
> > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
de
> > news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > > Existe t-il un moyen de passer un nom de colonne, de table, voire de
tri
> > > comme paramètre d'une FONCTION.
> > > J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite
un
> > > exec, mais il semble que l'exec ou execute n'est pas possible depuis
une
> > > fonction alors que je peux le faire dans une procédure stockée.
> > > Merci d'avance pour votre aide.
> >
> >
> >
Je pense que le problème est que EXECUTE permettrait de modifier l'état de
la base ce qui n'est pas autorisé.
Que doit retourner cette fonction ?
Patrice
--
"Evariste" a écrit dans le message de
news:
> disons que l'intérêt n'était pas trop la performance mais la possibilité
> d'avoir une seule fonction générique, plutot qu'une mutlitude de fonctions
> faisant similairement la même chose.
>
>
> "Patrice" a écrit :
>
> > Si la fonction retourne une table il est possible de l'appeler et de lui
> > appliquer le tri ensuite :
> > SELECT * FROM MaFonction() ORDER BY MonChamp
> >
> > Si il faut aussi lui passer uin nom de table, cela supprime une bonne
part
> > de l'intérêt des fonctions et procédures stockées (compilation). Dans ce
> > cas, autant générer peut-être du code SQL côté client ?
> >
> > Patrice
> >
> > --
> >
> > "Evariste" a écrit dans le message
de
> > news:
> > > Existe t-il un moyen de passer un nom de colonne, de table, voire de
tri
> > > comme paramètre d'une FONCTION.
> > > J'ai bien essayé d'écrire ma requete en dynamique et de faire ensuite
un
> > > exec, mais il semble que l'exec ou execute n'est pas possible depuis
une
> > > fonction alors que je peux le faire dans une procédure stockée.
> > > Merci d'avance pour votre aide.
> >
> >
> >
Par exemple, j'ai une table contrat et une table des contractants
et je veux faire select nocontrant, dbo.concatContractant(idcontrat) from
contrat
ou la fonction dbo.concatContractant renvoie la concaténation des
contractants.
Je peux toujours le faire dans le code de l'appli, mais ca serait beaucoup
mieux, si je pouvais le faire depuis une fonction.
Et comme j'ai plusieurs tables liés du meme type, je préfererai également
une fonction ou je peux passer la table lié, et le champ à concaténer
que d'écrire une fonction par type de concaténation.
Merci d'avance.
"Patrice" a écrit :
> Je pense que le problème est que EXECUTE permettrait de modifier l'état
> la base ce qui n'est pas autorisé.
>
> Que doit retourner cette fonction ?
>
> Patrice
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > disons que l'intérêt n'était pas trop la performance mais la
> > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> > faisant similairement la même chose.
> >
> >
> > "Patrice" a écrit :
> >
> > > Si la fonction retourne une table il est possible de l'appeler et de
> > > appliquer le tri ensuite :
> > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > >
> > > Si il faut aussi lui passer uin nom de table, cela supprime une
> part
> > > de l'intérêt des fonctions et procédures stockées (compilation).
> > > cas, autant générer peut-être du code SQL côté client ?
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" a écrit dans le
> de
> > > news:
> > > > Existe t-il un moyen de passer un nom de colonne, de table, voire
> tri
> > > > comme paramètre d'une FONCTION.
> > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> un
> > > > exec, mais il semble que l'exec ou execute n'est pas possible
> une
> > > > fonction alors que je peux le faire dans une procédure stockée.
> > > > Merci d'avance pour votre aide.
> > >
> > >
> > >
>
>
>
Par exemple, j'ai une table contrat et une table des contractants
et je veux faire select nocontrant, dbo.concatContractant(idcontrat) from
contrat
ou la fonction dbo.concatContractant renvoie la concaténation des
contractants.
Je peux toujours le faire dans le code de l'appli, mais ca serait beaucoup
mieux, si je pouvais le faire depuis une fonction.
Et comme j'ai plusieurs tables liés du meme type, je préfererai également
une fonction ou je peux passer la table lié, et le champ à concaténer
que d'écrire une fonction par type de concaténation.
Merci d'avance.
"Patrice" a écrit :
> Je pense que le problème est que EXECUTE permettrait de modifier l'état
> la base ce qui n'est pas autorisé.
>
> Que doit retourner cette fonction ?
>
> Patrice
>
> --
>
> "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
> news:EBFD9078-CCFF-4F4B-BA22-2C4310164E05@microsoft.com...
> > disons que l'intérêt n'était pas trop la performance mais la
> > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> > faisant similairement la même chose.
> >
> >
> > "Patrice" a écrit :
> >
> > > Si la fonction retourne une table il est possible de l'appeler et de
> > > appliquer le tri ensuite :
> > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > >
> > > Si il faut aussi lui passer uin nom de table, cela supprime une
> part
> > > de l'intérêt des fonctions et procédures stockées (compilation).
> > > cas, autant générer peut-être du code SQL côté client ?
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
> de
> > > news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > > > Existe t-il un moyen de passer un nom de colonne, de table, voire
> tri
> > > > comme paramètre d'une FONCTION.
> > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> un
> > > > exec, mais il semble que l'exec ou execute n'est pas possible
> une
> > > > fonction alors que je peux le faire dans une procédure stockée.
> > > > Merci d'avance pour votre aide.
> > >
> > >
> > >
>
>
>
Par exemple, j'ai une table contrat et une table des contractants
et je veux faire select nocontrant, dbo.concatContractant(idcontrat) from
contrat
ou la fonction dbo.concatContractant renvoie la concaténation des
contractants.
Je peux toujours le faire dans le code de l'appli, mais ca serait beaucoup
mieux, si je pouvais le faire depuis une fonction.
Et comme j'ai plusieurs tables liés du meme type, je préfererai également
une fonction ou je peux passer la table lié, et le champ à concaténer
que d'écrire une fonction par type de concaténation.
Merci d'avance.
"Patrice" a écrit :
> Je pense que le problème est que EXECUTE permettrait de modifier l'état
> la base ce qui n'est pas autorisé.
>
> Que doit retourner cette fonction ?
>
> Patrice
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > disons que l'intérêt n'était pas trop la performance mais la
> > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> > faisant similairement la même chose.
> >
> >
> > "Patrice" a écrit :
> >
> > > Si la fonction retourne une table il est possible de l'appeler et de
> > > appliquer le tri ensuite :
> > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > >
> > > Si il faut aussi lui passer uin nom de table, cela supprime une
> part
> > > de l'intérêt des fonctions et procédures stockées (compilation).
> > > cas, autant générer peut-être du code SQL côté client ?
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" a écrit dans le
> de
> > > news:
> > > > Existe t-il un moyen de passer un nom de colonne, de table, voire
> tri
> > > > comme paramètre d'une FONCTION.
> > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> un
> > > > exec, mais il semble que l'exec ou execute n'est pas possible
> une
> > > > fonction alors que je peux le faire dans une procédure stockée.
> > > > Merci d'avance pour votre aide.
> > >
> > >
> > >
>
>
>
Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
fonction pour créer le curseur correspondant ce qui permet ensuite au reste
de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait permettre
d'avoir une seule fonction mais la fonction devra prévoir chaque combinaison
"table", "colonne" possible...
Compare peut-être tout de même avec ce que cela donnerait côté client
(notamment cela soit doit être plutôt simple à faire dans une appli Web).
Patrice
--
"Evariste" a écrit dans le message de
news:
> Par exemple, j'ai une table contrat et une table des contractants
> et je veux faire select nocontrant, dbo.concatContractant(idcontrat) from
> contrat
>
> ou la fonction dbo.concatContractant renvoie la concaténation des
> contractants.
>
> Je peux toujours le faire dans le code de l'appli, mais ca serait beaucoup
> mieux, si je pouvais le faire depuis une fonction.
> Et comme j'ai plusieurs tables liés du meme type, je préfererai également
> une fonction ou je peux passer la table lié, et le champ à concaténer
plutot
> que d'écrire une fonction par type de concaténation.
>
> Merci d'avance.
>
> "Patrice" a écrit :
>
> > Je pense que le problème est que EXECUTE permettrait de modifier l'état
de
> > la base ce qui n'est pas autorisé.
> >
> > Que doit retourner cette fonction ?
> >
> > Patrice
> >
> > --
> >
> > "Evariste" a écrit dans le message
de
> > news:
> > > disons que l'intérêt n'était pas trop la performance mais la
possibilité
> > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
fonctions
> > > faisant similairement la même chose.
> > >
> > >
> > > "Patrice" a écrit :
> > >
> > > > Si la fonction retourne une table il est possible de l'appeler et de
lui
> > > > appliquer le tri ensuite :
> > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > >
> > > > Si il faut aussi lui passer uin nom de table, cela supprime une
bonne
> > part
> > > > de l'intérêt des fonctions et procédures stockées (compilation).
Dans ce
> > > > cas, autant générer peut-être du code SQL côté client ?
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Evariste" a écrit dans le
message
> > de
> > > > news:
> > > > > Existe t-il un moyen de passer un nom de colonne, de table, voire
de
> > tri
> > > > > comme paramètre d'une FONCTION.
> > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
ensuite
> > un
> > > > > exec, mais il semble que l'exec ou execute n'est pas possible
depuis
> > une
> > > > > fonction alors que je peux le faire dans une procédure stockée.
> > > > > Merci d'avance pour votre aide.
> > > >
> > > >
> > > >
> >
> >
> >
Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
fonction pour créer le curseur correspondant ce qui permet ensuite au reste
de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait permettre
d'avoir une seule fonction mais la fonction devra prévoir chaque combinaison
"table", "colonne" possible...
Compare peut-être tout de même avec ce que cela donnerait côté client
(notamment cela soit doit être plutôt simple à faire dans une appli Web).
Patrice
--
"Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message de
news:48A69CEB-00FB-4D9E-A3CC-D03371F011BF@microsoft.com...
> Par exemple, j'ai une table contrat et une table des contractants
> et je veux faire select nocontrant, dbo.concatContractant(idcontrat) from
> contrat
>
> ou la fonction dbo.concatContractant renvoie la concaténation des
> contractants.
>
> Je peux toujours le faire dans le code de l'appli, mais ca serait beaucoup
> mieux, si je pouvais le faire depuis une fonction.
> Et comme j'ai plusieurs tables liés du meme type, je préfererai également
> une fonction ou je peux passer la table lié, et le champ à concaténer
plutot
> que d'écrire une fonction par type de concaténation.
>
> Merci d'avance.
>
> "Patrice" a écrit :
>
> > Je pense que le problème est que EXECUTE permettrait de modifier l'état
de
> > la base ce qui n'est pas autorisé.
> >
> > Que doit retourner cette fonction ?
> >
> > Patrice
> >
> > --
> >
> > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
de
> > news:EBFD9078-CCFF-4F4B-BA22-2C4310164E05@microsoft.com...
> > > disons que l'intérêt n'était pas trop la performance mais la
possibilité
> > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
fonctions
> > > faisant similairement la même chose.
> > >
> > >
> > > "Patrice" a écrit :
> > >
> > > > Si la fonction retourne une table il est possible de l'appeler et de
lui
> > > > appliquer le tri ensuite :
> > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > >
> > > > Si il faut aussi lui passer uin nom de table, cela supprime une
bonne
> > part
> > > > de l'intérêt des fonctions et procédures stockées (compilation).
Dans ce
> > > > cas, autant générer peut-être du code SQL côté client ?
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
message
> > de
> > > > news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > > > > Existe t-il un moyen de passer un nom de colonne, de table, voire
de
> > tri
> > > > > comme paramètre d'une FONCTION.
> > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
ensuite
> > un
> > > > > exec, mais il semble que l'exec ou execute n'est pas possible
depuis
> > une
> > > > > fonction alors que je peux le faire dans une procédure stockée.
> > > > > Merci d'avance pour votre aide.
> > > >
> > > >
> > > >
> >
> >
> >
Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
fonction pour créer le curseur correspondant ce qui permet ensuite au reste
de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait permettre
d'avoir une seule fonction mais la fonction devra prévoir chaque combinaison
"table", "colonne" possible...
Compare peut-être tout de même avec ce que cela donnerait côté client
(notamment cela soit doit être plutôt simple à faire dans une appli Web).
Patrice
--
"Evariste" a écrit dans le message de
news:
> Par exemple, j'ai une table contrat et une table des contractants
> et je veux faire select nocontrant, dbo.concatContractant(idcontrat) from
> contrat
>
> ou la fonction dbo.concatContractant renvoie la concaténation des
> contractants.
>
> Je peux toujours le faire dans le code de l'appli, mais ca serait beaucoup
> mieux, si je pouvais le faire depuis une fonction.
> Et comme j'ai plusieurs tables liés du meme type, je préfererai également
> une fonction ou je peux passer la table lié, et le champ à concaténer
plutot
> que d'écrire une fonction par type de concaténation.
>
> Merci d'avance.
>
> "Patrice" a écrit :
>
> > Je pense que le problème est que EXECUTE permettrait de modifier l'état
de
> > la base ce qui n'est pas autorisé.
> >
> > Que doit retourner cette fonction ?
> >
> > Patrice
> >
> > --
> >
> > "Evariste" a écrit dans le message
de
> > news:
> > > disons que l'intérêt n'était pas trop la performance mais la
possibilité
> > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
fonctions
> > > faisant similairement la même chose.
> > >
> > >
> > > "Patrice" a écrit :
> > >
> > > > Si la fonction retourne une table il est possible de l'appeler et de
lui
> > > > appliquer le tri ensuite :
> > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > >
> > > > Si il faut aussi lui passer uin nom de table, cela supprime une
bonne
> > part
> > > > de l'intérêt des fonctions et procédures stockées (compilation).
Dans ce
> > > > cas, autant générer peut-être du code SQL côté client ?
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Evariste" a écrit dans le
message
> > de
> > > > news:
> > > > > Existe t-il un moyen de passer un nom de colonne, de table, voire
de
> > tri
> > > > > comme paramètre d'une FONCTION.
> > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
ensuite
> > un
> > > > > exec, mais il semble que l'exec ou execute n'est pas possible
depuis
> > une
> > > > > fonction alors que je peux le faire dans une procédure stockée.
> > > > > Merci d'avance pour votre aide.
> > > >
> > > >
> > > >
> >
> >
> >
Merci pour ton aide, j'ai cependant une derniere question sur le sujet.
Via l'analyseur de requete sur la base master, je vois dans les procédure
stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté de
l'appeler depuis ma fonction. Je compile sans problème mais à l'execution
ma fonction j'ai le message suivant :
"Seules les fonctions et les procédures étendues peuvent être exécutées à
partir d'une fonction."
"Patrice" a écrit :
> Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
> fonction pour créer le curseur correspondant ce qui permet ensuite au
> de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
> d'avoir une seule fonction mais la fonction devra prévoir chaque
> "table", "colonne" possible...
>
> Compare peut-être tout de même avec ce que cela donnerait côté client
> (notamment cela soit doit être plutôt simple à faire dans une appli
>
> Patrice
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > Par exemple, j'ai une table contrat et une table des contractants
> > et je veux faire select nocontrant, dbo.concatContractant(idcontrat)
> > contrat
> >
> > ou la fonction dbo.concatContractant renvoie la concaténation des
> > contractants.
> >
> > Je peux toujours le faire dans le code de l'appli, mais ca serait
> > mieux, si je pouvais le faire depuis une fonction.
> > Et comme j'ai plusieurs tables liés du meme type, je préfererai
> > une fonction ou je peux passer la table lié, et le champ à concaténer
> plutot
> > que d'écrire une fonction par type de concaténation.
> >
> > Merci d'avance.
> >
> > "Patrice" a écrit :
> >
> > > Je pense que le problème est que EXECUTE permettrait de modifier
> de
> > > la base ce qui n'est pas autorisé.
> > >
> > > Que doit retourner cette fonction ?
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" a écrit dans le
> de
> > > news:
> > > > disons que l'intérêt n'était pas trop la performance mais la
> possibilité
> > > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> fonctions
> > > > faisant similairement la même chose.
> > > >
> > > >
> > > > "Patrice" a écrit :
> > > >
> > > > > Si la fonction retourne une table il est possible de l'appeler
> lui
> > > > > appliquer le tri ensuite :
> > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > >
> > > > > Si il faut aussi lui passer uin nom de table, cela supprime une
> bonne
> > > part
> > > > > de l'intérêt des fonctions et procédures stockées (compilation).
> Dans ce
> > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > >
> > > > > Patrice
> > > > >
> > > > > --
> > > > >
> > > > > "Evariste" a écrit dans le
> message
> > > de
> > > > > news:
> > > > > > Existe t-il un moyen de passer un nom de colonne, de table,
> de
> > > tri
> > > > > > comme paramètre d'une FONCTION.
> > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> ensuite
> > > un
> > > > > > exec, mais il semble que l'exec ou execute n'est pas possible
> depuis
> > > une
> > > > > > fonction alors que je peux le faire dans une procédure
> > > > > > Merci d'avance pour votre aide.
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>
Merci pour ton aide, j'ai cependant une derniere question sur le sujet.
Via l'analyseur de requete sur la base master, je vois dans les procédure
stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté de
l'appeler depuis ma fonction. Je compile sans problème mais à l'execution
ma fonction j'ai le message suivant :
"Seules les fonctions et les procédures étendues peuvent être exécutées à
partir d'une fonction."
"Patrice" a écrit :
> Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
> fonction pour créer le curseur correspondant ce qui permet ensuite au
> de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
> d'avoir une seule fonction mais la fonction devra prévoir chaque
> "table", "colonne" possible...
>
> Compare peut-être tout de même avec ce que cela donnerait côté client
> (notamment cela soit doit être plutôt simple à faire dans une appli
>
> Patrice
>
> --
>
> "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
> news:48A69CEB-00FB-4D9E-A3CC-D03371F011BF@microsoft.com...
> > Par exemple, j'ai une table contrat et une table des contractants
> > et je veux faire select nocontrant, dbo.concatContractant(idcontrat)
> > contrat
> >
> > ou la fonction dbo.concatContractant renvoie la concaténation des
> > contractants.
> >
> > Je peux toujours le faire dans le code de l'appli, mais ca serait
> > mieux, si je pouvais le faire depuis une fonction.
> > Et comme j'ai plusieurs tables liés du meme type, je préfererai
> > une fonction ou je peux passer la table lié, et le champ à concaténer
> plutot
> > que d'écrire une fonction par type de concaténation.
> >
> > Merci d'avance.
> >
> > "Patrice" a écrit :
> >
> > > Je pense que le problème est que EXECUTE permettrait de modifier
> de
> > > la base ce qui n'est pas autorisé.
> > >
> > > Que doit retourner cette fonction ?
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
> de
> > > news:EBFD9078-CCFF-4F4B-BA22-2C4310164E05@microsoft.com...
> > > > disons que l'intérêt n'était pas trop la performance mais la
> possibilité
> > > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> fonctions
> > > > faisant similairement la même chose.
> > > >
> > > >
> > > > "Patrice" a écrit :
> > > >
> > > > > Si la fonction retourne une table il est possible de l'appeler
> lui
> > > > > appliquer le tri ensuite :
> > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > >
> > > > > Si il faut aussi lui passer uin nom de table, cela supprime une
> bonne
> > > part
> > > > > de l'intérêt des fonctions et procédures stockées (compilation).
> Dans ce
> > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > >
> > > > > Patrice
> > > > >
> > > > > --
> > > > >
> > > > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
> message
> > > de
> > > > > news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > > > > > Existe t-il un moyen de passer un nom de colonne, de table,
> de
> > > tri
> > > > > > comme paramètre d'une FONCTION.
> > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> ensuite
> > > un
> > > > > > exec, mais il semble que l'exec ou execute n'est pas possible
> depuis
> > > une
> > > > > > fonction alors que je peux le faire dans une procédure
> > > > > > Merci d'avance pour votre aide.
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>
Merci pour ton aide, j'ai cependant une derniere question sur le sujet.
Via l'analyseur de requete sur la base master, je vois dans les procédure
stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté de
l'appeler depuis ma fonction. Je compile sans problème mais à l'execution
ma fonction j'ai le message suivant :
"Seules les fonctions et les procédures étendues peuvent être exécutées à
partir d'une fonction."
"Patrice" a écrit :
> Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
> fonction pour créer le curseur correspondant ce qui permet ensuite au
> de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
> d'avoir une seule fonction mais la fonction devra prévoir chaque
> "table", "colonne" possible...
>
> Compare peut-être tout de même avec ce que cela donnerait côté client
> (notamment cela soit doit être plutôt simple à faire dans une appli
>
> Patrice
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > Par exemple, j'ai une table contrat et une table des contractants
> > et je veux faire select nocontrant, dbo.concatContractant(idcontrat)
> > contrat
> >
> > ou la fonction dbo.concatContractant renvoie la concaténation des
> > contractants.
> >
> > Je peux toujours le faire dans le code de l'appli, mais ca serait
> > mieux, si je pouvais le faire depuis une fonction.
> > Et comme j'ai plusieurs tables liés du meme type, je préfererai
> > une fonction ou je peux passer la table lié, et le champ à concaténer
> plutot
> > que d'écrire une fonction par type de concaténation.
> >
> > Merci d'avance.
> >
> > "Patrice" a écrit :
> >
> > > Je pense que le problème est que EXECUTE permettrait de modifier
> de
> > > la base ce qui n'est pas autorisé.
> > >
> > > Que doit retourner cette fonction ?
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" a écrit dans le
> de
> > > news:
> > > > disons que l'intérêt n'était pas trop la performance mais la
> possibilité
> > > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> fonctions
> > > > faisant similairement la même chose.
> > > >
> > > >
> > > > "Patrice" a écrit :
> > > >
> > > > > Si la fonction retourne une table il est possible de l'appeler
> lui
> > > > > appliquer le tri ensuite :
> > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > >
> > > > > Si il faut aussi lui passer uin nom de table, cela supprime une
> bonne
> > > part
> > > > > de l'intérêt des fonctions et procédures stockées (compilation).
> Dans ce
> > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > >
> > > > > Patrice
> > > > >
> > > > > --
> > > > >
> > > > > "Evariste" a écrit dans le
> message
> > > de
> > > > > news:
> > > > > > Existe t-il un moyen de passer un nom de colonne, de table,
> de
> > > tri
> > > > > > comme paramètre d'une FONCTION.
> > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> ensuite
> > > un
> > > > > > exec, mais il semble que l'exec ou execute n'est pas possible
> depuis
> > > une
> > > > > > fonction alors que je peux le faire dans une procédure
> > > > > > Merci d'avance pour votre aide.
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>
D'après la doc :
Les instructions suivantes sont autorisées dans le corps d'une fonction
multi-instructions. Les instructions ne figurant pas dans la liste suivante
ne sont pas autorisées dans le corps d'une fonction :
a.. Instructions d'affectation
b.. les instructions de contrôle de flux ;
c.. Instructions DECLARE définissant des curseurs et des variables de
données locaux à la fonction
d.. Instructions SELECT contenant des listes de sélection avec des
expressions qui affectent des valeurs à des variables locales à la fonction
e.. Opérations de curseur faisant référence à des curseurs locaux
déclarés, ouverts, fermés et désalloués dans la fonction. Seules les
instructions FETCH affectant des valeurs aux variables locales à l'aide de
la clause INTO sont autorisées ; les instructions FETCH qui renvoient des
données au client ne sont pas autorisées.
f.. Instructions INSERT, UPDATE et DELETE modifiant les variables table
locales à la fonction
g.. Instructions EXECUTE appelant des procédures stockées étendues
--
"Evariste" a écrit dans le message de
news:
> Merci pour ton aide, j'ai cependant une derniere question sur le sujet.
> Via l'analyseur de requete sur la base master, je vois dans les procédure
> stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté de
> l'appeler depuis ma fonction. Je compile sans problème mais à l'execution
de
> ma fonction j'ai le message suivant :
>
> "Seules les fonctions et les procédures étendues peuvent être exécutées à
> partir d'une fonction."
>
> "Patrice" a écrit :
>
> > Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
> > fonction pour créer le curseur correspondant ce qui permet ensuite au
reste
> > de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
permettre
> > d'avoir une seule fonction mais la fonction devra prévoir chaque
combinaison
> > "table", "colonne" possible...
> >
> > Compare peut-être tout de même avec ce que cela donnerait côté client
> > (notamment cela soit doit être plutôt simple à faire dans une appli
Web).
> >
> > Patrice
> >
> > --
> >
> > "Evariste" a écrit dans le message
de
> > news:
> > > Par exemple, j'ai une table contrat et une table des contractants
> > > et je veux faire select nocontrant, dbo.concatContractant(idcontrat)
from
> > > contrat
> > >
> > > ou la fonction dbo.concatContractant renvoie la concaténation des
> > > contractants.
> > >
> > > Je peux toujours le faire dans le code de l'appli, mais ca serait
beaucoup
> > > mieux, si je pouvais le faire depuis une fonction.
> > > Et comme j'ai plusieurs tables liés du meme type, je préfererai
également
> > > une fonction ou je peux passer la table lié, et le champ à concaténer
> > plutot
> > > que d'écrire une fonction par type de concaténation.
> > >
> > > Merci d'avance.
> > >
> > > "Patrice" a écrit :
> > >
> > > > Je pense que le problème est que EXECUTE permettrait de modifier
l'état
> > de
> > > > la base ce qui n'est pas autorisé.
> > > >
> > > > Que doit retourner cette fonction ?
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Evariste" a écrit dans le
message
> > de
> > > > news:
> > > > > disons que l'intérêt n'était pas trop la performance mais la
> > possibilité
> > > > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> > fonctions
> > > > > faisant similairement la même chose.
> > > > >
> > > > >
> > > > > "Patrice" a écrit :
> > > > >
> > > > > > Si la fonction retourne une table il est possible de l'appeler
et de
> > lui
> > > > > > appliquer le tri ensuite :
> > > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > > >
> > > > > > Si il faut aussi lui passer uin nom de table, cela supprime une
> > bonne
> > > > part
> > > > > > de l'intérêt des fonctions et procédures stockées (compilation).
> > Dans ce
> > > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > > >
> > > > > > Patrice
> > > > > >
> > > > > > --
> > > > > >
> > > > > > "Evariste" a écrit dans le
> > message
> > > > de
> > > > > > news:
> > > > > > > Existe t-il un moyen de passer un nom de colonne, de table,
voire
> > de
> > > > tri
> > > > > > > comme paramètre d'une FONCTION.
> > > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> > ensuite
> > > > un
> > > > > > > exec, mais il semble que l'exec ou execute n'est pas possible
> > depuis
> > > > une
> > > > > > > fonction alors que je peux le faire dans une procédure
stockée.
> > > > > > > Merci d'avance pour votre aide.
> > > > > >
> > > > > >
> > > > > >
> > > >
> > > >
> > > >
> >
> >
> >
D'après la doc :
Les instructions suivantes sont autorisées dans le corps d'une fonction
multi-instructions. Les instructions ne figurant pas dans la liste suivante
ne sont pas autorisées dans le corps d'une fonction :
a.. Instructions d'affectation
b.. les instructions de contrôle de flux ;
c.. Instructions DECLARE définissant des curseurs et des variables de
données locaux à la fonction
d.. Instructions SELECT contenant des listes de sélection avec des
expressions qui affectent des valeurs à des variables locales à la fonction
e.. Opérations de curseur faisant référence à des curseurs locaux
déclarés, ouverts, fermés et désalloués dans la fonction. Seules les
instructions FETCH affectant des valeurs aux variables locales à l'aide de
la clause INTO sont autorisées ; les instructions FETCH qui renvoient des
données au client ne sont pas autorisées.
f.. Instructions INSERT, UPDATE et DELETE modifiant les variables table
locales à la fonction
g.. Instructions EXECUTE appelant des procédures stockées étendues
--
"Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message de
news:356889AE-492B-406F-84B0-2AD72D3BA675@microsoft.com...
> Merci pour ton aide, j'ai cependant une derniere question sur le sujet.
> Via l'analyseur de requete sur la base master, je vois dans les procédure
> stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté de
> l'appeler depuis ma fonction. Je compile sans problème mais à l'execution
de
> ma fonction j'ai le message suivant :
>
> "Seules les fonctions et les procédures étendues peuvent être exécutées à
> partir d'une fonction."
>
> "Patrice" a écrit :
>
> > Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
> > fonction pour créer le curseur correspondant ce qui permet ensuite au
reste
> > de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
permettre
> > d'avoir une seule fonction mais la fonction devra prévoir chaque
combinaison
> > "table", "colonne" possible...
> >
> > Compare peut-être tout de même avec ce que cela donnerait côté client
> > (notamment cela soit doit être plutôt simple à faire dans une appli
Web).
> >
> > Patrice
> >
> > --
> >
> > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
de
> > news:48A69CEB-00FB-4D9E-A3CC-D03371F011BF@microsoft.com...
> > > Par exemple, j'ai une table contrat et une table des contractants
> > > et je veux faire select nocontrant, dbo.concatContractant(idcontrat)
from
> > > contrat
> > >
> > > ou la fonction dbo.concatContractant renvoie la concaténation des
> > > contractants.
> > >
> > > Je peux toujours le faire dans le code de l'appli, mais ca serait
beaucoup
> > > mieux, si je pouvais le faire depuis une fonction.
> > > Et comme j'ai plusieurs tables liés du meme type, je préfererai
également
> > > une fonction ou je peux passer la table lié, et le champ à concaténer
> > plutot
> > > que d'écrire une fonction par type de concaténation.
> > >
> > > Merci d'avance.
> > >
> > > "Patrice" a écrit :
> > >
> > > > Je pense que le problème est que EXECUTE permettrait de modifier
l'état
> > de
> > > > la base ce qui n'est pas autorisé.
> > > >
> > > > Que doit retourner cette fonction ?
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
message
> > de
> > > > news:EBFD9078-CCFF-4F4B-BA22-2C4310164E05@microsoft.com...
> > > > > disons que l'intérêt n'était pas trop la performance mais la
> > possibilité
> > > > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> > fonctions
> > > > > faisant similairement la même chose.
> > > > >
> > > > >
> > > > > "Patrice" a écrit :
> > > > >
> > > > > > Si la fonction retourne une table il est possible de l'appeler
et de
> > lui
> > > > > > appliquer le tri ensuite :
> > > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > > >
> > > > > > Si il faut aussi lui passer uin nom de table, cela supprime une
> > bonne
> > > > part
> > > > > > de l'intérêt des fonctions et procédures stockées (compilation).
> > Dans ce
> > > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > > >
> > > > > > Patrice
> > > > > >
> > > > > > --
> > > > > >
> > > > > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
> > message
> > > > de
> > > > > > news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > > > > > > Existe t-il un moyen de passer un nom de colonne, de table,
voire
> > de
> > > > tri
> > > > > > > comme paramètre d'une FONCTION.
> > > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> > ensuite
> > > > un
> > > > > > > exec, mais il semble que l'exec ou execute n'est pas possible
> > depuis
> > > > une
> > > > > > > fonction alors que je peux le faire dans une procédure
stockée.
> > > > > > > Merci d'avance pour votre aide.
> > > > > >
> > > > > >
> > > > > >
> > > >
> > > >
> > > >
> >
> >
> >
D'après la doc :
Les instructions suivantes sont autorisées dans le corps d'une fonction
multi-instructions. Les instructions ne figurant pas dans la liste suivante
ne sont pas autorisées dans le corps d'une fonction :
a.. Instructions d'affectation
b.. les instructions de contrôle de flux ;
c.. Instructions DECLARE définissant des curseurs et des variables de
données locaux à la fonction
d.. Instructions SELECT contenant des listes de sélection avec des
expressions qui affectent des valeurs à des variables locales à la fonction
e.. Opérations de curseur faisant référence à des curseurs locaux
déclarés, ouverts, fermés et désalloués dans la fonction. Seules les
instructions FETCH affectant des valeurs aux variables locales à l'aide de
la clause INTO sont autorisées ; les instructions FETCH qui renvoient des
données au client ne sont pas autorisées.
f.. Instructions INSERT, UPDATE et DELETE modifiant les variables table
locales à la fonction
g.. Instructions EXECUTE appelant des procédures stockées étendues
--
"Evariste" a écrit dans le message de
news:
> Merci pour ton aide, j'ai cependant une derniere question sur le sujet.
> Via l'analyseur de requete sur la base master, je vois dans les procédure
> stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté de
> l'appeler depuis ma fonction. Je compile sans problème mais à l'execution
de
> ma fonction j'ai le message suivant :
>
> "Seules les fonctions et les procédures étendues peuvent être exécutées à
> partir d'une fonction."
>
> "Patrice" a écrit :
>
> > Pour l'instant je ne vois pas mieux que de tester les paramètres dans la
> > fonction pour créer le curseur correspondant ce qui permet ensuite au
reste
> > de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
permettre
> > d'avoir une seule fonction mais la fonction devra prévoir chaque
combinaison
> > "table", "colonne" possible...
> >
> > Compare peut-être tout de même avec ce que cela donnerait côté client
> > (notamment cela soit doit être plutôt simple à faire dans une appli
Web).
> >
> > Patrice
> >
> > --
> >
> > "Evariste" a écrit dans le message
de
> > news:
> > > Par exemple, j'ai une table contrat et une table des contractants
> > > et je veux faire select nocontrant, dbo.concatContractant(idcontrat)
from
> > > contrat
> > >
> > > ou la fonction dbo.concatContractant renvoie la concaténation des
> > > contractants.
> > >
> > > Je peux toujours le faire dans le code de l'appli, mais ca serait
beaucoup
> > > mieux, si je pouvais le faire depuis une fonction.
> > > Et comme j'ai plusieurs tables liés du meme type, je préfererai
également
> > > une fonction ou je peux passer la table lié, et le champ à concaténer
> > plutot
> > > que d'écrire une fonction par type de concaténation.
> > >
> > > Merci d'avance.
> > >
> > > "Patrice" a écrit :
> > >
> > > > Je pense que le problème est que EXECUTE permettrait de modifier
l'état
> > de
> > > > la base ce qui n'est pas autorisé.
> > > >
> > > > Que doit retourner cette fonction ?
> > > >
> > > > Patrice
> > > >
> > > > --
> > > >
> > > > "Evariste" a écrit dans le
message
> > de
> > > > news:
> > > > > disons que l'intérêt n'était pas trop la performance mais la
> > possibilité
> > > > > d'avoir une seule fonction générique, plutot qu'une mutlitude de
> > fonctions
> > > > > faisant similairement la même chose.
> > > > >
> > > > >
> > > > > "Patrice" a écrit :
> > > > >
> > > > > > Si la fonction retourne une table il est possible de l'appeler
et de
> > lui
> > > > > > appliquer le tri ensuite :
> > > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > > >
> > > > > > Si il faut aussi lui passer uin nom de table, cela supprime une
> > bonne
> > > > part
> > > > > > de l'intérêt des fonctions et procédures stockées (compilation).
> > Dans ce
> > > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > > >
> > > > > > Patrice
> > > > > >
> > > > > > --
> > > > > >
> > > > > > "Evariste" a écrit dans le
> > message
> > > > de
> > > > > > news:
> > > > > > > Existe t-il un moyen de passer un nom de colonne, de table,
voire
> > de
> > > > tri
> > > > > > > comme paramètre d'une FONCTION.
> > > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de faire
> > ensuite
> > > > un
> > > > > > > exec, mais il semble que l'exec ou execute n'est pas possible
> > depuis
> > > > une
> > > > > > > fonction alors que je peux le faire dans une procédure
stockée.
> > > > > > > Merci d'avance pour votre aide.
> > > > > >
> > > > > >
> > > > > >
> > > >
> > > >
> > > >
> >
> >
> >
Mais dans la coc on a également :
Appel de procédures stockées étendues à partir des fonctions
Une procédure stockée étendue appelée à partir d'une fonction ne peut pas
renvoyer de jeux de résultats au client. Les API ODS qui renvoient des
de résultats au client renvoient FAIL. La procédure stockée étendue peut
reconnecter à Microsoft® SQL ServerT ; toutefois, elle ne doit pas
la même transaction que la fonction l'ayant appelée.
Et comme ce qui m'interesse, c'est de retourner un résultat, j'ai plus
aller dormir.
Merci pour toutes les infos.
"Patrice" a écrit :
> D'après la doc :
> Les instructions suivantes sont autorisées dans le corps d'une fonction
> multi-instructions. Les instructions ne figurant pas dans la liste
> ne sont pas autorisées dans le corps d'une fonction :
>
> a.. Instructions d'affectation
>
>
> b.. les instructions de contrôle de flux ;
>
>
> c.. Instructions DECLARE définissant des curseurs et des variables de
> données locaux à la fonction
>
>
> d.. Instructions SELECT contenant des listes de sélection avec des
> expressions qui affectent des valeurs à des variables locales à la
>
>
> e.. Opérations de curseur faisant référence à des curseurs locaux
> déclarés, ouverts, fermés et désalloués dans la fonction. Seules les
> instructions FETCH affectant des valeurs aux variables locales à l'aide
> la clause INTO sont autorisées ; les instructions FETCH qui renvoient
> données au client ne sont pas autorisées.
>
>
> f.. Instructions INSERT, UPDATE et DELETE modifiant les variables
> locales à la fonction
>
>
> g.. Instructions EXECUTE appelant des procédures stockées étendues
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > Merci pour ton aide, j'ai cependant une derniere question sur le
> > Via l'analyseur de requete sur la base master, je vois dans les
> > stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté
> > l'appeler depuis ma fonction. Je compile sans problème mais à
> de
> > ma fonction j'ai le message suivant :
> >
> > "Seules les fonctions et les procédures étendues peuvent être
> > partir d'une fonction."
> >
> > "Patrice" a écrit :
> >
> > > Pour l'instant je ne vois pas mieux que de tester les paramètres
> > > fonction pour créer le curseur correspondant ce qui permet ensuite
> reste
> > > de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
> permettre
> > > d'avoir une seule fonction mais la fonction devra prévoir chaque
> combinaison
> > > "table", "colonne" possible...
> > >
> > > Compare peut-être tout de même avec ce que cela donnerait côté
> > > (notamment cela soit doit être plutôt simple à faire dans une appli
> Web).
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" a écrit dans le
> de
> > > news:
> > > > Par exemple, j'ai une table contrat et une table des contractants
> > > > et je veux faire select nocontrant,
> from
> > > > contrat
> > > >
> > > > ou la fonction dbo.concatContractant renvoie la concaténation des
> > > > contractants.
> > > >
> > > > Je peux toujours le faire dans le code de l'appli, mais ca serait
> beaucoup
> > > > mieux, si je pouvais le faire depuis une fonction.
> > > > Et comme j'ai plusieurs tables liés du meme type, je préfererai
> également
> > > > une fonction ou je peux passer la table lié, et le champ à
> > > plutot
> > > > que d'écrire une fonction par type de concaténation.
> > > >
> > > > Merci d'avance.
> > > >
> > > > "Patrice" a écrit :
> > > >
> > > > > Je pense que le problème est que EXECUTE permettrait de modifier
> l'état
> > > de
> > > > > la base ce qui n'est pas autorisé.
> > > > >
> > > > > Que doit retourner cette fonction ?
> > > > >
> > > > > Patrice
> > > > >
> > > > > --
> > > > >
> > > > > "Evariste" a écrit dans le
> message
> > > de
> > > > > news:
> > > > > > disons que l'intérêt n'était pas trop la performance mais la
> > > possibilité
> > > > > > d'avoir une seule fonction générique, plutot qu'une mutlitude
> > > fonctions
> > > > > > faisant similairement la même chose.
> > > > > >
> > > > > >
> > > > > > "Patrice" a écrit :
> > > > > >
> > > > > > > Si la fonction retourne une table il est possible de
> et de
> > > lui
> > > > > > > appliquer le tri ensuite :
> > > > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > > > >
> > > > > > > Si il faut aussi lui passer uin nom de table, cela supprime
> > > bonne
> > > > > part
> > > > > > > de l'intérêt des fonctions et procédures stockées
> > > Dans ce
> > > > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > > > >
> > > > > > > Patrice
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > "Evariste" a écrit dans
> > > message
> > > > > de
> > > > > > > news:
> > > > > > > > Existe t-il un moyen de passer un nom de colonne, de
> voire
> > > de
> > > > > tri
> > > > > > > > comme paramètre d'une FONCTION.
> > > > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de
> > > ensuite
> > > > > un
> > > > > > > > exec, mais il semble que l'exec ou execute n'est pas
> > > depuis
> > > > > une
> > > > > > > > fonction alors que je peux le faire dans une procédure
> stockée.
> > > > > > > > Merci d'avance pour votre aide.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>
Mais dans la coc on a également :
Appel de procédures stockées étendues à partir des fonctions
Une procédure stockée étendue appelée à partir d'une fonction ne peut pas
renvoyer de jeux de résultats au client. Les API ODS qui renvoient des
de résultats au client renvoient FAIL. La procédure stockée étendue peut
reconnecter à Microsoft® SQL ServerT ; toutefois, elle ne doit pas
la même transaction que la fonction l'ayant appelée.
Et comme ce qui m'interesse, c'est de retourner un résultat, j'ai plus
aller dormir.
Merci pour toutes les infos.
"Patrice" a écrit :
> D'après la doc :
> Les instructions suivantes sont autorisées dans le corps d'une fonction
> multi-instructions. Les instructions ne figurant pas dans la liste
> ne sont pas autorisées dans le corps d'une fonction :
>
> a.. Instructions d'affectation
>
>
> b.. les instructions de contrôle de flux ;
>
>
> c.. Instructions DECLARE définissant des curseurs et des variables de
> données locaux à la fonction
>
>
> d.. Instructions SELECT contenant des listes de sélection avec des
> expressions qui affectent des valeurs à des variables locales à la
>
>
> e.. Opérations de curseur faisant référence à des curseurs locaux
> déclarés, ouverts, fermés et désalloués dans la fonction. Seules les
> instructions FETCH affectant des valeurs aux variables locales à l'aide
> la clause INTO sont autorisées ; les instructions FETCH qui renvoient
> données au client ne sont pas autorisées.
>
>
> f.. Instructions INSERT, UPDATE et DELETE modifiant les variables
> locales à la fonction
>
>
> g.. Instructions EXECUTE appelant des procédures stockées étendues
>
> --
>
> "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le message
> news:356889AE-492B-406F-84B0-2AD72D3BA675@microsoft.com...
> > Merci pour ton aide, j'ai cependant une derniere question sur le
> > Via l'analyseur de requete sur la base master, je vois dans les
> > stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté
> > l'appeler depuis ma fonction. Je compile sans problème mais à
> de
> > ma fonction j'ai le message suivant :
> >
> > "Seules les fonctions et les procédures étendues peuvent être
> > partir d'une fonction."
> >
> > "Patrice" a écrit :
> >
> > > Pour l'instant je ne vois pas mieux que de tester les paramètres
> > > fonction pour créer le curseur correspondant ce qui permet ensuite
> reste
> > > de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
> permettre
> > > d'avoir une seule fonction mais la fonction devra prévoir chaque
> combinaison
> > > "table", "colonne" possible...
> > >
> > > Compare peut-être tout de même avec ce que cela donnerait côté
> > > (notamment cela soit doit être plutôt simple à faire dans une appli
> Web).
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
> de
> > > news:48A69CEB-00FB-4D9E-A3CC-D03371F011BF@microsoft.com...
> > > > Par exemple, j'ai une table contrat et une table des contractants
> > > > et je veux faire select nocontrant,
> from
> > > > contrat
> > > >
> > > > ou la fonction dbo.concatContractant renvoie la concaténation des
> > > > contractants.
> > > >
> > > > Je peux toujours le faire dans le code de l'appli, mais ca serait
> beaucoup
> > > > mieux, si je pouvais le faire depuis une fonction.
> > > > Et comme j'ai plusieurs tables liés du meme type, je préfererai
> également
> > > > une fonction ou je peux passer la table lié, et le champ à
> > > plutot
> > > > que d'écrire une fonction par type de concaténation.
> > > >
> > > > Merci d'avance.
> > > >
> > > > "Patrice" a écrit :
> > > >
> > > > > Je pense que le problème est que EXECUTE permettrait de modifier
> l'état
> > > de
> > > > > la base ce qui n'est pas autorisé.
> > > > >
> > > > > Que doit retourner cette fonction ?
> > > > >
> > > > > Patrice
> > > > >
> > > > > --
> > > > >
> > > > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans le
> message
> > > de
> > > > > news:EBFD9078-CCFF-4F4B-BA22-2C4310164E05@microsoft.com...
> > > > > > disons que l'intérêt n'était pas trop la performance mais la
> > > possibilité
> > > > > > d'avoir une seule fonction générique, plutot qu'une mutlitude
> > > fonctions
> > > > > > faisant similairement la même chose.
> > > > > >
> > > > > >
> > > > > > "Patrice" a écrit :
> > > > > >
> > > > > > > Si la fonction retourne une table il est possible de
> et de
> > > lui
> > > > > > > appliquer le tri ensuite :
> > > > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > > > >
> > > > > > > Si il faut aussi lui passer uin nom de table, cela supprime
> > > bonne
> > > > > part
> > > > > > > de l'intérêt des fonctions et procédures stockées
> > > Dans ce
> > > > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > > > >
> > > > > > > Patrice
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > "Evariste" <Evariste@discussions.microsoft.com> a écrit dans
> > > message
> > > > > de
> > > > > > > news:7A38AC9B-125B-46B0-A659-39D036FB56BA@microsoft.com...
> > > > > > > > Existe t-il un moyen de passer un nom de colonne, de
> voire
> > > de
> > > > > tri
> > > > > > > > comme paramètre d'une FONCTION.
> > > > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de
> > > ensuite
> > > > > un
> > > > > > > > exec, mais il semble que l'exec ou execute n'est pas
> > > depuis
> > > > > une
> > > > > > > > fonction alors que je peux le faire dans une procédure
> stockée.
> > > > > > > > Merci d'avance pour votre aide.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>
Mais dans la coc on a également :
Appel de procédures stockées étendues à partir des fonctions
Une procédure stockée étendue appelée à partir d'une fonction ne peut pas
renvoyer de jeux de résultats au client. Les API ODS qui renvoient des
de résultats au client renvoient FAIL. La procédure stockée étendue peut
reconnecter à Microsoft® SQL ServerT ; toutefois, elle ne doit pas
la même transaction que la fonction l'ayant appelée.
Et comme ce qui m'interesse, c'est de retourner un résultat, j'ai plus
aller dormir.
Merci pour toutes les infos.
"Patrice" a écrit :
> D'après la doc :
> Les instructions suivantes sont autorisées dans le corps d'une fonction
> multi-instructions. Les instructions ne figurant pas dans la liste
> ne sont pas autorisées dans le corps d'une fonction :
>
> a.. Instructions d'affectation
>
>
> b.. les instructions de contrôle de flux ;
>
>
> c.. Instructions DECLARE définissant des curseurs et des variables de
> données locaux à la fonction
>
>
> d.. Instructions SELECT contenant des listes de sélection avec des
> expressions qui affectent des valeurs à des variables locales à la
>
>
> e.. Opérations de curseur faisant référence à des curseurs locaux
> déclarés, ouverts, fermés et désalloués dans la fonction. Seules les
> instructions FETCH affectant des valeurs aux variables locales à l'aide
> la clause INTO sont autorisées ; les instructions FETCH qui renvoient
> données au client ne sont pas autorisées.
>
>
> f.. Instructions INSERT, UPDATE et DELETE modifiant les variables
> locales à la fonction
>
>
> g.. Instructions EXECUTE appelant des procédures stockées étendues
>
> --
>
> "Evariste" a écrit dans le message
> news:
> > Merci pour ton aide, j'ai cependant une derniere question sur le
> > Via l'analyseur de requete sur la base master, je vois dans les
> > stockées étendues la procédure stockée sp_executeSQL, j'ai donc tenté
> > l'appeler depuis ma fonction. Je compile sans problème mais à
> de
> > ma fonction j'ai le message suivant :
> >
> > "Seules les fonctions et les procédures étendues peuvent être
> > partir d'une fonction."
> >
> > "Patrice" a écrit :
> >
> > > Pour l'instant je ne vois pas mieux que de tester les paramètres
> > > fonction pour créer le curseur correspondant ce qui permet ensuite
> reste
> > > de la fonction d'utiliser ce curseur quel qu'il soit. Cela devrait
> permettre
> > > d'avoir une seule fonction mais la fonction devra prévoir chaque
> combinaison
> > > "table", "colonne" possible...
> > >
> > > Compare peut-être tout de même avec ce que cela donnerait côté
> > > (notamment cela soit doit être plutôt simple à faire dans une appli
> Web).
> > >
> > > Patrice
> > >
> > > --
> > >
> > > "Evariste" a écrit dans le
> de
> > > news:
> > > > Par exemple, j'ai une table contrat et une table des contractants
> > > > et je veux faire select nocontrant,
> from
> > > > contrat
> > > >
> > > > ou la fonction dbo.concatContractant renvoie la concaténation des
> > > > contractants.
> > > >
> > > > Je peux toujours le faire dans le code de l'appli, mais ca serait
> beaucoup
> > > > mieux, si je pouvais le faire depuis une fonction.
> > > > Et comme j'ai plusieurs tables liés du meme type, je préfererai
> également
> > > > une fonction ou je peux passer la table lié, et le champ à
> > > plutot
> > > > que d'écrire une fonction par type de concaténation.
> > > >
> > > > Merci d'avance.
> > > >
> > > > "Patrice" a écrit :
> > > >
> > > > > Je pense que le problème est que EXECUTE permettrait de modifier
> l'état
> > > de
> > > > > la base ce qui n'est pas autorisé.
> > > > >
> > > > > Que doit retourner cette fonction ?
> > > > >
> > > > > Patrice
> > > > >
> > > > > --
> > > > >
> > > > > "Evariste" a écrit dans le
> message
> > > de
> > > > > news:
> > > > > > disons que l'intérêt n'était pas trop la performance mais la
> > > possibilité
> > > > > > d'avoir une seule fonction générique, plutot qu'une mutlitude
> > > fonctions
> > > > > > faisant similairement la même chose.
> > > > > >
> > > > > >
> > > > > > "Patrice" a écrit :
> > > > > >
> > > > > > > Si la fonction retourne une table il est possible de
> et de
> > > lui
> > > > > > > appliquer le tri ensuite :
> > > > > > > SELECT * FROM MaFonction() ORDER BY MonChamp
> > > > > > >
> > > > > > > Si il faut aussi lui passer uin nom de table, cela supprime
> > > bonne
> > > > > part
> > > > > > > de l'intérêt des fonctions et procédures stockées
> > > Dans ce
> > > > > > > cas, autant générer peut-être du code SQL côté client ?
> > > > > > >
> > > > > > > Patrice
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > "Evariste" a écrit dans
> > > message
> > > > > de
> > > > > > > news:
> > > > > > > > Existe t-il un moyen de passer un nom de colonne, de
> voire
> > > de
> > > > > tri
> > > > > > > > comme paramètre d'une FONCTION.
> > > > > > > > J'ai bien essayé d'écrire ma requete en dynamique et de
> > > ensuite
> > > > > un
> > > > > > > > exec, mais il semble que l'exec ou execute n'est pas
> > > depuis
> > > > > une
> > > > > > > > fonction alors que je peux le faire dans une procédure
> stockée.
> > > > > > > > Merci d'avance pour votre aide.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>