2011-03-31 104 views
5

我有简单的代码创建默认路径数据库

: CREATE DATABASE [asst] 
: ON (NAME = 'asst_dat', FILENAME = 'C:\data' , SIZE = 62, FILEGROWTH = 10%) 
: LOG ON (NAME = 'asst_log', FILENAME = 'C:\data' , SIZE = 146, FILEGROWTH = 10%) 

如何更改文件名参数,如C默认安装路径来创建数据库:\ Program Files文件\ Microsoft SQL Server的\ MSSQL10_50.ATASSIST \ MSSQL 。那么,为什么我需要它:因版本,从实例到SQL Server实例的这个位置不同

+0

的[创建使用默认路径文件数据库(http://stackoverflow.com/questions/1637628/create-database-using-file-in-default-path) – Castrohenge 2014-04-15 10:05:26

回答

1

您可以使用以下变量,分别包含你的根目录下安装和数据目录:

SELECT @@basedir, @@datadir; 
+0

怎么可能重复我能修改上面的代码? – Eliazar 2011-03-31 11:40:17

+1

只需在您的FILENAME参数中包含'@@ datadir'。 – Wookai 2011-03-31 11:53:36

+1

:CREATE DATABASE [asst]:ON(NAME ='asst_dat',FILENAME = @@ datadir,SIZE = 62,FILEGROWTH = 10%):LOG ON(NAME ='asst_log',FILENAME = @@ datadir,SIZE = 146 ,FILEGROWTH = 10%) 这不起作用,错误的语法 – Eliazar 2011-03-31 12:02:43

0

假设你使用的是SQL Server 2005或2008,应该这样做。虽然它可能比您预期的要长一些:-)您可以将代码的主要部分放入函数中,并在您每次需要创建数据库时调用它。

declare @instance_name nvarchar(200), 
     @system_instance_name nvarchar(200), 
     @registry_key nvarchar(512), 
     @path_data nvarchar(260), 
     @path_log nvarchar(260), 
     @value_name nvarchar(20), 
     @script nvarchar(4000); 

set @instance_name = coalesce(convert(nvarchar(20), serverproperty('InstanceName')), 'MSSQLSERVER'); 

exec master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL', @instance_name, @system_instance_name output; 
set @registry_key = N'Software\Microsoft\Microsoft SQL Server\' + @system_instance_name + '\MSSQLServer'; 

/* determine default location for data files */ 
exec master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', @registry_key, N'DefaultData', @path_data output; 
if @path_data is null 
begin 
    /* this is only executed if we are using the default instance */ 
    set @registry_key = N'Software\Microsoft\Microsoft SQL Server\' + @system_instance_name + '\Setup'; 
    exec master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', @registry_key, N'SQLDataRoot', @path_data output; 
    set @path_data = @path_data + '\Data'; 
end; 

/* determine default location for log files */ 
exec master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', @registry_key, N'DefaultLog', @path_log output; 
if @path_log is null 
begin 
    /* this is only executed if we are using the default instance */ 
    set @registry_key = N'Software\Microsoft\Microsoft SQL Server\' + @system_instance_name + '\Setup'; 
    exec master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', @registry_key, N'SQLDataRoot', @path_log output; 
    set @path_log = @path_log + '\Data'; 
end; 

set @script = 'CREATE DATABASE [asst] 
    ON (NAME = ''asst_dat'', FILENAME = ''' + @path_data + '\yourfile.mdf'' , SIZE = 62, FILEGROWTH = 10%) 
    LOG ON (NAME = ''asst_log'', FILENAME = ''' + @path_log + '\yourfile.ldf'' , SIZE = 146, FILEGROWTH = 10%);' 

exec(@script); 

您不能在CREATE DABASE语句中使用变量。这就是为什么你必须创建一个变量来保存命令并将其作为脚本执行。

1

感谢,überjesus,我已经简化你的代码一点点

DECLARE @rows varchar(MAX), 
     @script nvarchar(MAX); 
SET @rows = (SELECT physical_name AS current_file_location 
FROM sys.master_files 
where name = 'master'); 
SET @rows = Replace(@rows, 'master.mdf', '') 
SELECT @rows; 
set @script = 'CREATE DATABASE [assist1] 
ON (NAME = ''asst_dat'', FILENAME = ''' + @rows + 'assist1.mdf'' , SIZE = 62, FILEGROWTH = 10%)  
LOG ON (NAME = ''asst_log'', FILENAME = ''' + @rows + 'assist1_log.ldf'' , SIZE = 146, FILEGROWTH = 10%);' 
exec(@script); 

感谢一个伟大的想法!

1

试试这个

您可以在不指定文件的详细信息创建一个数据库,如:

CREATE DATABASE DatabaseName; 
5

首先创建数据库,然后根据需要更改文件属性。

CREATE DATABASE [DBName] 
GO 

ALTER DATABASE [DBName] MODIFY FILE 
(NAME = N'DBName' , SIZE = 512MB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
GO 

ALTER DATABASE [DBName] MODIFY FILE 
(NAME = N'DBName_log' , SIZE = 256MB , MAXSIZE = UNLIMITED , FILEGROWTH = 10%) 
GO