为什么要使用master来创建数据库?

S N*_*ell 12 sql-server t-sql ddl master-system-database

我有一个简短的问题,为什么要使用use master;创建数据库?这是Microsoft 文档中的示例

USE master ;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\...\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,  
    FILENAME = 'C:\Program Files\...\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 22

在这种非常特殊的情况下,这绝对不是一项要求,但在许多其他情况下却是一项要求。如果您正在创建一个名为 的数据库Sales,并且您有一个名为 的数据库Sales,则需要在执行以下操作之前更改数据库上下文:

  • 用替换恢复;或者,
  • 删除当前数据库,然后:
    • 从头开始创建;或者,
    • 创建附加。

除了数据库创建之外,还有许多其他场景也需要 (a) 不在当前数据库的上下文中,或 (b) 在master特定(或至少不是特定数据库)的上下文中,以及许多在创建数据库期间或前后您可能会做的这些事情:

  • 将数据库设置为不同的状态,例如 single_user
  • 在脚本具有USE命令但该用户数据库可能处于脱机状态或以其他方式无法访问时防止出现错误
  • 授予服务器级权限,如 CREATE DATABASE
  • 授予服务器级角色成员资格
  • 将模块标记为系统对象 ( sp_MS_marksystemobject) 或启动程序
  • 某些类型的证书、服务器审计和可用性组操作

可能还有很多其他的东西。USE master;并不总是必要的,但有时是必要的,并且始终从该数据库执行服务器级命令并没有什么坏处


Bij*_*ose 17

我相信您不应该使用master数据库来创建数据库。由于 create database 命令应该在数据库上下文中运行,因此文档始终使用默认数据库,master并且它是一个系统数据库,无论发生什么,它都将始终存在,因此脚本不会失败!