我试图在RHEL 8上使用Rocky Linux学习mssql,但是我发现了一些使用
SELECT name FROM master.dbo.sysdatabases
我不明白这个命令是如何创建的,我找不到任何指向使用master.dbo的东西。
我用这个来获得同样的结果,在我看来,这更直接,更有意义。也许我错过了一些重要的东西--但这就是我问问题的原因。
SELECT name FROM sys.databases
也许在我的用例中,这并没有什么不同,但是这些选项之间是否有一种更好的方法呢?我觉得我在拉头发,但我只是好奇。
发布于 2022-03-24 18:16:38
master
是主数据库的名称,它是来源于许多DMV和目录视图的地方,尽管其中一些视图也可以从其他数据库(甚至在从其他模式引用时)访问。
master.dbo.sysdatabases
具体而言,这是一个由3部分组成的名称,以[database].[schema].[object]
形式表示。但是,它引用了一个向后兼容性视图,该视图仍然存在,以避免中断Server 2005之前编写的代码。在这里,您可以看到很多关于这方面的警告:
注意,它同时适用于dbo.sysdatabases
和sys.sysdatabases
,因为名称的架构部分基本上被忽略了。
您的直觉是,目录视图是查询数据库列表的更好方法,这既是因为它不受推荐,也是因为它包含了一组关于数据库的更完整的属性:
SELECT * FROM sys.databases;
但你也可以说:
SELECT * FROM mydatabase.sys.databases;
SELECT * FROM master.sys.databases;
但在其他目录视图中,这是不正确的。例如,这些结果将提供非常不同的、特定于数据库的结果:
SELECT * FROM mydatabase.sys.tables;
SELECT * FROM master.sys.tables;
其他一些背景:
https://stackoverflow.com/questions/71607436
复制相似问题