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 :

Identity (@variable, 1)


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Par défaut Identity (@variable, 1)
    Bonjour,

    est il possible de placer une variable comme n° de départ pour Identity ?

    Voici comment je m'y prends (mal ?) car il me met "Incorrect syntax near '@maxnrid'." au niveau d'Identity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DECLARE @maxnrid decimal(15,0)
     
    	select @maxnrid = max(nrid) from table1
        if @maxnrid is null 
            BEGIN
                set @maxnrid = 0 
            END
    	set @maxnrid = @maxnrid + 1
     
    -- jusqu'ici tout va bien, je récupère ma valeur, puis j'ajoute mon champ dans une table temporaire avec ma variable comme valeur de départ :
     
    alter table #tmp0
    add po0_nrid decimal(15,0) identity(@maxnrid,1);

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Non, visiblement on ne peut pas. De toute façon, il me semble que le SEED d'un champs IDENTITY ne peut êttre qu'integer même si le champs peut être décimal.

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE #tmp0
    ADD po0_nrid decimal(15,0) identity(@maxnrid,1);
    j'ajoute le champ "po0_nrid" autoincrémenté dans ma table #tmp0 et je souhaite que l'incrément ne débute pas classiquement à 1 mais par la valeur de ma variable, puis s'incrémente de 1.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par moumerico Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE #tmp0
    ADD po0_nrid decimal(15,0) identity(@maxnrid,1);
    j'ajoute le champ "po0_nrid" autoincrémenté dans ma table #tmp0 et je souhaite que l'incrément ne débute pas classiquement à 1 mais par la valeur de ma variable, puis s'incrémente de 1.

    Oui, je m'en suis aperçu après.

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Non, visiblement on ne peut pas. De toute façon, il me semble que le SEED d'un champs IDENTITY ne peut êttre qu'integer même si le champs peut être décimal.
    arf, j'esperais une autre réponse,
    tant pis je vais m'y prendre autrement pour generer mes clés

    merci quand même

  6. #6
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Vous pouvez tenter avec du SQL dynamique.

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Rien ne vous empêche de réinitialiser à tout moment la graine en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC CHECKIDENT ( 'nom_table', RESEED, nouvelle valeur )
    Et pour la paramétrer, en dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DECLARE @SQL NVARCHAR(300);
    SET @SQL = 'DBCC CHECKIDENT ( ''nom_table'', RESEED, ' + CAST(@maxnrid AS NVARCHAR(32)) +' );';
    EXEC (@SQL);
    Lisez ce que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p6...ec-sql-server/

    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/ * * * * *

  8. #8
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DECLARE @SQL NVARCHAR(300);
    SET @SQL = 'DBCC CHECKIDENT ( ''nom_table'', RESEED, ' + CAST(@maxnrid AS NVARCHAR(32)) +' );';
    EXEC (@SQL);
    respect SQLpro, ça marche nickel !
    j'avais lu ton article pdt mes recherches (TB fait d'ailleurs) mais je ne parvenais pas à m'en sortir tout seul

    encore merci

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

Discussions similaires

  1. recuperer l'identity value dans une variable
    Par SILO dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/05/2012, 15h56
  2. ré-initialiser un identity sur une variable de type table
    Par laurent-devel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/03/2008, 19h39
  3. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08
  4. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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