141 votes

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 veux créer des copies de ABC avec les noms ABC_1, ABC_2, ABC_3 dans la même base de données. Comment puis-je faire cela en utilisant Management Studio (de préférence) ou des requêtes SQL ?

Ceci est pour SQL Server 2008 R2.

292voto

Mahmoud Gamal Points 46598

Utilisez SELECT ... INTO :

SELECT *
INTO ABC_1
FROM ABC;

Cela va créer une nouvelle table ABC_1 qui a la même structure de colonnes 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, mais seulement de créer une nouvelle table vide avec la même structure de colonnes, ajoutez une balise WHERE avec une expression falsy :

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

28voto

JohnLBevan Points 4174

Copier le schéma (générer DDL) via l'interface utilisateur SSMS

Dans SSMS, développez votre base de données dans Explorateur d'objets Allez sur Tableaux cliquez à droite sur le tableau qui vous intéresse et sélectionnez script Table As , Créer pour , Fenêtre de l'éditeur de nouvelles requêtes . Faites une recherche et un remplacement ( CTRL + H ) pour changer le nom de la table (c'est-à-dire mettre ABC dans le Trouver quoi et ABC_1 dans le Remplacer par puis cliquez sur OK ).

Copier le schéma par 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 tous les index, contraintes et triggers.

Données de copie

Si vous voulez inclure des données, après avoir créé cette table, exécutez le script ci-dessous pour copier toutes les données d'ABC (en gardant les mêmes valeurs d'ID si vous avez 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

16voto

Rousonur Jaman Points 379

Si vous voulez dupliquer la table avec toutes ses contraintes et clés, suivez les étapes ci-dessous :

  1. Ouvrez la base de données dans SQL Management Studio.
  2. Cliquez avec le bouton droit de la souris sur la table que vous voulez dupliquer.
  3. Sélectionnez script Table comme -> Créer vers -> Fenêtre de l'éditeur de requêtes nouvelles. Cela va générer un script pour recréer la table dans une nouvelle fenêtre de requête.
  4. Changez le nom de la table et les clés et contraintes relatives dans le script.
  5. Exécuter le script.

Ensuite, pour copier les données, exécutez ce 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

4voto

Michael Points 619

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'explorateur d'objets > toutes les tâches > exporter les données.

  • source et cible : votre BD
  • table source : ABC
  • table cible : ABC_1 (la table sera créée)

3voto

Keni Points 19

C'est une autre option :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X