web-dev-qa-db-fra.com

SQL Server - Créer une copie d'une table de base de données et la placer dans la même base de données?

J'ai une table ABC dans une base de données DB. Je souhaite créer des copies de ABC avec les noms ABC_1, ABC_2, ABC_3 dans le même DB. Comment puis-je faire cela à l'aide de requêtes Management Studio (de préférence) ou SQL?

Ceci est pour SQL Server 2008 R2.

81
sequel.learner

Utilisation SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

Cela va créer une nouvelle table ABC_1 qui a la même structure de colonne que ABC et contient les mêmes données. Les contraintes (par exemple, les clés, les valeurs par défaut), cependant, ne sont pas copiées.

Vous pouvez exécuter cette requête plusieurs fois avec un nom de table différent à chaque fois.


Si vous n'avez pas besoin de copier les données, pour créer une nouvelle table vide avec la même structure de colonne, ajoutez une clause WHERE avec une expression falsy:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
167
Mahmoud Gamal

Copier le schéma (Generate DDL) via l'interface utilisateur SSMS

Dans SSMS, développez votre base de données dans Explorateur d'objets, accédez à Tables, cliquez avec le bouton droit sur la table qui vous intéresse et sélectionnez Script Table As, Create To, nouvelle fenêtre de l'éditeur de requête. Faites une recherche et remplacez ( CTRL + H ) pour changer le nom de la table ( c'est à dire mettre ABC dans le champ Find What et ABC_1 dans Remplacer par, puis cliquez OK ).

Copier le schéma via T-SQL

Les autres réponses montrant comment faire cela par SQL fonctionnent également bien, mais la différence avec cette méthode est que vous obtiendrez également des index, des contraintes et des déclencheurs.

Copier les données

Si vous souhaitez inclure des données, après avoir créé cette table, exécutez le script ci-dessous pour copier toutes les données de ABC (en conservant les mêmes valeurs d'ID si vous disposez d'un champ d'identité):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
14
JohnLBevan

Si vous souhaitez dupliquer la table avec toutes ses contraintes, procédez comme suit:

  1. Ouvrez la base de données dans SQL Management Studio.
  2. Cliquez avec le bouton droit sur la table que vous souhaitez dupliquer.
  3. Sélectionnez la table de script sous -> Créer vers -> Nouvelle fenêtre de l'éditeur de requête. Cela générera un script pour recréer la table dans une nouvelle fenêtre de requête.
  4. Modifiez le nom de la table et les clés et contraintes relatives dans le script.
  5. Exécutez le script.

Ensuite, pour copier les données, exécutez le script ci-dessous:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF
6
Rousonur Jaman

1ère option

select *
  into ABC_1
  from ABC;

2ème option: utiliser SSIS, c’est-à-dire faire un clic droit sur la base de données dans l’objet Explorateur> toutes les tâches> exporter les données

  • source et cible: votre base de données
  • table source: ABC
  • table cible: ABC_1 (la table sera créée)
3
Claude

C'est une autre option:

select top 0 * into <new_table> from <original_table>
1
Keni

utiliser SQL Server Server Management Studio ou Netcat et qui sera plus facile à manipuler SQL

1
gasroot

Vous devez écrire SSIS pour copier la table et ses données, contraintes et déclencheurs. Nous avons dans notre organisation un logiciel appelé Kal Admin de kalrom Systems qui a une version gratuite à télécharger (je pense que la fonctionnalité des tables de copie est optionnelle)

1
Chris D