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

MS SQL Server Discussion :

Erreur dans une création de fonction. Possible?


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 33
    Points : 38
    Points
    38
    Par défaut Erreur dans une création de fonction. Possible?
    Bonjour,

    Je suis actuellement au sein d'une entreprise et tout va bien, merci.

    J'avais commencé à créer une fonction qui met à jour une table. Çà c'est bon ça marche.

    Seulement je dois la passer en dynamique et pour le cas créer une table ou non.
    Exemple :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    create function tranchePrix(@ecarteur smallint, @createTable char(1))
    RETURNS VARCHAR(20)
    AS
    BEGIN
        DECLARE @Valeur VARCHAR(20)
        DECLARE @Phrase VARCHAR(20)
        DECLARE @Tranche INT
     
        SET @Phrase = 'Terminé'
        SET @Tranche = 0    
     
        IF(@createTable = 'O')
            BEGIN
                WHILE (@Tranche < 1000)
                    BEGIN
                        IF(@Tranche = 0)
                            BEGIN
                                create table test (Id INT)
                            END
                                             set @Tranche = @Tranche +5000
                    END
            END
     
        ELSE IF(@createTable = 'N')
            BEGIN
                set @Phrase = 'TrancheVerre' + @ecarteur
            END
     
        ELSE
            BEGIN
                set @Phrase = 'Erreur 2ème Argument'
            END
     
     
        RETURN @Phrase
    END
    On définit dans les arguments de la fonction si on veut créer la table ou non. Si on veut la créer alors on ddois le faire dynamiquement. Dans mon cas 'TranchePrix' + cast(@ecarteur As VARCHAR).

    @ecarteur étant l'écart de prix que l'on veut, c'est juste visuel.

    au moment d'exécuter la fonction j'obtiens :

    "Msg*443, Niveau*16, État*15, Procédure*tranchePrix, Ligne*21
    Utilisation non valide d'un opérateur présentant des effets secondaires ou d'un opérateur dépendant du temps 'CREATE TABLE' dans une fonction."
    Comment contourner le problème sachant que je dois absolument créer la table avec un nom dynamique ?

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Le but d'une fonction est d'être utilisée dans une requête par exemple SELECT. A ce titre elle ne peut en aucun cas :
    1) contenir du code SQL dynamique
    2) faire des mises à jour (INSERT, UPDATE, DELETE) sauf dans la variable table d'une fonction table multi-instruction
    3) contenir une transaction
    4) changer de contexte (USE...)
    5) faire du SQL DDL (CREATE, ALTER, DROP...)

    Pour faire ce que vous voulez, vous pouvez au choix utiliser une fonction table multi-instruction ou bien une procédure

    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
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 33
    Points : 38
    Points
    38
    Par défaut
    Merci de ta réponse.

    Je vais me rediriger vers une procédure je pense.

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

Discussions similaires

  1. #Erreur dans une requête avec une fonction personnalisée
    Par pguiheu dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 04/07/2006, 15h45
  2. Trouver l'erreur dans une fonction
    Par Seth77 dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 16h38
  3. [débutant] erreur dans une fonction
    Par Skizo dans le forum Access
    Réponses: 7
    Dernier message: 18/05/2006, 10h46
  4. Erreur dans une fonction
    Par dark_vidor dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2006, 10h23
  5. Réponses: 2
    Dernier message: 11/08/2004, 15h01

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