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

rec*_*ive 24 sql database sql-server

我想创建一个创建数据库的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
Run Code Online (Sandbox Code Playgroud)

但是,这会生成以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

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

Gay*_*ake 68

创建数据库'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
Run Code Online (Sandbox Code Playgroud)

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

  • 对我来说,这是解决方案,而不是标记的解决方案. (7认同)

Dam*_*vic 23

您可以创建数据库而无需指定文件详细信息,例如:

创建数据库文档;

  • 是的,但如果我需要指定其他属性,如SIZE和FILEGROWTH,该怎么办?我已经看到使用XP的解决方案来读取注册表但是如果你没有在默认实例上运行怎么办?该注册表项/值不会给出正确的答案.还在搜索,所以我真的不认为这回答了我自己. (7认同)
  • 在创建数据库之后添加alter database脚本以指定其他属性,如SIZE和FILEGROWTH. (6认同)

小智 5

如何查找 SQL Server 实例的数据目录?

如果您使用的是 SQL Server 2012 或更高版本,您可以使用以下命令找到默认路径

select 
  InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
  InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 exec() 构建 CREATE DATABASE 语句。

如果您希望数据库的物理文件名与默认名称不同,这非常有用。