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

问个基础问题:USE master
看到很多SQL的脚本开头都要用到:
USE master

我刚接触SQL, 查资料知道master是系统自带的数据库,
这一句。我知道master记录了很多有用的信息。


我的问题是: 什么时候可以省略 USE master这一句,什么时候必须加上
求高手解答哇!

------解决方案--------------------
use master
go
是打开master数据库为当前数据库

master是系统数据库,它里面有很多对象,每个对象都有自己的所有者.如果没有指明所有者,系统就默认dbo为对象的所有者.
一个对象完整的表达式为:数据库名.所有者.对象, 比如:master.dbo.sysobjects
测试:select * from master.dbo.sysobjects

如果当前在查询分析器打开的数据库是master,那么可以省略use master
没有必须加上use master的说法.
如果当前打开msdb数据库,你又想访问master数据库,可以用这样的语句:
select * from master.dbo.sysobjects

所以说没有必须加上的说法.


------解决方案--------------------
#1.调用任何数据库对象(表,存储过程),都是针对当前数据库下做的操作。所以master也不例外,当你想要调用master下的对象时,就需要先切换到master下,或指定数据库:select * from master.dbo.spt_values
#2.总体原则就是说:没有省略,不省略一说,只要你要调用master库里面的东西,就需要先切换到这个库
#3.例外:调用以sp_开头的存储过程时,无论当前的数据库是什么,都会先从master中找,如果找不到,再在当前数据库中找
#4.至于平时大家访问的sys开头的视图等,都是只针对当前数据库的。
如果还有其它,请楼主补充……