web-dev-qa-db-ja.com

MS SQL 2008-データなしでデータベースのコピーを作成します

MS SQL Server 2008 R2で、古いデータベースのスキーマに基づいて新しいデータベースを作成するにはどうすればよいですか? SQL Server管理スタジオを使用しています。

34
user380527

データベースを右クリックし、Tasks-> Generate Scriptsを選択します。

次に、必要なすべてのオブジェクトを選択するか、特定のオブジェクトのみを選択できます。

確認する必要があるスクリプトオプションがいくつかあります。

  • スクリプトUSE DATABASE-別の名前で新しいデータベースを作成する場合、これをfalseに設定する必要があります。
  • インデックスとトリガーはデフォルトとしてスクリプト化されていません
  • ログインとオブジェクトレベルの権限はデフォルトとしてスクリプト化されていません
  • 依存オブジェクトのスクリプトを生成-これはデフォルトでfalseに設定されていますが、すべてのオブジェクトがスクリプト化されるようにtrueに変更することができます。

これらを新しいクエリウィンドウに作成するか、SQLファイルに保存できます。

49
codingbadger

概要

このスクリプトは、非常に異なるデータベーススキーマ間で主要なWebサイトのデータベース移行を簡単に実行できるように作成されました。このスクリプトは、次のタスクを実行します。

  1. スキーマの最新バージョンをデータとともにバックアップします。 (例:開発データベース)
  2. ターゲットデータベースが存在する場合は削除します
  3. バックアップをターゲットテストデータベースに復元します
  4. 制約と外部キーにもかかわらず、ターゲットデータベースのすべてのデータを削除する

使用方法

パート1

バックアップダイアログを使用して、SSMS内からこのためのコードを取得することができます。丸いアイコンをクリックして、特定のシナリオのスクリプトを取得します。

  • これを行う場合は、スクリプトを生成する前に、バックアップオプションで「上書き」を設定することを忘れないでください。バックアップセットに追加する必要はありません。

enter image description here

パート2

宛先データベースを削除する前に、USE MASTERコマンドを含めることを忘れないでください。単一のSSMSセッションでこのスクリプトを2回実行すると、このコマンドを含めないと致命的なエラーが発生します。ここでは、DROP DATABASEを使用して、古いTargetDBを削除するだけでなく、そのファイルも削除します(これが機能するには、DBが「アクティブ」である必要があります)

パート3

バックアップのパート1で行った方法と同様に、SSMSダイアログを使用してこの初期復元スクリプトを生成することもできます。

パート4

ここではTruncateを使用しないでください-外部キーがある場合は機能しません

ソースコード(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

役立つスクリプトウィザードがあります。オブジェクトエクスプローラ->タスク->スクリプトの生成からデータベースを右クリックして試してください。データベースからエクスポートするオブジェクトを選択できます。

4

SQL Server Management Studioでは、オブジェクトをメニュークリックして選択することができます...

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

作成するオブジェクトごとにスクリプトを作成する必要があります。

ロット全体を実行する場合は、データベースをメニュークリックして、選択します

「タスク」...「スクリプトを生成する」、ウィザードに従ってください 記事

2
Fenton