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 :

Insert into Select


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Par défaut Insert into Select
    Bonjour,

    Je souhaite faire un INSERT INTO SELECT.
    Particularité, je n'utilise pas les identity. Pour des faits historique j'ai un générateur unique.

    J'ai donc cette procédure pour incrémenter et me retourner mon ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create procedure dbo.getClePrimaire @iClePrim int OUTPUT
    as
    begin
        -- insert into bidon pour générer un identity
        insert into TABLE_CLE (CODE_CLE)
        values (1);
     
       -- retour de l'identity en paramÞtre de sortie
        SELECT @iClePrim = @@IDENTITY;
    end;
    Par contre je ne vois pas comment faire simplement un insert into select du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO A (CODE_A, NOM_A)
    SELECT "truc pour générer mon ID",  NOM_B FROM B
    Si quelqu'un a une idée je suis preneur

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    ça ne marche pas ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NSERT INTO A (CODE_A, NOM_A) SELECT "truc pour générer mon ID",  NOM_B FROM B
    Quel est le message d'erreur ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Vous ne pouvez pas faire un INSERT qui encapsule une autre commande. Ce n'est pas transactionnellement cohérent !

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

  4. #4
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Par défaut
    Bonjour, je fais quelque chose comme ça pour faire l'équivalent de ce que tu veux faire:

    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
    --définit la structure de la table qui stocke la liste des données
    create table #T_temp_code_erreur (
          id_regle_erreur uniqueidentifier not null,
          code_erreur varchar(18) not null,
          description_erreur varchar(4000) not null,
          regle_erreur varchar(4000)
    )
     
    --initialise la table #T_temp_code_erreur
    insert into #T_temp_code_erreur
    	select	[r].[id_configuratorEngine] as [id_regle_erreur],
    			[r].[v_codeArticle] as [code_erreur],
    			[r].[v_commentaire] as [description_erreur],
    			'' as [regle_erreur]
    	from		[ServSql1].[ConfiguratorEngine].[dbo].[T_configuratorEngine] as [r]
    	inner join	[ServSql1].[ConfiguratorEngine].[dbo].[T_module] as [m]
    				on	[m].[id_module]=[r].[id_module]
    	where		[m].[v_module_display]=@v_module_display
    Tu noteras que j'alias tous les champs de mon select avec les noms des champs cibles.

    Par contre, je ne peux pas te garantir que ça puisse marcher avec une table non-temporaire. Le DBA de mon boulot veut pas me laisser en écriture.
    (Entre nous il a raison d'être prudent).

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 3
    Par défaut ID unique
    Bonjour,
    Nous avons la même problématique que "Joc02".
    On doit avoir un ID unique pour chaque enregistrement quelque soit la table.
    Nous débutons en MS-SQL.
    Si quelqu'un a une solution pour obtenir un id unique et permettre de l'utiliser directement dans une requête d'insertion, nous sommes preneur. Cela fonctionne très bien avec firebird/interbase et les générateurs.

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Pourquoi ne pas implémenter une table de compteur de cas là ?

    - Je récupère le dernier enregistrement + 1 = dernier ID
    - Je mets à jour la table avec le dernier ID généré
    - Je mets à jour le dernier enregistrement

    etc ...

    - Je récupère le dernier enregistrement + 1 = dernier ID
    - Je mets à jour avec le dernier ID généré
    - Je mets à jour le dernier enregistrement

    Et ceci pour chaque transaction de mise à jour de vos tables.

    ++

Discussions similaires

  1. SQL : syntaxe insert into select
    Par chrislauxerrois dans le forum Access
    Réponses: 15
    Dernier message: 31/07/2006, 16h12
  2. [Oracle 9] Anomalie insert into select
    Par maxidoove dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/05/2006, 14h11
  3. probleme dans un INSERT INTO...........SELECT
    Par briiice dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/01/2006, 15h13
  4. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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