首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sys.databases和master.dbo.sysdatabases用例

sys.databases和master.dbo.sysdatabases用例
EN

Stack Overflow用户
提问于 2022-03-24 18:06:46
回答 1查看 243关注 0票数 0

我试图在RHEL 8上使用Rocky Linux学习mssql,但是我发现了一些使用

代码语言:javascript
运行
复制
SELECT name FROM master.dbo.sysdatabases

我不明白这个命令是如何创建的,我找不到任何指向使用master.dbo的东西。

我用这个来获得同样的结果,在我看来,这更直接,更有意义。也许我错过了一些重要的东西--但这就是我问问题的原因。

代码语言:javascript
运行
复制
SELECT name FROM sys.databases

也许在我的用例中,这并没有什么不同,但是这些选项之间是否有一种更好的方法呢?我觉得我在拉头发,但我只是好奇。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 18:16:38

master是主数据库的名称,它是来源于许多DMV和目录视图的地方,尽管其中一些视图也可以从其他数据库(甚至在从其他模式引用时)访问。

代码语言:javascript
运行
复制
master.dbo.sysdatabases

具体而言,这是一个由3部分组成的名称,以[database].[schema].[object]形式表示。但是,它引用了一个向后兼容性视图,该视图仍然存在,以避免中断Server 2005之前编写的代码。在这里,您可以看到很多关于这方面的警告:

注意,它同时适用于dbo.sysdatabasessys.sysdatabases,因为名称的架构部分基本上被忽略了。

您的直觉是,目录视图是查询数据库列表的更好方法,这既是因为它不受推荐,也是因为它包含了一组关于数据库的更完整的属性:

代码语言:javascript
运行
复制
SELECT * FROM sys.databases;

但你也可以说:

代码语言:javascript
运行
复制
SELECT * FROM mydatabase.sys.databases;
SELECT * FROM master.sys.databases;

但在其他目录视图中,这是不正确的。例如,这些结果将提供非常不同的、特定于数据库的结果:

代码语言:javascript
运行
复制
SELECT * FROM mydatabase.sys.tables;
SELECT * FROM master.sys.tables;

其他一些背景:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71607436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档