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

Développement SQL Server Discussion :

Comment désactiver la propriété IDENTITY dans un SELECT INTO ?


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Comment désactiver la propriété IDENTITY dans un SELECT INTO ?
    Bonjour à tous,

    voilà mon souci.
    J'ai une base centrale sous SQLServer 2014. Toutes les tables ont une clé primaire déclarée avec IDENTITY.
    Pour synchroniser d'autres bases de données avec cette base centrale, je procède à des exports en utilisant la commande
    SELECT * INTO FROM .. WHERE ...
    Cette commande me génère automatiquement de nouvelles tables en reprenant les attributs des tables sources dont la propriété IDENTITY ce qui me pose problème car
    il me regénère toutes les valeurs des clés primaires.
    Comment faire pour qu'il garde les valeurs des clés primaires de la table d'origine ?
    J'ai essayé la commande SET IDENTITY_INSERT à OFF sur la table de destination et forcément ça plante car la table n'est pas créée,
    j'ai essayé la même commande sur la table source et il recodifie tout de même les clés primaires dans les tables de destination !

    Un petit exemple pour être plus clair

    Ma table T1 (code, nom, ville)
    1,DUPOND,PARIS
    2,CHARLES,LYON
    3,MARTIN,PARIS
    4,LOUISE,LILLE
    5,MARCEL,PARIS

    Ma sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * INTO XT1 FROM T1 WHERE ville = 'PARIS'
    Je souhaite récupérer dans XT1
    1,DUPOND,PARIS
    3,MARTIN,PARIS
    5,MARCEL,PARIS

    et actuellement je récupère
    1,DUPOND,PARIS
    2,MARTIN,PARIS
    3,MARCEL,PARIS

    Je cherche idéalement une solution sans procédure stockée ...
    Si aucune solution n'est disponible, je recréerai les tables de la base centrale sans la propriété IDENTITY.

    Merci d'avance pour vos retours.

    Cordialement.

    Stéphane

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je pense que vous faites erreur quelque part :
    La table créée par un SELECT INTO ne devrait pas avoir la propriété IDENTITYEt elle devrait bien contenir les lignes que vous souhaitez... (valeurs 1,3 et 5 pour la colonne id)

    pourriez vous poster le code exact que vous exécutez ?
    ainsi que la définition de la table sous forme de script DDL ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réactivité.
    Vous avez tout à fait raison, le résultat du SELECT INTO est correct.
    ci-joint code correspondant.
    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
    /* ***** Object:  Table T1    Script Date: 21/09/2016 ******/
    DROP TABLE T1
    GO
     
    /* ***** Object:  Table T1    Script Date: 21/09/2016 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE T1 (
    	T1_CODE bigint IDENTITY(1,1) NOT NULL,
    	NOM varchar(60) NOT NULL,
    	VILLE varchar(60) NOT NULL,
    CONSTRAINT T1_PK PRIMARY KEY CLUSTERED 
    (
    	T1_CODE ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    )
    GO
    SET ANSI_PADDING OFF
    GO
     
    INSERT INTO T1 (NOM, VILLE) VALUES
    ('DUPOND','PARIS'),
    ('CHARLES','LYON'),
    ('MARTIN','PARIS'),
    ('LOUISE','LILLE'),
    ('MARCEL','PARIS');
     
    SELECT * FROM T1;
     
    SELECT * INTO XT1 FROM T1 WHERE T1.VILLE='PARIS';
     
    SELECT * FROM XT1;
    1	DUPOND	PARIS
    3	MARTIN	PARIS
    5	MARCEL	PARIS
    Le problème venait de la transcription du contenu de la table dans un fichier d'échange.
    Merci encore.
    Cordialement.

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

Discussions similaires

  1. Comment désactiver javascript pour IE dans sa page.
    Par Tho Massage dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/07/2010, 13h35
  2. Réponses: 3
    Dernier message: 08/06/2010, 14h42
  3. Réponses: 2
    Dernier message: 24/11/2009, 15h52
  4. Réponses: 4
    Dernier message: 12/08/2008, 12h20

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