2012-09-11 18 views
43

Microsoft SQL Server 2008 R2 SP1を試して学習しています。 私は多くの実験を行ったデータベースを持っています。今私はそれを落として作り直したい。 データベースから作成スクリプトを抽出して削除し、スクリプトを使用して再作成します。 驚いたことに、すべてのテーブル、キーなどはまだそこにあります。 データベースをゼロから再構築できるように、データベースを削除するにはどうすればよいですか?Microsoft SQL Serverでのデータベースの削除と再作成

答えて

76
USE master 
IF EXISTS(select * from sys.databases where name='yourDBname') 
DROP DATABASE yourDBname 

CREATE DATABASE yourDBname 
+0

あなたは正しいです、私の質問はばかげていました。 実際、私が見ていたテーブルは実際に自分のデータベースではなくmasterデータベースに作成されました。 –

+0

これは私を助けました! –

1

は、私はこれは、データベース内のすべてのもの(テーブル、キーなど)のために作成スクリプトを抽出し、データベース

から作成スクリプトを抽出します。あなたは、単に空のデータベースを作成したい場合は、単にAnandPhadkeにCREATE DATABASE <dbname>

22

1を実行し、コード

の彼の部分のために、このコードは、データベースへのすべてのアクティブな接続を閉じ、その後、

にドロップします
WHILE EXISTS(select NULL from sys.databases where name='YourDBName') 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' 
    FROM MASTER..SysProcesses 
    WHERE DBId = DB_ID(N'YourDBName') AND SPId <> @@SPId 
    EXEC(@SQL) 
    DROP DATABASE [YourDBName] 
END 
GO 

CREATE DATABASE YourDBName 
GO 
6

DBNameを複数回タイプする必要があります。エラーが発生しやすくなります。ある時点では、一貫性のないエントリと意図しない結果が実行されます。

AnandPhadkeまたはPierreから、さまざまなサポートを受けた回答が私にとって優先されます。

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
USE master 
IF EXISTS(select * from sys.databases where name= @DBName) 
EXEC('DROP DATABASE ' + @DBName) 

EXEC('CREATE DATABASE ' + @DBName) 

または

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
WHILE EXISTS(select NULL from sys.databases where name = @DBName) 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DBName) AND SPId <> @@SPId 
    EXEC(@SQL) 
    EXEC('DROP DATABASE ' + @DBName) 
END 
GO 
-1

これは私にとって最高の作品:

if exists (select name from sys.databases where name='YourDBName') 
alter database YourDBName set single_user with rollback immediate 
go 
if exists (select name from sys.databases where name='YourDBName') 
drop database YourDBName 
+0

これは本当に質問に答えません。別の質問がある場合は、[Ask Question](http://stackoverflow.com/questions/ask)をクリックして質問することができます。十分な[評判](http://stackoverflow.com/help/)があれば、[賞金を追加する](http://stackoverflow.com/help/privileges/set-bounties)でもこの質問にもっと注意を払うことができます何が評判か)。 - [レビューから](レビュー/低品質の投稿/ 12598382) –

+0

この回答を誤解していると思います。@ KhanImranAliこの1つは、貧弱ながらも答えようとします。これは、投票と否定的なレビューではなく、投票によって調整されるべきである。 – Palec

+1

あなたのコードが何をしているのか、どのように答えているのか説明してください。コードスニペットを回答として受け取った場合、そのコードスニペットで何をすべきか分からないことがあります。回答はOPと将来の訪問者の指導を与えるべきです。コードの背後にある考え方は、問題を理解し、ソリューションを適用または変更する上で非常に役立ちます。 – Palec

関連する問題