Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Copier une table avec ses données ou uniquement sa structure

Petite astuce assez utile lorsque vous avez besoin de réaliser une copie d'une table avec ses données ou lorsque vous avez besoin de juste de la structure de cette dernière. Comme aux dernières nouvelles le copier / coller ne fonctionne pas avec les bases de données, il faut procéder autrement.

L'astuce est un mix entres le INSERT pour l'insertion des données de la table d'origine et CREATE TABLE pour créer la nouvelle table. La commande miracle s'appelle SELECT INTO, voici un petit exemple

SELECT *
INTO NouvelleTable
FROM TableACopier

L'effet produit est le suivant :

  • Une nouvelle table nommée « NouvelleTable » est créée, la définition de celle-ci correspond aux champs renvoyés par la requête. Attention tout de même, les contraintes et les index ne sont pas copiés ! La propriété IDENTITY (compteur) d'un champ, quant à elle, est conservée.
  • On réalise alors un INSERT des données renvoyées par le SELECT dans cette nouvelle table

Ce qui fait que « NouvelleTable » est la copie quasi-conforme de ma table « TableACopier ». Il est tout à fait possible de lister les champs à utiliser dans le SELECT est ainsi de produite nouvelle table possédant moins de champs que l'originale. Il est possible de filtrer les données renvoyées par le SELECT est donc insérées dans la nouvelle table, on peut aussi procéder à une jointure entre 2 tables, etc.

L'usage d'une table temporaire est autorisé dans le INTO on obtiendra alors

SELECT *
INTO #NouvelleTable
FROM TableACopier

Maintenant que faire si vous souhaitez uniquement la structure (le CREATE TABLE) et non pas les données ? C'est assez simple on filtre le SELECT de manière à ce qu'il ne renvoie rien. Ce qui donne :

SELECT *
INTO NouvelleTable
FROM TableACopier
WHERE 1 = 0

Cette fois vous avez bien « NouvelleTable » à nouveau, mais totalement vide !

Attention à la commande SELECT INTO, du fait que vous créez la nouvelle table on ne peut l'exécuter qu'une seule fois, la seconde générant une erreur vous signalant que l'objet existe déjà.

Bonne copie…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié vendredi 21 septembre 2007 23:51 par christian
Classé sous : ,

Commentaires

mardi 25 septembre 2007 08:34 by flytox

# re: SQL Server : Copier une table avec ses données ou uniquement sa structure

Coucou !

SELECT TOP 0 *

INTO NouvelleTable

FROM TableACopier

marche pas mal aussi. Bonne journée !

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Microsoft annonce le nom commercial de Windows 7 par Code is poetry le il y a 2 heures et 32 minutes

- [Silverlight] Téléchargez la version finale (et les outils associés) dès maintenant ! par Thomas Lebrun le il y a 4 heures et 1 minutes

- Vilain bug avec IQueryable et la syntaxe yield : System.BadImageFormatException "An attempt was made to load a program with an incorrect format. (Exce... par Matthieu MEZIL le il y a 6 heures et 51 minutes

- SQL Server 2008 : Un livre en cours de préparation ! par SQL Server vu par Christian Robert le il y a 15 heures et 43 minutes

- IIS7 : à quel pool d'application correspond le processus w3wp.exe par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 16 heures et 40 minutes

- PDC 2008 - J-14 ! par Nix's Blog le il y a 18 heures et 25 minutes

- [Silverlight] La version finale de Silverlight 2 sera disponible en téléchargement demain ! par Thomas Lebrun le il y a 20 heures et 18 minutes

- SharePoint 2007 : Professional Developers Conference 2008 par Philippe Sentenac [MVP SharePoint] le 10-13-2008, 12:28

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18