当我在没有指定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)但是当我运行这个查询时:
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)它创建了2个没有.ldf文件的.mdf文件。我不明白为什么它会自动创建2个.ldf文件,而不是像在上面的查询中那样自动创建mdf文件:
发布于 2019-08-28 08:59:14
正如文献资料中详细介绍的,指定要创建日志文件的正确方法是使用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)在这两种情况下,代码都会创建一个SQL数据文件,日志文件将使用model数据库中的设置自动创建。两者之间唯一的区别是文件的名称- Server将接受任何文件扩展名(甚至完全缺少)作为数据库文件的名称。
https://dba.stackexchange.com/questions/246425
复制相似问题