2017-12-05 5 views
0

私はすべてのスクリプトとプロシージャがこのデータベースプロジェクトに対応していますが、データベースとすべてのテーブルを作成するストアドプロシージャが必要です。潜在的に(存在する場合)procにドロップしてください。しかし、今はそれを作成することに集中します。マスターDB上のストアドプロシージャで通常のDBを作成できますか? SQL Server 2012およびそれ以降

私はそれがマスターDBと関係があると思いますが、それを理解することはできません。

USE master 

IF OBJECT_ID('dbo.myDB') IS NULL 

CREATE PROCEDURE myNewDatabase 
BEGIN 
CREATE DATABASE myDB 
END 

ELSE 
PRINT 'myDB Database already exists' 

注:その後、私は右のすべてのテーブルを作成するために、別のストアドプロシージャを実行する必要があります

それは次のようになりますか?また、 'object_idがnullの場合'として混乱しているビットは通常、プロシージャ名をチェックしますが、これはデータベース名をチェックしていますか?

誰かが私の思考がリース時に正しい道にあるかどうかを教えてもらえますか?

は、私はそれは(それがないので)データベースをこのように作成するのは良いアイデアだとは言わないよ、しかし、あなたが本当にしたい場合は、ここにありますし、あなたに

+0

「I実際にデータベースとすべてのテーブルを作成するストアドプロシージャを持っているのはなぜですか?なぜですか?私はそれをしたいと思っている人は聞いたことがありません。 –

+0

これはまったく意味がありません。あなたはこれを行うために動的SQLを使用する必要があります完全に奇妙なことを別として。私はちょうどこれが何らかの利益をもたらす理由を頭の中で包み始めてもいない。 –

+0

私は多分何か間違ったことを理解しているかもしれませんが、JPモルガンのDBAである私の教授は、私たちがこれをやると私たちのプロジェクトに特別なクレジットを得ていると言います。私は彼が何を話しているかを知っていると思うだろうが、私のレベルでは正直にはわからない。学ぼうとしている。 – Dylano236

答えて

1

ありがとうござい方法:

CREATE PROC dbo.myNewDatabase 
AS 
SET NOCOUNT ON; 

DECLARE @dbname VARCHAR(100) = 'myDB' 
     ,@path VARCHAR(1000) = 'C:\Test\' 
     ,@sql VARCHAR(1000); 



IF DB_ID(@dbname) IS NULL 
BEGIN 
    SELECT 
     @sql = 
     'CREATE DATABASE ' + @dbname + ' ON (NAME = ' + @dbname 
     + '_Data, FILENAME = ''' + @path + @dbname + '.mdf'')' 
     + ' LOG ON (NAME = ' + @dbname + '_Log, FILENAME = ''' + @path + @dbname 
     + '.ldf'')'; 
    EXEC(@sql); 
END 
ELSE 
PRINT 'myDB Database already exists' 

GO 
+0

StackOverflowの誤った構文の強調表示は無視できます。 –

+0

よろしくお願いいたします。私は助けに感謝します。それは私にも奇妙に聞こえました。今私は私が唯一ではないことを知っている。 – Dylano236

+1

ファイル名とパスをスキップしたい場合は、これを簡略化することができます。単に名前をつけたデータベースを作成するだけで動作します。デフォルトでは、データベースと同じ名前のデータファイルとログファイルが作成され、デフォルトのフォルダに格納されます。そして、dbnameをパラメータにすると、これはかなり役に立ちます。 –

関連する問題