web-dev-qa-db-fra.com

MS SQL 2008 - Créer une copie de la base de données sans les données

Dans MS SQL Server 2008 R2, comment créer une nouvelle base de données basée sur le schéma de l'ancienne, mais sans copier aucune des données avec elle? J'utilise SQL Server Management Studio.

34
user380527

Cliquez avec le bouton droit sur la base de données et sélectionnez Tasks -> Generate Scripts.

Vous pouvez ensuite sélectionner tous les objets dont vous avez besoin ou seulement certains objets.

Il y a quelques options de script que vous devriez regarder:

  • Script USE DATABASE - Vous devez définir ce paramètre sur false si vous créez une nouvelle base de données avec un nom différent.
  • Les index et déclencheurs ne sont pas scriptés par défaut
  • Les autorisations de connexion et de niveau objet ne sont pas scriptées par défaut
  • Générer un script pour les objets dépendants - ce paramètre est défini sur false par défaut, mais vous pouvez le remplacer par true pour vous assurer que tous les objets sont scriptés.

Vous pouvez soit les créer dans une nouvelle fenêtre de requête, soit les enregistrer dans des fichiers SQL.

49
codingbadger

Sommaire

Ce script a été créé pour faciliter la pratique de la migration de la base de données d'un site Web majeur entre des schémas de base de données très différents. Ce script effectuera les tâches suivantes:

  1. Sauvegardez la dernière bonne version de votre schéma, avec les données. (Exemple: base de données Dev)
  2. Supprimez la base de données cible, si elle existe
  3. Restaurer la sauvegarde dans la base de données de test cible
  4. Supprimer toutes les données de la base de données cible, malgré les contraintes et les clés étrangères

Instructions d'utilisation

Partie 1

Vous voudrez probablement obtenir le code pour cela à partir de SSMS en utilisant la boîte de dialogue de sauvegarde. Cliquez sur l'icône encerclée pour obtenir le script de votre scénario spécifique.

  • Si vous faites cela, n'oubliez pas de définir "écraser" dans les options de sauvegarde avant de générer le script - nous ne voulons pas l'ajouter à un jeu de sauvegarde.

enter image description here

Partie 2

N'oubliez pas d'inclure le USE MASTER commande avant de supprimer la base de données de destination. Si vous exécutez ce script pour la deuxième fois dans une seule session SSMS, vous obtiendrez une erreur fatale si vous n'incluez pas cette commande. Nous utilisons également DROP DATABASE ici pour non seulement supprimer le TargetDB périmé, mais aussi supprimer ses fichiers (Remarque, DB doit être "actif" pour que cela fonctionne)

3e partie

Vous souhaiterez peut-être utiliser la boîte de dialogue SSMS pour générer ce script de restauration initial pour vous, similaire à la façon dont vous l'avez fait pour la partie 1 pour la sauvegarde.

Partie 4

N'utilisez pas Tronquer ici - cela ne fonctionnera pas si vous avez des clés étrangères

Code source (exécuté dans SSMS)

----------------------------------------------------------------------------------------
-- CREATE AN EMPTY COPY OF DATABASE
----------------------------------------------------------------------------------------
/* PART 1: Backup the good database */
BACKUP DATABASE [OriginalDB] 
        TO  DISK = N'd:\backup.bak' WITH NOFORMAT, INIT,  
            NAME = N'OriginalDB-Full Database Backup', SKIP, 
        NOREWIND, NOUNLOAD,  STATS = 33
GO

/* PART 2: If your destination database already exists, drop it */
USE master -- Make sure to include this -- it allows you to reuse script in same SSMS session
DROP DATABASE [migration]

/* PART 3: Restore the backup to the new location */
RESTORE DATABASE [TargetDB] 
        FROM  DISK = N'D:\backup.bak' WITH  FILE = 1,  
        MOVE N'OriginalDB' TO N'D:\sql data\TargetDB.mdf',  
        MOVE N'OriginalDB' TO N'C:\SQL Data\TargetDB_1.ldf',  
        NOUNLOAD,  STATS = 33
GO

/* PART 4: Delete all tables' data in the migration testing target */
PRINT N'Clearing [TargetDB]'
USE [TargetDB]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"       -- disable all constraints
EXEC sp_MSForEachTable "DELETE FROM ?"                  -- delete data in all tables
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"  -- enable all constraints
----------------------------------------------------------------------------------------
-- BLANK DATABASE COPY CREATED, READY FOR TESTING
----------------------------------------------------------------------------------------
8
Brian Webster

Il y a un assistant de script sympa qui peut vous aider. Vous pouvez l'essayer avec un clic droit sur la base de données dans l'explorateur d'objets -> Tâches -> Générer des scripts. Vous pouvez choisir les objets de la base de données que vous souhaitez exporter.

4
Svetlozar Angelov

Dans SQL Server Management Studio, vous pouvez cliquer avec le menu sur un objet et sélectionner ...

"Script [Object] As" ... "CREATE to"... "New Query Window"

Vous devez créer des scripts pour chaque objet que vous souhaitez créer.

Si vous voulez tout faire, cliquez sur la base de données dans le menu et sélectionnez

"Tâches" ... "Générer des scripts" et suivez l'assistant, conformément à cela article :

2
Fenton