Copier des tables d'une base de données à une autre dans SQL Server

j'ai une base de données appelée foo et une base de données appelée barre. J'ai une table dans foo appelé tblFoobar que je veux déplacer (données et tout) à la barre de base de données à partir de la base de données foo. Qu'est-ce que la déclaration SQL pour faire cela?

304
demandé sur Christopher Rapcewicz 2008-10-09 19:20:58

9 réponses

sur SQL Server? et sur le même serveur de base de données? Utilisez la dénomination en trois parties.

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

cela ne fait que déplacer les données. Si vous voulez déplacer la définition de la table (et d'autres attributs tels que les permissions et les index), vous devrez faire autre chose.

197
répondu Amy B 2011-08-10 02:51:50
La tâche "Import Data" de "SQL Server Management Studio

(clic droit sur le nom de la base de données, puis tâches) fera la plupart de cela pour vous. Exécuter à partir de la base de données que vous voulez copier les données.

si les tables n'existent pas, elles seront créées pour vous, mais vous devrez probablement recréer des index et autres. Si les tables existent, il ajoutera les nouvelles données par défaut mais vous pouvez ajuster cela (éditer mappages) de sorte qu'il supprimera toutes les données existantes.

j'en utilise tout le temps et il fonctionne assez bien.

527
répondu David 2013-12-26 07:04:52

cela devrait fonctionner:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

Il pas copie constaints, les valeurs par défaut ou des index. La table créée sera et non avec un index groupé.

vous pouvez aussi:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

si votre table de destination existe et est vide.

95
répondu leoinfo 2011-08-10 02:50:55

si c'est une seule table, alors tout ce que vous devez faire est

  • Script de définition de la table
  • créer une nouvelle table dans une autre base de données
  • mise à Jour des règles, des index, des autorisations et ces
  • Importer des données (plusieurs insérer dans les exemples ci-dessus)

une chose que vous aurez à considérer est d'autres mises à jour telles que la migration d'autres objets dans le futur. Note que vos tables source et destination n'ont pas le même nom. Cela signifie que vous devrez également effectuer des modifications si vous dépendez d'objets tels que les vues, Les procédures stockées et autres.

Whit un ou plusieurs objets que vous pouvez aller manuellement w/o tous les problèmes. Cependant, lorsqu'il y a plus que quelques mises à jour 3ème partie outils de comparaison très utile. En ce moment j'utilise ApexSQL Diff pour les migrations de schéma mais vous ne pouvez pas vous tromper avec n'importe quel autre outil de.

46
répondu Igor Voplov 2013-05-29 09:00:49
  1. Script le create table dans management studio, exécutez ce script dans la barre pour créer la table. (Cliquez droit sur la table dans l'explorateur d'objets, table de scripts que, créer pour...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

22
répondu ScottStonehouse 2012-05-23 09:25:05

vous pouvez aussi utiliser le "Generate SQL Server Scripts Wizard pour aider à guider la création de scripts SQL qui peuvent faire ce qui suit:

  • copier le schéma de la table
  • contraintes (identité, valeurs par défaut, etc)
  • données dans le tableau
  • et de nombreuses autres options si nécessaire

bon exemple flux de travail pour SQL Server 2008 avec des captures d'écran montre ici .

16
répondu ryan 2011-10-12 00:04:05

Vous pouvez aller avec cette façon: ( un exemple général )

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

aussi si vous avez besoin de générer les noms de colonne aussi bien pour mettre dans insérer la clause, utiliser:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName')

copier le résultat et coller dans la fenêtre de requête pour représenter vos noms de colonne de table et même cela exclura la colonne d'identité aussi bien:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0

souvenez-vous que le script pour copier les lignes fonctionnera iff les bases de données appartiennent à la même emplacement.


vous pouvez essayer ceci.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

le nom du serveur est facultatif si les deux bases de données sont sur le même serveur.

8
répondu NeverHopeless 2016-04-26 11:20:02

S'il existe une table existante et que nous voulons copier uniquement les données, nous pouvons essayer cette requête.

insert into Destination_Existing_Tbl select col1, col2 FROM Source_Tbl

1
répondu Mohan 2016-05-24 06:06:35

Données De Copie

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
0
répondu Arun Prasad E S 2016-01-18 09:55:04