IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Fonction stockée et insert, update ...


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Par défaut Fonction stockée et insert, update ...
    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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Une UDF (User Defined Function) ne peut ni faire de mise à jour INSERT, UPDATE, DELETE, ni transaction, ni SQL dynamique....
    Pour cela vous devez utilser une procdure stockée.

    Le but d'une fonction est d'être appelée dans une requête. Imaginez une requête SELECT qui appellerait une fonction qui ferait un INSERT ???? ! Absurde...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Par défaut
    Encore merci 'SQLPro'.
    C'est effectivement ce que j'avais lu sur le net, mais comme les versions de SQLServer ne cessent d'évoluer, je me suis dit que peut être ... ne sait-on jamais !

    Bonne journée,
    Cordialement,
    Alex01

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut
    Citation Envoyé par Alex01 Voir le message
    Encore merci 'SQLPro'.
    C'est effectivement ce que j'avais lu sur le net, mais comme les versions de SQLServer ne cessent d'évoluer, je me suis dit que peut être ... ne sait-on jamais !

    Bonne journée,
    Cordialement,
    Alex01
    Certes on peut mettre des DML, sauf pour les tables temporaire, cad, si je fais un insert into @table values (), cela fonctionne mais juste pour les tables temporaires, le SQL dynamique ne fonctionne pas si ça contient des DML

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction Sql "INSERT,UPDATE" en vba sur plusieurs lignes
    Par darkjeje dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2013, 16h02
  2. Réponses: 0
    Dernier message: 29/03/2012, 12h01
  3. [PHP 5.0] fonctions insertion update delete
    Par molo1987 dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2011, 16h28
  4. créer une fonction insert/update
    Par pitchounette13 dans le forum Débuter
    Réponses: 10
    Dernier message: 03/07/2008, 14h25
  5. Procedure stockée + insert update
    Par chouchou83 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/06/2008, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo