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 :

copie de base, mais


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut copie de base, mais
    Bonjour,

    Je voudrais copier la structure d'une base vers un autre serveur sans les données.
    Puis pour quelques tables les copier, données comprises, dans la base nouvellement transféré.

    Je suis un débutant de chez débutant donc soyez très clair svp.

    Je suis sur Ms SQL server 2005.
    J'ai trouvé un topic pour copier une structure mais on parle de scritp. Est-on obligé de passer par là?

    Merci.

  2. #2
    Membre émérite
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Par défaut
    A priori c'est ce qu'il y a de plus simple surtout que c'est SQL Serveur qui les génère. Par contre ,ca ne prend que la structure, pas les données.
    Sinon il y a le backup/restore mais je ne maitrise pas très bien (jamais eu besoin de l'utiliser à vrai dire) et j'ai eu quelques problèmes avec le restore.

    Pour les scripts, click droit sur la base, puis tasks/generate scripts et tu choisis les options du script.

    Après il y a peut être d'autres possibilités (miroir ?) mais là je connais pas du tout.

  3. #3
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    SQL publisher wizard fait tout ce que tu veux pour toi, sous forme de script généré avec ou sans les données.

    +avec sqlpubwiz en mot clé
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    ou via génération de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select into Base2..table1 from Base1..table1 where 1=2
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Si vous êtes débutant et ne voulez pas vous perdre dans le Transact-SQL (même s'il faudra y venir un jour...), dans SQL Server Management Studio:

    - clic droit sur la base à copier
    - dans Tasks / Generate scripts...
    - suivre l'assistant en choisissant les objets à scripter (tables, users...)
    - un script est généré

    Créer la nouvelle base et exécuter le script ci-dessus dedans. Les objets y seront recréé.

  6. #6
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Citation Envoyé par kuzco Voir le message
    Si vous êtes débutant et ne voulez pas vous perdre dans le Transact-SQL (même s'il faudra y venir un jour...), dans SQL Server Management Studio:

    - clic droit sur la base à copier
    - dans Tasks / Generate scripts...
    - suivre l'assistant en choisissant les objets à scripter (tables, users...)
    - un script est généré

    Créer la nouvelle base et exécuter le script ci-dessus dedans. Les objets y seront recréé.
    ca ne prend pas les données...
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Lancyo Voir le message
    Je voudrais copier la structure d'une base vers un autre serveur sans les données.
    Effectivement, mais Lancyo ne veut que la structure, pas les données.

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut Feebback 1 et demande d'info
    Merci,

    Pour résumer.

    1 étape: (merci kuzco)

    Pour copier la structure d'une base dans une autre sans les données.

    dans SQL Server Management Studio:

    - clic droit sur la base à copier
    - dans Tasks / Generate scripts...
    - suivre l'assistant en choisissant les objets à scripter (tables, users...)
    - un script est généré

    Créer la nouvelle base et exécuter le script ci-dessus dedans. Les objets y seront recréé.

    2 étape: (merci fadace)

    Pour copier quelques bases avec leurs données.

    SELECT INTO Base2..table1 FROM Base1..table1 WHERE 1=2

    Pour avancer.

    Est-ce que cette requete SQL marche si les 2 bases sont sur des serveurs différents.
    Si oui comment indique-t-on les serveurs dans la requete?

    Merci.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Non, pour la 2eme étape, la clause
    a pour valeur FAUX. Donc aucune donnée n'est copiée. Il faut modifier cette clause ou la supprimer pour copier les données.

    Les index ne seront pas copiés.

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut Feedback 2
    Bonsoir,

    L'étape 1 (copie de la base sans les données) s'est déroulée sans problème.

    L'étape 2 (copie de quelques tables avec les données) ne fonction pas.

    select * into Copie_Base1..LAST_SYNCHRO from Base1..LAST_SYNCHRO

    note : ne pas oublié l'étoile sinon c'est mort.

    Donne comme message d'erreur:

    There is already an object named 'LAST_SYNCHRO' in the database.

    Pour résumer

    Etape 1 ok.

    la bonne syntaxe pour l'étape 2 est :

    SELECT * INTO Base2..table1 FROM Base1..table1

    Pour ce qui est de l'erreur je la traiterai lundi.

    Bon week end.

  11. #11
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Attention : SELECT * INTO maTableCible FROM maTableSource crée maTableCible. Comme le nom des tables doît être unique dans une base de données, l'instruction échoue.

    En revanche INSERT INTO maTableCible SELECT * FROM maTableSource fonctionnera. Eventuellement ajouter une contrainte WHERE.

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut
    Bonjour,

    Merci elsuket.

    J'ai effectivement pensé à ca ce weekend.
    Ca marche sauf pour les tables avec une numérotation automatique.

    Message d'erreur:
    Msg 8101, Level 16, State 1, Line 1
    An explicit value for the identity column in table 'Copie_Osiris_NL.dbo.CONTRACT_TYPE_DEF' can only be specified when a column list is used and IDENTITY_INSERT is ON.

    Je travaille dessus, et je feedback.
    Si quelqu'un à une idée je suis également preneur.

    Cdt.

  13. #13
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut
    Slt,

    Pour pouvoir utiliser insert into avec une table comprennant un champ identity, en principe, il faut utiliser la commande suivante avant le insert into.

    SET IDENTITY_INSERT ma_table ON

    Mais ca marche pas malgrté le "Command(s) completed successfully" lors de l'execution de la commande set identity.
    Que je mette ON ou OFF j'ai toujours le même message d'erreur.

    Message d'erreur:
    Msg 8101, Level 16, State 1, Line 1
    An explicit value for the identity column in table 'Copie_Osiris_NL.dbo.CONTRACT_TYPE_DEF' can only be specified when a column list is used and IDENTITY_INSERT is ON.


    Par contre quand je passe par SQL Server Management et que je change le "identity" en no, ca marche.

    Que dois-je faire pour que ca marche directement avec une requete SQL?

    Merci.

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut Feedback 3
    Bonjour,

    Rappel de la question posée:

    Je voudrais copier la structure d'une base vers un autre serveur sans les données.
    Puis pour quelques tables les copier, données comprises, dans la base nouvellement transféré.

    1 étape: Pour copier la structure d'une base dans une autre sans les données.

    Dans SQL Server Management Studio:

    - clic droit sur la base à copier
    - dans Tasks / Generate scripts...
    - suivre l'assistant en choisissant les objets à scripter (tables, users...)
    - un script est généré

    Créer la nouvelle base et exécuter le script généré ci-dessus dedans. Les objets y seront recréés.

    2 étape: Pour copier quelques bases avec leurs données.

    Pour les tables sans colonne type "identity".

    INSERT INTO Base2.table1 SELECT * FROM Base1.table1

    Pour les tables ayant une colonne type "identity" deux méthodes possibles.

    Avec SQL Server Management:

    - Clic droit sur les tables concernées, Modifier
    - Développer le "Identity Spécification"
    - Changer la valeur "Is Identity" à No.

    Après avoir copié les tables remettre le "Is Identity" à Yes

    Par script SQL:

    Exemple de script:

    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
     
    ----- Copie de Table avec une colonne "Identity" ------
    ----- Enumérer toutes les colonnes sinon ca ne marche pas. ------
     
    DECLARE @UniqueID NUMERIC(18,0)
    DECLARE @ContractTypeID VARCHAR(50)
    DECLARE @ContractTypeName VARCHAR(100)
    DECLARE @ContractTypeVersion CHAR(10)
    DECLARE @Content VARCHAR(22)
    DECLARE @ActivationDate CHAR(10)
    DECLARE @ExpirationDate CHAR(10)
     
    SET IDENTITY_INSERT Copie_Osiris_NL.dbo.CONTRACT_TYPE_DEF ON  
     
    DECLARE C CURSOR
    FOR
       SELECT UniqueID, ContractTypeID, ContractTypeName, ContractTypeVersion, Content, ActivationDate, ExpirationDate
       FROM Osiris_NL.dbo.CONTRACT_TYPE_DEF
    OPEN C
     
    FETCH C INTO @UniqueID, @ContractTypeID, @ContractTypeName, @ContractTypeVersion, @Content, @ActivationDate, @ExpirationDate
     
    WHILE (@@FETCH_STATUS = 0)
       BEGIN
          INSERT INTO Copie_Osiris_NL.dbo.CONTRACT_TYPE_DEF (UniqueID, ContractTypeID, ContractTypeName, ContractTypeVersion, Content, ActivationDate, ExpirationDate) VALUES (@UniqueID, @ContractTypeID, @ContractTypeName, @ContractTypeVersion, @Content, @ActivationDate, @ExpirationDate)
          FETCH C INTO @UniqueID, @ContractTypeID, @ContractTypeName, @ContractTypeVersion, @Content, @ActivationDate, @ExpirationDate
    END
     
    CLOSE C
    DEALLOCATE C
     
    SET IDENTITY_INSERT Copie_Osiris_NL.dbo.CONTRACT_TYPE_DEF OFF 
     
    ------------------------------------------
    Remarque importante:
    Il faut impérativement énumérer toutes les colonnes sinon ca ne marche pas.

    Merci.

    Ps: J'ai un problème de dépendance qui ne c'est pas propagé à la copie, mais laquelle?
    Je reteste le tout demain et je poste après.

Discussions similaires

  1. requete copie de base
    Par majeb dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/08/2005, 18h25
  2. copy de nodes mais attribut en trop
    Par Triangle dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 15/06/2005, 18h30
  3. Copie de base
    Par ptidoudou02 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/05/2005, 14h39
  4. Probleme de de copie de base de données
    Par valentin4949 dans le forum Access
    Réponses: 3
    Dernier message: 01/11/2004, 16h54
  5. Problème Lors d'un copie de base
    Par 79Charles dans le forum Administration
    Réponses: 17
    Dernier message: 19/08/2004, 15h13

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