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 :

Equivalent à NextVal d'Oracle


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Equivalent à NextVal d'Oracle
    Je viens de m'apercevoir que le message auquel j'ai repondu est marqué comme "Résolu". Pour que mon message ait un peu plus de visibilité je crée donc ce nouveau topic en faisant juste un copier coller provenant de
    http://www.developpez.net/forums/viewtopic.php?t=368270

    Bonjour,

    je rebondis sur la proposition de "Fadace" sur la table de compteur.
    En effet, je cherche moi aussi a retrouver le fonctionnement du NextVal sous oracle.
    Je souhaite recuperer via une requete sql une valeur faisant office de compteur. Donc, une fois que j'ai recuperé cette valeur, il faut qu'elle soit incrementée d'une unité pour la prochaine demande. Le fonctionnement de NextVal quoi Smile

    La seule solution que j'ai trouvé avec MSSQL sans les identity correspond en gros à ca:
    Créer une table Compteur avec deux colonnes : NomCompteur, ValCompteur

    Créer une fonction NextValFromCompteur(NomCompteur)
    Dans cette fonction, je fais un lock sur la table compteur , je recupere ma valeur pour un nom de compteur donné, je fais un update de ma valeur+1 et je renvoie ma valeur...

    Je n'ai pas mis de code car je ne connais pas du tout MSSQL, donc je ne sais pas encore faire ce que j'explique au dessus Smile

    Je voudrais juste savoir si c'est la bonne methode ou s'il existe plus simple... Et si quelqu'un à deja réaliser ce genre de table et de fonction et qu'il veut bien partager son code alors là je serais comblé Rolling Eyes

    Mais sinon juste savoir si c'est la bonne methode serait deja un grand pas pour moi.
    Merci

  2. #2
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut La méthode est bonne mais en procédure pas en fonction
    Bonjour,
    La méthode est bien celle que tu as décrit. Seulement dans une fonction Transact-Sql, on ne peut pas mettre un update d'une table. Alors, il te faudra utiliser une procedure avec une variable output qui retournera ton compteur.
    Les étapes sont :
    1. Créer la table des compteurs.
    2. Créer une procédure procName(NomCompteur, newValeur output)
    La procédure lit la valeur du compteur voulu et l'incrémente.
    Elle récupère la nouvelle valeur sur newValeur.
    3. Récupérer la variable output et l'utiliser pour la suite de ton programme.

    J'espère que mon explication était claire. Et si tu as besoin de plus d'aide fait moi signe.


  3. #3
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ok, merci pour la confirmation
    Effectivement, je m'etais apercu qu'il fallait que je fasse une procedure stockée plutot qu'une fonction.

    Il me reste un problème à resoudre. Ma procedure fonctionne bien mais je souhaite recuperer son resultat via une requete SQL.
    Pour l'instant, je recupere le resultat de cette façon :
    Declare @Sortie int
    Execute MaFonction @Sortie output

    Le resultat est donc stocké dans la variable @Sortie mais ce n'est pas une requete SQL. Or, le programme que je dois utiliser pour recuperer le resultat de la procedure n'accepte que les SELECT... C'est bien dommage pour moi, je suis bloqué

  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 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Pour un integer unique en sortie, vous pouvez utiliser la valeur de retour de la SP sans passer par un paramètre en sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Declare @Sortie int
    Execute @Sortie = MaFonction

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut
    Désolé, mais je ne sais pas comment ton programme n'accepterait que des select.
    En tout cas les deux syntaxes que tu as ( celle de Fadace et la mienne ) sont les deux manières pour le faire. Et après tu peux faire un select sur @Sortie
    insert into maTable( monChampCompteur )
    Select @Srotie

Discussions similaires

  1. Equivalent du DECODE Oracle ?
    Par tomlev dans le forum SQLite
    Réponses: 3
    Dernier message: 10/05/2009, 15h15
  2. [MySql] Equivalent NVL de Oracle
    Par nantais dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/09/2007, 15h28
  3. Equivalent jointure externe (+) ORACLE sous ACCESS ?
    Par caboche dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2007, 14h05
  4. equivalent function decode oracle pour mysql 4.1
    Par axel-erator dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 24/05/2006, 13h44
  5. Equivalence de SPOOL (Oracle) pour interbase?
    Par Cerberes dans le forum InterBase
    Réponses: 1
    Dernier message: 02/12/2004, 09h15

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