Pb lors de l'appel d'une fonction dans une procédure stockée
3 réponses
Geppy
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers
My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total
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
Fred BROUARD
différentes causes posible :
1) vous avez oublié le END dans le corps de la fonction
2) le type de valeur de retour DECIMAL (10,2) peut être insuffisant car il ne permet par exemple pas la valeur : 111 234 567,89 et donc risque de provoquer un overflow.
2) le select peut retourner un nombre considérable de valeurs, ne faudrait-il pas faire une fonction agrégation genre somme ?
Voici une simplificatiopn possible :
CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(16,2) AS BEGIN RETURN (Select SUM(A.Price * A.Quantity) From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer GROUP BY idCustomer) END
Mais quel intérêt de passer par une fonction une chose qui sera plus performante si elle est directement incluse dans la requête cible ?
A +
Geppy a écrit:
Bonjour à tous ! Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante au bout d'un moment. Ceci ne se produit pas sur la base de test qui contient beaucoup moins de données. Quelqu'un pourrait-il m'aider ? Merci d'avance. Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP Create Sp_.. () As Select dbo.MyFunction (idCustomer), Name, Adress.... From Customers
My function CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(10,2) AS BEGIN Declare @total decimal (10, 2) Select @total = A.Price * A.Quantity From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer Return @total
Help please !!!
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
différentes causes posible :
1) vous avez oublié le END dans le corps de la fonction
2) le type de valeur de retour DECIMAL (10,2) peut être insuffisant car il ne
permet par exemple pas la valeur : 111 234 567,89 et donc risque de provoquer un
overflow.
2) le select peut retourner un nombre considérable de valeurs, ne faudrait-il
pas faire une fonction agrégation genre somme ?
Voici une simplificatiopn possible :
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(16,2)
AS
BEGIN
RETURN (Select SUM(A.Price * A.Quantity)
From Articles A
Inner join Orders O
on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
GROUP BY idCustomer)
END
Mais quel intérêt de passer par une fonction une chose qui sera plus performante
si elle est directement incluse dans la requête cible ?
A +
Geppy a écrit:
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers
My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total
Help please !!!
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
1) vous avez oublié le END dans le corps de la fonction
2) le type de valeur de retour DECIMAL (10,2) peut être insuffisant car il ne permet par exemple pas la valeur : 111 234 567,89 et donc risque de provoquer un overflow.
2) le select peut retourner un nombre considérable de valeurs, ne faudrait-il pas faire une fonction agrégation genre somme ?
Voici une simplificatiopn possible :
CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(16,2) AS BEGIN RETURN (Select SUM(A.Price * A.Quantity) From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer GROUP BY idCustomer) END
Mais quel intérêt de passer par une fonction une chose qui sera plus performante si elle est directement incluse dans la requête cible ?
A +
Geppy a écrit:
Bonjour à tous ! Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante au bout d'un moment. Ceci ne se produit pas sur la base de test qui contient beaucoup moins de données. Quelqu'un pourrait-il m'aider ? Merci d'avance. Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP Create Sp_.. () As Select dbo.MyFunction (idCustomer), Name, Adress.... From Customers
My function CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(10,2) AS BEGIN Declare @total decimal (10, 2) Select @total = A.Price * A.Quantity From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer Return @total
Help please !!!
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
jf pedrazzani
Salut, une autre chose à ne pas faire c'est d'appeler ta procedure sp_ car cet convention de nomage est reservée au procedure system(sp_ = system proc) ce qui fait que quand une procedure commence par sp_ SQL va chercher dans les procedure systeme, certe cela n'a rien à voir avec ton problème mais il me paraissai important de le souligner @+ Boss Hog
"Geppy" a écrit dans le message de news: ujB%
Bonjour à tous ! Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante au bout d'un moment. Ceci ne se produit pas sur la base de test qui contient beaucoup moins de données. Quelqu'un pourrait-il m'aider ? Merci d'avance. Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP Create Sp_.. () As Select dbo.MyFunction (idCustomer), Name, Adress.... From Customers
My function CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(10,2) AS BEGIN Declare @total decimal (10, 2) Select @total = A.Price * A.Quantity From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer Return @total
Help please !!!
Salut,
une autre chose à ne pas faire c'est d'appeler ta procedure sp_ car cet
convention de nomage est reservée au procedure system(sp_ = system proc)
ce qui fait que quand une procedure commence par sp_ SQL va chercher dans
les procedure systeme, certe cela n'a rien à voir avec ton problème mais il
me paraissai important de le souligner
@+
Boss Hog
"Geppy" <anonymous@discussions.microsoft.com> a écrit dans le message de
news: ujB%23kSDsEHA.1816@TK2MSFTNGP15.phx.gbl...
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et
plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers
My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total
Salut, une autre chose à ne pas faire c'est d'appeler ta procedure sp_ car cet convention de nomage est reservée au procedure system(sp_ = system proc) ce qui fait que quand une procedure commence par sp_ SQL va chercher dans les procedure systeme, certe cela n'a rien à voir avec ton problème mais il me paraissai important de le souligner @+ Boss Hog
"Geppy" a écrit dans le message de news: ujB%
Bonjour à tous ! Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante au bout d'un moment. Ceci ne se produit pas sur la base de test qui contient beaucoup moins de données. Quelqu'un pourrait-il m'aider ? Merci d'avance. Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP Create Sp_.. () As Select dbo.MyFunction (idCustomer), Name, Adress.... From Customers
My function CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(10,2) AS BEGIN Declare @total decimal (10, 2) Select @total = A.Price * A.Quantity From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer Return @total
Help please !!!
Med Bouchenafa
Développe le code de la fonction dans ta procédure et voila si cela passe son problème. -- Bien cordialement Med Bouchenafa
"Geppy" a écrit dans le message de news: ujB#
Bonjour à tous ! Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante au bout d'un moment. Ceci ne se produit pas sur la base de test qui contient beaucoup moins de données. Quelqu'un pourrait-il m'aider ? Merci d'avance. Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP Create Sp_.. () As Select dbo.MyFunction (idCustomer), Name, Adress.... From Customers
My function CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(10,2) AS BEGIN Declare @total decimal (10, 2) Select @total = A.Price * A.Quantity From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer Return @total
Help please !!!
Développe le code de la fonction dans ta procédure et voila si cela passe son problème.
--
Bien cordialement
Med Bouchenafa
"Geppy" <anonymous@discussions.microsoft.com> a écrit dans le message de news:
ujB#kSDsEHA.1816@TK2MSFTNGP15.phx.gbl...
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers
My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total
Développe le code de la fonction dans ta procédure et voila si cela passe son problème. -- Bien cordialement Med Bouchenafa
"Geppy" a écrit dans le message de news: ujB#
Bonjour à tous ! Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante au bout d'un moment. Ceci ne se produit pas sur la base de test qui contient beaucoup moins de données. Quelqu'un pourrait-il m'aider ? Merci d'avance. Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.
My SP Create Sp_.. () As Select dbo.MyFunction (idCustomer), Name, Adress.... From Customers
My function CREATE FUNCTION MyFunction (@idCustomer int) RETURNS decimal(10,2) AS BEGIN Declare @total decimal (10, 2) Select @total = A.Price * A.Quantity From Articles A Inner join Orders O on A.idOrder = O.idOrder Where O.idCustomer = @idCustomer Return @total