OVH Cloud OVH Cloud

update table avec function

4 réponses
Avatar
funno
je tombe sur une erreur que je ne comprends pas :
Serveur : Msg 443, Niveau 16, État 2, Procédure fnnextval3, Ligne 10
Utilisation incorrecte de 'UPDATE' à l'intérieur d'une fonction.
-------------------------------------
je voulais créer une fonction :
CREATE function dbo.fnnextval3()
RETURNS int
AS
BEGIN
DECLARE @retval int, @newval int;
set @retval=-1;

select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where nomgtnui =
'OCECT');

update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui = 'OCECT';
return @retval;
end
GO

4 réponses

Avatar
Boss Hog
Salut,
pourquoi pas une procstoc à la place de l'UDF ??
@+ Boss Hog


"funno" wrote in message
news:
je tombe sur une erreur que je ne comprends pas :
Serveur : Msg 443, Niveau 16, État 2, Procédure fnnextval3, Ligne 10
Utilisation incorrecte de 'UPDATE' à l'intérieur d'une fonction.
-------------------------------------
je voulais créer une fonction :
CREATE function dbo.fnnextval3()
RETURNS int
AS
BEGIN
DECLARE @retval int, @newval int;
set @retval=-1;

select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where nomgtnui > 'OCECT');

update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui 'OCECT';
return @retval;
end
GO



Avatar
funno
simplement parceque la fonction sera appelé dans une requete SQL de type
insert !
(insert dbo.fnnextval3() into autre_table)

"Boss Hog @tiscali.fr>" a écrit :

Salut,
pourquoi pas une procstoc à la place de l'UDF ??
@+ Boss Hog


"funno" wrote in message
news:
> je tombe sur une erreur que je ne comprends pas :
> Serveur : Msg 443, Niveau 16, État 2, Procédure fnnextval3, Ligne 10
> Utilisation incorrecte de 'UPDATE' à l'intérieur d'une fonction.
> -------------------------------------
> je voulais créer une fonction :
> CREATE function dbo.fnnextval3()
> RETURNS int
> AS
> BEGIN
> DECLARE @retval int, @newval int;
> set @retval=-1;
>
> select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where nomgtnui > > 'OCECT');
>
> update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui > 'OCECT';
> return @retval;
> end
> GO
>





Avatar
Cymryr
A ta place je ferais ca en deux fois

d'abord ton insert en une seule passe puis ton update en une seule passe
Je ne vois pas l'interet d'utilise une fonction dans ton cas

insert autre_table
SELECT numgtnui from essaidb.dbo.gtnui where nomgtnui ='OCECT'
(si autretable n'a qu'une seule colonne)

update essaidb.dbo.gtnui set numgtnui = numgtnui+1 WHERE nomgtnui ='OCECT'




> > CREATE function dbo.fnnextval3()
> > RETURNS int
> > AS
> > BEGIN
> > DECLARE @retval int, @newval int;
> > set @retval=-1;
> >
> > select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where


nomgtnui > > > 'OCECT');
> >
> > update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui > > 'OCECT';
> > return @retval;
> > end
> > GO






----- Original Message -----
From: "funno"
Newsgroups: microsoft.public.fr.sqlserver
Sent: Thursday, January 20, 2005 4:55 PM
Subject: Re: update table avec function


simplement parceque la fonction sera appelé dans une requete SQL de type
insert !
(insert dbo.fnnextval3() into autre_table)
> > CREATE function dbo.fnnextval3()
> > RETURNS int
> > AS
> > BEGIN
> > DECLARE @retval int, @newval int;
> > set @retval=-1;
> >
> > select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where


nomgtnui > > > 'OCECT');
> >
> > update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui > > 'OCECT';
> > return @retval;
> > end
> > GO




"Boss Hog @tiscali.fr>" a écrit :

> Salut,
> pourquoi pas une procstoc à la place de l'UDF ??
> @+ Boss Hog
>
>
> "funno" wrote in message
> news:
> > je tombe sur une erreur que je ne comprends pas :
> > Serveur : Msg 443, Niveau 16, État 2, Procédure fnnextval3, Ligne 10
> > Utilisation incorrecte de 'UPDATE' à l'intérieur d'une fonction.
> > -------------------------------------
> > je voulais créer une fonction :
> > CREATE function dbo.fnnextval3()
> > RETURNS int
> > AS
> > BEGIN
> > DECLARE @retval int, @newval int;
> > set @retval=-1;
> >
> > select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where


nomgtnui > > > 'OCECT');
> >
> > update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui > > 'OCECT';
> > return @retval;
> > end
> > GO
> >
>
>
>


Avatar
Fred BROUARD
Lisez l'aide en ligne, par définition un fonction ne peut pas modifier une table
de la base. Elle peut uniquement utiliser un ordre de mise a jour (UPDATE,
INSERT, DELETE), que pour une table créée localement dans le corps de la fonction.
D'ailleurs ça n'est pas le but d'une fonction : ce que vous essayez de faire
c'est gérer une transaction en utilisant une fonction SQL !

Vous devez utiliser une procédure et gérer une transaction.

De plus c'est une hérésie que de faire de l'auto incrémentation de cete manière

A lire : http://sqlpro.developpez.com/cours/clefs/

A +

--
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 *************************

funno a écrit:
je tombe sur une erreur que je ne comprends pas :
Serveur : Msg 443, Niveau 16, État 2, Procédure fnnextval3, Ligne 10
Utilisation incorrecte de 'UPDATE' à l'intérieur d'une fonction.
-------------------------------------
je voulais créer une fonction :
CREATE function dbo.fnnextval3()
RETURNS int
AS
BEGIN
DECLARE @retval int, @newval int;
set @retval=-1;

select @retval = (SELECT numgtnui from essaidb.dbo.gtnui where nomgtnui =
'OCECT');

update essaidb.dbo.gtnui set numgtnui = @retval+1 WHERE nomgtnui = 'OCECT';
return @retval;
end
GO