代码之家  ›  专栏  ›  技术社区  ›  recursive

使用默认路径中的文件创建数据库

  •  23
  • recursive  · 技术社区  · 16 年前

    我想创建一个创建数据库的SQL脚本。现在,我有这个:

    CREATE DATABASE [Documents] ON  PRIMARY 
    ( NAME = N'Documents', FILENAME = N'Documents.mdf')
     LOG ON 
    ( NAME = N'Documents_log', FILENAME = N'Documents_log.ldf')
     COLLATE SQL_Latin1_General_CP1_CI_AS
    

    Msg 5105, Level 16, State 2, Line 2
    A file activation error occurred. The physical file name 'Documents.mdf' may be incorrect. Diagnose and correct additional errors, and retry the operation.
    Msg 1802, Level 16, State 1, Line 2
    CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
    

    我知道问题在于我没有为文件名指定完全限定路径。但我希望无论数据库服务器的目录结构如何,都能够运行此脚本。有没有办法使用默认路径?

    5 回复  |  直到 16 年前
        1
  •  74
  •   JumpingJezza    9 年前

    创建数据库“Documents”,并通过alter提供文件属性。

    USE [master]
    GO
    
    CREATE DATABASE [Documents]
    GO
    
    ALTER DATABASE [Documents] MODIFY FILE
    ( NAME = N'Documents', SIZE = 512MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    GO
    
    ALTER DATABASE [Documents] MODIFY FILE
    ( NAME = N'Documents_log', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% )
    GO
    

    此脚本更具可移植性,可以部署在多个服务器中,无需任何修改。

        2
  •  23
  •   Damir Sudarevic    7 年前

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

    CREATE DATABASE Documents;
    
        3
  •  4
  •   Community Mohan Dere    9 年前

    看见 How do I find the data directory for a SQL Server instance?

    如果您使用的是SQL Server 2012或更高版本,则可以使用

    select 
      InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
      InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')
    

    如果希望数据库的物理文件名不同于默认名称,则此选项非常有用。

        4
  •  2
  •   Dustin Metzgar    6 年前

    DECLARE @DefaultDataPath varchar(max)
    SET @DefaultDataPath = (SELECT CONVERT(varchar(max), SERVERPROPERTY('INSTANCEDEFAULTDATAPATH')))
    DECLARE @DefaultLogPath varchar(max)
    SET @DefaultLogPath = (SELECT CONVERT(varchar(max), SERVERPROPERTY('INSTANCEDEFAULTLOGPATH')))
    
    EXECUTE('
    CREATE DATABASE [blah] ON PRIMARY
    ( NAME = N''blah'', FILENAME = ''' + @DefaultDataPath + 'blah.mdf'', SIZE = 167872KB, MAXSIZE = UNLIMITED, FILEGROWTH = 16384KB )
     LOG ON
    ( NAME = N''blah_Log'', FILENAME = ''' + @DefaultDataPath + 'blah_Log.mdf'', SIZE = 2048KB, MAXSIZE = 2048GB, FILEGROWTH = 16384KB );
    COLLATE SQL_Latin1_General_CP1_CI_AS;
    ');
    GO
    

    请注意,如果您执行以下操作: USE

        5
  •  1
  •   Nestor    16 年前

    我相信你能做到

    CREATE DATABASE [Documents]
    

    如果没有打开。。。。它将使用路径和其他默认值创建。

        6
  •  1
  •   Goows    14 年前

    看看如何创建一个 Default Path

    干杯