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 :

Fonction fnTableMax


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Fonction fnTableMax
    Bonjour,

    Tout d'abord, j'espère que cette question n'a pas été déjà posée et que je ne passe pas trop pour un guignol ... mais j'ai quand même beaucoup cherché sur Google et sur Developpez.com ...

    Bref, mon problème c'est que je souhaiterais créer une fonction dans Sql Server 2000 qui me permette de retourner le MAX d'une table, dont le nom et l'identifiant sont passés en paramètre.

    Là où çà se complique c'est que je ne vois pas comment organiser la requête interne à cette fonction sachant que le nom de la table et l'identifiant sont reçus comme des variables (varchar(128)) ...

    Je vous laisse regarder la fonction que j'ai essayé de créer mais çà ne marche pas ... (au niveau du FROM) :

    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
     
     
    CREATE    FUNCTION dbo.fnTableMax(@TableName varchar(128), @TableId varchar(128))
    RETURNS int
    AS
    BEGIN
        DECLARE @Value int
     
        SELECT @Value = MAX(@TableId)+1 
        FROM  INFORMATION_SCHEMA 
        WHERE TABLE_NAME= @TableName
        AND COLUMN_NAME = @TableId
     
        RETURN  @Value
    END
    Merci de votre attention et de votre aide si possible.

    A bientôt !

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    A première vue, de ton poste, me viens à l'esprit une question:
    Le Max de quoi dans la table ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Salut !

    Je parle du max car mes tables ont en clé primaire un entier en autoincrementation ...

    Donc la fonction doit me permettre d'obtenir la valeur max (Equivalent de la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX (colonne) FROM table
    Sauf que là, j'envoi la table et le champ (clé primaire) en paramètre.

    J'espère que vous voyez ce que je cherche.

    Merci.

    A bientôt !

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 567
    Points
    19 567
    Billets dans le blog
    25
    Par défaut
    Si vous voulez intéger dans une précédrue une variable touchant un nom de champ, vous vous devez d'utiliser le peu reluisant et peu performant (surtout dans une fonction) sp_executesql

    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
    CREATE  FUNCTION fnTableMax(@TableName varchar(128), @TableId varchar(128))
    RETURNS int
    AS
    BEGIN
    declare @sql varchar(500), @val int
     
    set @sql='select  max('+@TableId+')+1 as MAXI into #tmax from '+@TableName
     
    exec sp_executesql @sql
     
    select @val=MAXI from #tmax
     
    drop table #tmax
     
    RETURN  @val
    END

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    ok donc si je comprend bien ma technique n'est pas la plus optimisée ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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