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?
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.
(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.
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.
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.
-
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...) -
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
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 .
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.
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
Données De Copie
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details