在sql server 2005中创建一个具有动态数据库名称的数据库

时间:2011-03-05 06:55:55

标签: sql sql-server-2005

使用存储过程在sql server 2005中创建数据库,但数据库名称作为参数传递

3 个答案:

答案 0 :(得分:4)

查询块下面可能会有所帮助。

DECLARE @Query VARCHAR(MAX)=''
DECLARE @DbName VARCHAR(400) = 'Db1'
DECLARE @DbFilePath VARCHAR(400) = 'E:\Database\'
SET @Query = @Query + 'CREATE DATABASE '+@DbName +' ON  PRIMARY '
SET @Query = @Query + '( NAME = '''+@DbName +''', FILENAME = '''+@DbFilePath+@DbName +'.mdf'' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) '
SET @Query = @Query + ' LOG ON '
SET @Query = @Query + '( NAME = '''+@DbName +'_log'', FILENAME = '''+@DbFilePath+@DbName +'_log.ldf'' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'
print @query
exec(@query)

答案 1 :(得分:3)

正如bitxwise所说,你需要动态SQL

create proc createdb @dbname sysname
as
declare @sql nvarchar(max)
set @sql = 'create database ' + QUOTENAME(@dbname)
exec (@sql)

这只是最基本的CREATE DATABASE语句。通常在生产环境中,你不会想要这样的过程,即使你这样做 - 你会指定增长,初始大小,位置等。

但这里是参考:http://msdn.microsoft.com/en-us/library/ms176061(v=SQL.90).aspx

答案 2 :(得分:0)

使用 EXEC sp_executesql:

DECLARE @Query NVARCHAR(MAX)
set @Query=''
DECLARE @DbName NVARCHAR(max) = 'Db1'
DECLARE @DbFilePath NVARCHAR(max) = N'E:\Database\'
SET @Query = @Query + 'CREATE DATABASE '+@DbName +' ON  PRIMARY '
SET @Query = @Query + '( NAME = '''+@DbName +''', FILENAME = '''+@DbFilePath+@DbName +'.mdf'' ,  SIZE = 12288KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) '
SET @Query = @Query + ' LOG ON '
SET @Query = @Query + '( NAME = '''+@DbName +'_log'', FILENAME = '''+@DbFilePath+@DbName +'_log.ldf'' , SIZE = 32448KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'
print @query
EXEC sp_executesql @query