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 :

Select into avec "Identity"


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 15
    Points
    15
    Par défaut Select into avec "Identity"
    Bonjour,

    J'ai un problème que je ne comprends pas...

    J'ai besoin d'écrire dans une table avec un compteur qui a déjà des enregistrements... jusqu'ici tout va bien !

    Pour ce faire je sais que je peux utiliser un curseur mais je voudrais éviter.

    Et donc voilà ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    declare @i int
    select @i = max(monCompteur) from maTable
    set @i = @i + 1
     
    select ..., identity(int, @i, 1) monCompteur,... 
    into #maTableTmp
    from maTableSrc
     
    ...
    Et après je fais un truc du genre... (la structure de la table destination et temporaire est identique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into maTable select * from #maTableTmp

    Et ben... A mon grand étonnement cela ne fonctionne pas...
    J'obtiens le message suivant sur la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select ..., identity(int, @i, 1) monCompteur,... 
    into #maTableTmp
    from maTableSrc
    Syntaxe incorrecte vers '@i'.
    Evidemment si je met une valeur entière en dur cela fonctionne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select ..., identity(int, 58, 1) monCompteur,... 
    into #maTableTmp
    from maTableSrc
    Comprends pas !

    Si vous êtes déjà tomber la dessus aidez moi SVP !!!

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    normal, cette fonction prend des valeurs pas des variables en arguments.

    A +

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 15
    Points
    15
    Par défaut


    On continue...

    C'est avec des réponses comme çà que tu es arrivé à progresser en SQL, quand c'est toi qui t'en pausait ?

    Si c'est le cas, bravo ! Tu as toutes mes félicitations.

    Donc j'ai fini par trouver une solution... (parce qu'en fait c'est çà que je cherchais... une solution) à mon problème.

    Il faut construire une chaîne de caractère dans laquelle on insère la valeur du compteur.
    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
    -- Récup du dernier numéro de pièce pour les affaires et ajoute 1
    select @DerNum = max(gp_numero) 
    from edfr_test..piece 
    where gp_naturepieceg = 'AFF'
     
    set @DerNum = @DerNum + 1
     
    -- Insertion table
    set @sql='
    select aff_affaire Aff, identity(int, ' + cast(@DerNum as varchar) + ', 1) NwNum
    into PieceTmp
    from edfr_test..affaire
    left outer join edfr_test..piece on aff_affaire = gp_affaire
    where gp_affaire is null'
    exec(@sql)
    Si cette solution est une hérésie, ne manque pas de me le souligner dans une de tes réponses constructives dont tu as le secret.

    Désolé d'employer ce ton là... mais après avoir consulté les différents "post", mon niveau de tolérence s'est progressivement estompé...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    elle est bonne cela s'eapelle du SQL dynamique. Le SQL dynamique possède un inconvénient majeur : la perte du contexte d'exécution qui peut conduire à d'autres problématiques...

    A +

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/12/2012, 12h51
  2. [PL/SQL] SELECT INTO avec type TABLE
    Par Kaejar dans le forum Oracle
    Réponses: 13
    Dernier message: 06/07/2006, 16h17

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