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 ?