主数据库上的存储过程是否可以创建常规数据库? SQL Server 2012及更高版本

时间:2017-12-05 19:32:34

标签: sql sql-server stored-procedures

我已为此数据库项目准备好所有脚本和过程,但我希望有一个存储过程来创建我的数据库和所有表。它也可能在proc中掉落(如果它存在),但是现在我只关注创建它。

我认为它与主数据库有关,但无法弄清楚。

看起来像这样:

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'通常检查过程名称,但这个是检查数据库名称吗?

有人可以告诉我,我的想法是否在正确的轨道上出租?

谢谢

1 个答案:

答案 0 :(得分: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