Bonjour à toutes et à tous,

J'aurais juste besoin d'une confirmation :
avec SQL Server, les fonctions stockées ne permettent pas d'ajouter des données ou de mettre à jour des champs (insert, update) ?!

J'ai voulu compilé ce qui suit afin de récupérer l'ID de la nouvelle ligne ajouté :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
CREATE FUNCTION dbo.InsertLigneProduction
(
    @Annee int,
    @Mois int,
    @Jour int,
    @CodeTranche varchar(20),
    @Equipe varchar(1)
)
RETURNS @MaTable TABLE(IDNP int)
AS
BEGIN
  DECLARE @ID int
 
  INSERT INTO T_Production_L1 (annee, jour, mois, code_tranche_h, lettre_equipe)
  VALUES (@Annee, @Jour, @Mois, @CodeTranche, @Equipe);
  SELECT @ID=@@IDENTITY;
 
  INSERT INTO @MaTable(IDNP) VALUES(@ID);
  RETURN;
END
mais le système me dit :
Utilisation non valide d'un opérateur présentant des effets secondaires ou d'un opérateur dépendant du temps 'INSERT' dans une fonction.
Du coup, je passe par une procédure stockée de ce type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
CREATE PROCEDURE dbo.InsertLigneProduction
(
    @Annee int,
    @Mois int,
    @Jour int,
    @CodeTranche varchar(20),
    @Equipe varchar(1)
 
    @NU int OUTPUT
)
AS
BEGIN
  /***Ajout des données***/
  INSERT INTO T_Production_L1 (annee, jour, mois, code_tranche_h, lettre_equipe)
  VALUES (@Annee, @Jour, @Mois, @CodeTranche, @Equipe);
 
  /***Récupération de l'identifiant***/
  SELECT @NU=@@IDENTITY;
END
N'y a t'il vraiment pas de solutions pour faire ceci avec des fonctions ?

D'avance merci,
Cordialement,
Alex01