Question

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 le faire?

Était-ce utile?

La solution

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.

Autres conseils

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

Si les tables n'existent pas, cela les créera 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.

Cela devrait fonctionner:

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

Cela ne ne copiera pas les constlamations, les valeurs par défaut ou les index. La table créée n'aura pas un index en cluster.

Vous pouvez également:

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

Si votre table de destination existe et est vide.

S'il ne s'agit que d'une table, il ne vous reste plus qu'à

  • 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 devrez également prendre en compte d'autres mises à jour, telles que la migration d'autres objets à l'avenir. 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 et autres.

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 pas & # 8217; t mal avec tout autre outil là-bas.

  1. Créez un script pour créer une table dans Management Studio, exécutez ce script dans la barre pour créer la table. (Cliquez avec le bouton droit sur la table dans l'explorateur d'objets, la table de script en tant que, créer dans ...)

  2. Barre INSERT. [schéma] .table SELECT * FROM foo. [schéma] .table

Vous pouvez également utiliser Assistant Génération de scripts SQL Server pour faciliter la création de scripts SQL pouvant effectuer les opérations suivantes:

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

Exemple de flux de travail pour SQL Server 2008 avec les captures d'écran affichées ici .

Vous pouvez choisir cette voie: (exemple général)

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

Si vous devez également générer les noms de colonne pour insérer une clause d'insertion, 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

N'oubliez pas que le script permettant de copier des 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.

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

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

Copier les données

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top