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
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
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
Salut,
pourquoi pas une procstoc à la place de l'UDF ??
@+ Boss Hog
"funno" <funno@discussions.microsoft.com> wrote in message
news:295A6C78-86E3-4009-B671-BCE5C662B749@microsoft.com...
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
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
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 >
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" <funno@discussions.microsoft.com> wrote in message
news:295A6C78-86E3-4009-B671-BCE5C662B749@microsoft.com...
> 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
>
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 >
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 > > > > >
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" <funno@discussions.microsoft.com>
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" <funno@discussions.microsoft.com> wrote in message
> news:295A6C78-86E3-4009-B671-BCE5C662B749@microsoft.com...
> > 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
> >
>
>
>
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 > > > > >
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
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
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