仅使用 ldf 文件创建数据库创建了 2 个 .ldf 文件

Red*_*vil -1 sql-server t-sql sql-server-2012

当我在不指定 ldf 文件的情况下运行此查询时,它会自动创建 ldf 文件。

Declare @DBname nvarchar(50) = 'Test'
Declare @path nvarchar(50) = 'D:\DB'
Declare @query nvarchar(max) 

set @query = '

CREATE DATABASE ' + @DBname + '
ON
( NAME = ' +@DBname+',  
    FILENAME = '''+@path+'\'+@DBname+'.mdf'+''',
    SIZE = 1024,
    MAXSIZE = unlimited,
    FILEGROWTH = 500 )  
'
exec (@query)
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个查询时:

Declare @DBname nvarchar(50) = 'Test'
Declare @path nvarchar(50) = 'D:\DB'
Declare @query nvarchar(max) 

set @query = '

CREATE DATABASE ' + @DBname + '
ON 
( NAME = '+@DBname+'_log'+',  
    FILENAME = ''' +@path+'\'+@DBname+'_log.ldf'+''',
    SIZE = 100,
    MAXSIZE = unlimited,
    FILEGROWTH = 100 );
'
exec (@query)
Run Code Online (Sandbox Code Playgroud)

它创建 2 个 .ldf 文件而没有 .mdf 文件。我不明白为什么它会像上面的查询那样自动创建 2 个 .ldf 文件而不是 mdf 文件:

Geo*_*ios 8

文档中所述,指定您正在创建日志文件的正确方法是使用CREATE DATABASE ... LOG ON (...)- 您正在使用ON (...).

您的第二位代码只是指定创建一个.ldf用作文件扩展名的 MDF 文件(数据文件)。要创建一个日志文件,你需要更换ON具有LOG ON如下。

Declare @DBname nvarchar(50) = 'Test'
Declare @path nvarchar(50) = 'D:\DB'
Declare @query nvarchar(max) 

set @query = '

CREATE DATABASE ' + @DBname + '
--Create the data file using ON
ON 
( NAME = '+@DBname+',  
    FILENAME = ''' +@path+'\'+@DBname+'.mdf'+''',
    SIZE = 100,
    MAXSIZE = unlimited,
    FILEGROWTH = 100 )
--Create the log file using LOG ON
LOG ON
( NAME = '+@DBname+'_log'+',  
    FILENAME = ''' +@path+'\'+@DBname+'_log.ldf'+''',
    SIZE = 100,
    MAXSIZE = unlimited,
    FILEGROWTH = 100 );
'
exec (@query)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您的代码都会创建一个 SQL 数据文件,并且会使用model数据库中的设置自动创建日志文件。两者之间的唯一区别是文件的名称——SQL Server 将接受任何文件扩展名(甚至完全没有)作为数据库文件的名称。