【问题标题】:Create a database with dynamic database name in sql server 2005在 sql server 2005 中创建具有动态数据库名称的数据库
【发布时间】:2011-03-05 06:55:55
【问题描述】:

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

【问题讨论】:

  • 至少自己先尝试一下
  • 您可以使用动态 SQL 来执行此操作,方法是使用 @databaseName 存储过程参数(其中 @databaseName 是潜在过程参数的示例)形成 CREATE DATABASE SQL 语句

标签: sql sql-server-2005


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    正如 bitxwise 所说,您将需要动态 SQL

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

    这只是最基本的 CREATE DATABASE 语句。通常在生产环境中,无论如何您都不希望拥有这样的 proc,即使您这样做 - 您也需要指定增长、初始大小、位置等。

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

    【讨论】:

      【解决方案3】:

      使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多