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 :

Effectuer un insert a partir d'une table d'une base vers une autre base identique


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut Effectuer un insert a partir d'une table d'une base vers une autre base identique
    Bonsoir tout le monde,

    Cela faisait trèèèèès longtemps que je n'avais posté ici

    Jusque là, je trouvais toujours plus ou moins comment me débrouiller.

    Si je prends la plume ce soir, c'est pour quérir votre aide donc !

    Le pitch :

    Je possède une base sous Microsoft sql server (qui sert pour le gestionnaire de ticket de la boite). Sur cette base, pour des raisons de licence, j'ai dû supprimer des données... je sais....
    Nous avions atteint les 10 Go de SQL Express, le service devait tourner le weekend absolument.

    J'ai tout de même effectué une sauvegarde complète.

    Sauvegarde restaurée sur une nouvelle base du même serveur.

    J'arrive retrouver les données de la base restaurée et qui sont manquantes sur la base de production.

    J'utilise cette requête (si jamais vous voyez quelque chose de faux^^)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * from [_SMDBA_].[_TELDETAI_] as TI23
    left join [TI20].[_SMDBA_].[_TELDETAI_] as TI20 
    on TI23.sequence = TI20.SEQUENCE
    where TI20.SEQUENCE is null
    Je retrouve avec 1412 enregistrements.

    Maintenant je souhaiterais les insérer dans la même table mais de la base de production :

    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
     
    begin tran
    INSERT INTO [TI20].[_SMDBA_].[_TELDETAI_]
     ([SEQUENCE]
               ,[LASTMODIFIED]
               ,[LASTUSER]
               ,[_GROUP_]
               ,[NOTE]
               ,[PROBLEM #]
               ,[PDATE]
               ,[PERSON]
               ,[TIME SPENT]
               ,[ACTION]
               ,[COMMANDLINE]
               ,[_INACTIVE_:]
               ,[LINK_MSCRM_ACTIVITYID]
               ,[FROM_GROUP:]
               ,[TO_GROUP:]
               ,[SESSIONID]
               ,[EMAILTOEMAILFROM]
               ,[SEQ_EMAILMGMT]
               ,[NOTETYPE]
               ,[ISPRIVATE]
               ,[REQUESTOR#]
               ,[CHARGE]
               ,[TI11_NoteID])
         VALUES
    (select * from [_SMDBA_].[_TELDETAI_] as TI23
    left join [TI20].[_SMDBA_].[_TELDETAI_] as TI20 
    on TI23.sequence = TI20.SEQUENCE
    where TI20.SEQUENCE is null)

    Et là... bah ça marche pas. Et le message d'erreur n'est pas des plus clair malheureusement

    Msg*156, Niveau*15, État*1, Ligne*37
    Syntaxe incorrecte vers le mot clé 'select'.
    Msg*102, Niveau*15, État*1, Ligne*40
    Syntaxe incorrecte vers ')'.

    Heure de fin*: 2024-02-02T18:46:39.6441641+01:00
    Est-ce que par le plus grand des hasards, vous auriez une idée ?

    TI20 étant la base de production avec les données manquantes.

    Ti_2023 étant la base restaurée complète.

    Comme j'ai plusieurs tables à faire, si celle-ci passe, les autres passeront

    Merci par avance pour votre aide et désolé pour ce long message !

  2. #2
    Membre chevronné Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 554
    Par défaut
    Mauvaise syntaxe, pas de VALUES pour un select après, le message est plutôt clair : Syntaxe incorrecte vers le mot clé 'select'.
    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
    INSERT INTO [TI20].[_SMDBA_].[_TELDETAI_]
     ([SEQUENCE]
               ,[LASTMODIFIED]
               ,[LASTUSER]
               ,[_GROUP_]
               ,[NOTE]
               ,[PROBLEM #]
               ,[PDATE]
               ,[PERSON]
               ,[TIME SPENT]
               ,[ACTION]
               ,[COMMANDLINE]
               ,[_INACTIVE_:]
               ,[LINK_MSCRM_ACTIVITYID]
               ,[FROM_GROUP:]
               ,[TO_GROUP:]
               ,[SESSIONID]
               ,[EMAILTOEMAILFROM]
               ,[SEQ_EMAILMGMT]
               ,[NOTETYPE]
               ,[ISPRIVATE]
               ,[REQUESTOR#]
               ,[CHARGE]
               ,[TI11_NoteID])
    select * from [_SMDBA_].[_TELDETAI_] as TI23
    left join [TI20].[_SMDBA_].[_TELDETAI_] as TI20 
    on TI23.sequence = TI20.SEQUENCE
    where TI20.SEQUENCE is null
    En espérant qu'il y a autant de colonnes dans le insert que le select.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut
    Hey hey, merci

    Mais tu as raison, il me double les colonnes du coup dans le select.

    La première partie du select me sort les champs renseignés de ti_23. Suivie immédiatement des mêmes champs mais null

    J'ai corrigé en mettant TI23.* dans le select.

    ça m'a l'air bien, merci beaucoup !!

  4. #4
    Membre chevronné Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 554
    Par défaut
    Citation Envoyé par mogway95 Voir le message
    J'ai corrigé en mettant TI23.* dans le select.
    C'est toujours une mauvaise pratique d'utiliser select *, il faut faire l'effort de mettre explicitement le nom des colonnes, ça évite bien des problèmes ensuite !
    Entre les colonnes qui ne sont pas dans le bonne ordre et les colonnes qui sont ajouté...

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    À propos du SELECT * , voir mon article de blog ICI .

    Et il ne faut pas confondre les champs qui sont les attributs d'un formulaire de saisie ou d'un état et les colonnes qui sont les attributs d'une table ou d'une vue.

  6. #6
    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
    Citation Envoyé par mogway95 Voir le message
    Bonsoir tout le monde,

    Cela faisait trèèèèès longtemps que je n'avais posté ici

    Jusque là, je trouvais toujours plus ou moins comment me débrouiller.

    Si je prends la plume ce soir, c'est pour quérir votre aide donc !

    Le pitch :

    Je possède une base sous Microsoft sql server (qui sert pour le gestionnaire de ticket de la boite). Sur cette base, pour des raisons de licence, j'ai dû supprimer des données... je sais....
    Nous avions atteint les 10 Go de SQL Express, le service devait tourner le weekend absolument.
    Vous auriez pu faire de la compression... Cela aurait résolu temporairement votre problématique au lieu de détruire l'information sans réfléchir.... ALTER TABLE/INDEX ... REBUIL WITH (DATA_COMPRESSION = PAGE)

    J'ai tout de même effectué une sauvegarde complète.

    Sauvegarde restaurée sur une nouvelle base du même serveur.

    J'arrive retrouver les données de la base restaurée et qui sont manquantes sur la base de production.

    J'utilise cette requête (si jamais vous voyez quelque chose de faux^^)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * from [_SMDBA_].[_TELDETAI_] as TI23
    left join [TI20].[_SMDBA_].[_TELDETAI_] as TI20 
    on TI23.sequence = TI20.SEQUENCE
    where TI20.SEQUENCE is null
    Je retrouve avec 1412 enregistrements.

    Maintenant je souhaiterais les insérer dans la même table mais de la base de production :

    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
     
    begin tran
    INSERT INTO [TI20].[_SMDBA_].[_TELDETAI_]
     ([SEQUENCE]
               ,[LASTMODIFIED]
               ,[LASTUSER]
               ,[_GROUP_]
               ,[NOTE]
               ,[PROBLEM #]
               ,[PDATE]
               ,[PERSON]
               ,[TIME SPENT]
               ,[ACTION]
               ,[COMMANDLINE]
               ,[_INACTIVE_:]
               ,[LINK_MSCRM_ACTIVITYID]
               ,[FROM_GROUP:]
               ,[TO_GROUP:]
               ,[SESSIONID]
               ,[EMAILTOEMAILFROM]
               ,[SEQ_EMAILMGMT]
               ,[NOTETYPE]
               ,[ISPRIVATE]
               ,[REQUESTOR#]
               ,[CHARGE]
               ,[TI11_NoteID])
         VALUES
    (select * from [_SMDBA_].[_TELDETAI_] as TI23
    left join [TI20].[_SMDBA_].[_TELDETAI_] as TI20 
    on TI23.sequence = TI20.SEQUENCE
    where TI20.SEQUENCE is null)

    Et là... bah ça marche pas. Et le message d'erreur n'est pas des plus clair malheureusement
    Quel est ce message d'erreur. En général ils sont très claire.... Mais votre manque de connaissance vous les rend sans doute incompréhensible !



    Est-ce que par le plus grand des hasards, vous auriez une idée ?

    TI20 étant la base de production avec les données manquantes.

    Ti_2023 étant la base restaurée complète.

    Comme j'ai plusieurs tables à faire, si celle-ci passe, les autres passeront

    Merci par avance pour votre aide et désolé pour ce long message !
    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/ * * * * *

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2015
    Messages : 21
    Par défaut insert depuis une autre base de donnée sur la même instance
    INSERT INTO table1 (champ1,champ2,champ3) SELECT champ1,champ2,champ3 FROM [base2]..table2;

Discussions similaires

  1. Trigger avec Insertion à partir d'une autre table
    Par ALexSql dans le forum Développement
    Réponses: 1
    Dernier message: 15/03/2012, 22h41
  2. insert a partir d une autre table
    Par jpapa dans le forum Accès aux données
    Réponses: 3
    Dernier message: 28/12/2009, 23h49
  3. requete insert a partir d'une autre table
    Par c+cool dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/07/2008, 09h46
  4. Insert à partir d'une autre requête
    Par DjyDjy dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/03/2007, 20h48
  5. Réponses: 1
    Dernier message: 23/01/2007, 15h57

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