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 averti
    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
    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 émérite
    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
    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 averti
    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
    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 émérite
    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
    Par défaut
    Cette requête te renvoie le dernier ID inséré, mais ca fait doublon

  5. #5
    Membre éclairé
    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
    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 averti
    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
    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 997
    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 997
    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 +
    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/ * * * * *

+ 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