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 :

Question SCOPE IDENTITY


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Question SCOPE IDENTITY
    Bonjour à tous !

    Je suis actuellement en stage de fin d'étude et je dois modifier un serveur sql mais ayant une faible expérience en SQL certaines choses m'échappent.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    ALTER PROCEDURE tblParser_Ecrire2
    (
    	@IdParser int
    	,@strNomParser nvarchar (500)
    	,@strTypeMobile nvarchar (500)
    	,@strNomAssembly nvarchar (500)
    	,@strNomClasse nvarchar (500)
    	,@strChemin nvarchar (500)
    	,@strNomMethode nvarchar (500)
    	,@bitActif bit
    	,@bitEnCours bit
    	,@bitModeDebug bit
    )
    AS
    BEGIN
    	DECLARE @ID_TABLE int
    	UPDATE tblParser
    	 SET
    		strNomParser = @strNomParser
    		, strTypeMobile = @strTypeMobile
    		, strNomAssembly = @strNomAssembly
    		, strNomClasse = @strNomClasse
    		, strChemin = @strChemin
    		, strNomMethode = @strNomMethode
    		, bitActif = @bitActif
    		, bitEnCours = @bitEnCours
    		, bitModeDebug = @bitModeDebug
    	 WHERE  IdParser = @IdParser
    	IF @@ROWCOUNT = 0
    	BEGIN
    		INSERT INTO tblParser
    		(
    			 strNomParser
    			, strTypeMobile
    			, strNomAssembly
    			, strNomClasse
    			, strChemin
    			, strNomMethode
    			, bitActif
    			, bitEnCours
    			, bitModeDebug
    		)
    		VALUES (
    			 @strNomParser
    			, @strTypeMobile
    			, @strNomAssembly
    			, @strNomClasse
    			, @strChemin
    			, @strNomMethode
    			, @bitActif
    			, @bitEnCours
    			, @bitModeDebug
     
    		)
     
    		SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
     
    		   SELECT @ID_TABLE = SCOPE_IDENTITY()
    	END
    	ELSE
    	BEGIN
    		SELECT  @ID_TABLE = @IdParser
    	END
    	SELECT @ID_TABLE
    END
    Je pense avoir saisie le sens de ce code sauf la partie avec SCOPE IDENTITY. J'ai regardé sur internet la définition mais je n'arrive toujours pas à bien saisir le fonctionnement. J'ai vu qu'il y avait aussi un @@identity qui ressemble au SCOPE IDENTITY.

    Si quelqu'un pouvait m'éclaircir ce serait gentil .

    Bonne journée.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Bonjour,
    SCOPE_IDENTITY() te renvoie le dernier ID inséré dans ta table car tu dois avoir une colonne autoincrémentée. Ça permet de renseigner la variable @ID_TABLE. Par contre, je ne comprends pas pourquoi il y a cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Salut,

    merci pour ta réponse aussi rapide, à quoi ce genre de renseignement peut-il être utile (je suis vraiment novice en SQL :s ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
    Concernant cette ligne de code je ne pourrai pas te dire, je me renseignerai auprès de mon maitre de stage (qui est en arrêt maladie pour le moment ).

  4. #4
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Cette requête te renvoie le dernier ID inséré, mais ca fait doublon

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Points : 586
    Points
    586
    Par défaut
    Par exemple si tu gère des relation,
    avoir le dernier id inséré dans la table "parent" permet de le réutilisé dans l'autre table de ta relation.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Merci pour ces éclaircissements .

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 862
    Points : 53 013
    Points
    53 013
    Billets dans le blog
    6
    Par défaut
    @@IDENTITY donne la valeur du dernier auto incrément effectué dans la session.

    SCOPE_IDENTITY() donne la valeur du dernier auto incrément effectué dans l'étendue de code de la session.

    La différence est fondamentale : si entre l'INSERT et la récupération de l'incrément il y a un trigger qui insère une ligne dans une autre table, alors vous recevrez :
    avec IDENTITY, la valeur de l'incrément de la table du déclencheur...
    avec SCOPE_IDENTITY(), la valeur de l'incrément de la table visible dans votre procédure et non pas celle du déclencheur...

    Démonstration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE T1 (ID INT IDENTITY(1,1), DATA VARCHAR(8));
    CREATE TABLE T2 (ID INT IDENTITY(777,1), DATA VARCHAR(8));
    GO
    CREATE TRIGGER E ON T1 FOR INSERT AS
    INSERT INTO T2 VALUES ('toto');
    GO
     
    INSERT INTO T1 VALUES ('titi');
    SELECT @@IDENTITY, SCOPE_IDENTITY()
     
    --------------------------------------- ---------------------------------------
    777                                     1


    A +

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/02/2013, 15h56
  2. Question sur le Scope PAGE
    Par riadhhwajdii dans le forum Seam
    Réponses: 1
    Dernier message: 18/05/2011, 12h38
  3. question sur champ de type "identity"
    Par iceman2001 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/05/2009, 17h02
  4. Question de faisabilité
    Par lisarasu dans le forum CORBA
    Réponses: 3
    Dernier message: 14/05/2002, 11h26
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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