日期:2014-05-17  浏览次数:20576 次

SQL Server的master数据库是干什么的?

 首先说一下我没有经过系统的学习,所以提出的问题可能很幼稚,希望个中高手不要见笑。

    我遇到这种情况不止一次了,就是比如我建了一个 数据库,比如:CREATE DATABASE NewsSystem2
在数据库中建了一些表 和存储过程并把它存为 NewsSystem2.sql 脚本。
    可是我在后来修改完善NewsSystem2数据库时打开NewsSystem2.sql 脚本时忘记执行USE NewsSystem2
即我是在master数据库上增加一些关于NewsSystem2的存储过程等竟然也成功了!

   我想搞清楚这是为什么?我在存储过程中用的表等master数据库是没有的呀?!比如我今天在master
上执行的一下存储过程就是成功的:
CREATE PROCEDURE dbo.AddNews
(
@newsTitle VARCHAR(200),
@newsBody TEXT,
@newsKindId INT,
@userId INT,
@pubDate DATETIME
)
AS
INSERT INTO news (newsTitle,newsBody,newsKindId,userId)VALUES(@newsTitle,@newsBody,@newsKindId,@userId)
RETURN
GO


------解决方案--------------------
Master数据库是SQL Server中最重要的系统数据库,记录了SQL Server系统级的信息.
包括:系统中所有的登录账号及其密码,系统配置信息,所有数据库的信息,所有用户数据库的主文件地址等,还包括许多系统存储过程,用以执行某些系统操作.
Master数据库是整个系统中最重要的数据库,如果丢失Master数据库,对于恢复所有用户数据库将非常困难.因此,保存Master数据库的最新备份是非常重要的的事情.

不过它本身也是一个数据库,所以只要有权限,也可以在它里面创建表、存储过程等
------解决方案--------------------
create存储过程时不检查他引用的对象(表)是否存在。
不过会有警告提示。