web-dev-qa-db-fra.com

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 bar. J'ai une table dans foo appelée tblFoobar que je veux déplacer (données et tout) à la barre de base de données de la base de données foo. Quelle est l'instruction SQL pour faire cela?

316
RyanKeeter

Sur SQL Server? et sur le même serveur de base de données? Utilisez un nom en trois parties.

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

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

203
Amy B

La tâche "Importer des données" de SQL Server Management Studio (cliquez avec le bouton droit de la souris sur le nom de la base de données, puis sur les tâches) vous en fournira l'essentiel. Exécutez-le à partir de la base de données dans laquelle vous souhaitez copier les données.

Si les tables n'existent pas, elles seront créées pour vous, mais vous devrez probablement recréer tous les index, etc. Si les tables existent, les nouvelles données seront ajoutées par défaut, mais vous pouvez les ajuster (modifier les correspondances) afin de supprimer toutes les données existantes.

Je l'utilise tout le temps et cela fonctionne assez bien.

531
David

Cela devrait fonctionner:

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

Ce sera pas copier les constellation, les valeurs par défaut ou les index. La table créée aura pas un index clusterisé.

Sinon, vous pouvez:

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

Si votre table de destination existe et est vide.

102
leoinfo

Si c’est une seule table, alors tout ce que vous avez à faire est

  • Définition de la table de script
  • Créer une nouvelle table dans une autre base de données
  • Règles de mise à jour, index, autorisations, etc.
  • Importer des données (plusieurs insertions dans des exemples sont déjà présentées ci-dessus)

Vous devez également prendre en compte d’autres mises à jour, telles que la migration d’autres objets dans le futur. Notez que vos tables source et cible n'ont pas le même nom. Cela signifie que vous devrez également apporter des modifications si vous utilisez des objets dépendants tels que des vues, des procédures stockées, etc.

Avec un ou plusieurs objets, vous pouvez aller manuellement sans aucun problème. Cependant, quand il y a plus que quelques mises à jour, les outils de comparaison par une tierce partie sont très utiles. Actuellement, j’utilise ApexSQL Diff pour les migrations de schéma, mais vous ne pouvez vous tromper avec aucun autre outil.

46
Igor Voplov
  1. Scriptez le create table dans le studio de gestion, exécutez ce script dans la barre pour créer la table. (Clic droit sur la table dans l'explorateur d'objets, table de script en tant que, créer dans ...)

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

23
ScottStonehouse

Vous pouvez également utiliser assistant de génération de scripts SQL Server pour vous aider à créer des scripts SQL pouvant effectuer les opérations suivantes:

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

Bon exemple de flux de travail pour SQL Server 2008 avec des captures d'écran affichées ici .

16
ryan

Vous pouvez aller avec cette voie: (un exemple général)

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

De même, si vous devez également générer les noms de colonne pour insérer une clause insert, utilisez:

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

Copiez le résultat et collez-le dans la fenêtre de requête pour représenter les noms de colonne de votre table. Même ceci exclura également la colonne d'identité:

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

Rappelez-vous que le script pour copier les lignes fonctionnera si les bases de données appartiennent au 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.

9
NeverHopeless

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

insérer dans Destination_Existing_Tbl sélectionner col1, col2 FROM Source_Tbl

1
Mohan

Copier les données

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
0
Arun Prasad E S