有什么区别
USE SchoolDB;
SELECT * FROM StudentTable;
vs
SELECT * FROM SchoolDB.dbo.StudentTable;
这两者的优点和缺点是什么?对查询性能有影响吗?
我几乎在所有地方搜索过,找不到任何资源。如果有任何重复的问题或链接,将非常有帮助。 我在Microsoft SQL Management Studio中发现的唯一一件事是'USE'关键字,使连接保持与db的连接打开,而dbName.TableName却没有。
答案 0 :(得分:1)
这两者的优点和缺点是什么?对查询性能有影响吗?
使用DBName
多部分名称
for everyRegion in enumerate(data['data'][0]['regions']):
pd.io.json.json_normalize(data['data'][0]['regions'][everyRegion])
总而言之,使用这两种方法都不会影响性能,但是如上所述,如果不使用Multi-part names
,则可能会出现语法错误答案 1 :(得分:1)
正如其他人所说,“使用”创建上下文,以便所有后续查询都针对该数据库执行;由三部分组成的名称明确命名数据库。此选择不会影响性能。
但是您可能会做出一些设计选择,这些选择会影响您的决定。
例如,您可能具有开发,测试和生产数据库。如果您有一个SQL批处理文件(例如),则最好显式设置数据库上下文,然后执行不包含三部分名称的查询。
您可能具有一个应用程序设计,该应用程序将数据拆分到不同的数据库(例如,客户,产品,销售)中;在这种情况下,可能更容易同意使用三部分名称样式,因此您的查询可以在任何一个数据库中执行。
答案 2 :(得分:0)
我发现的唯一一件事是...'USE'关键字保持连接 打开数据库
...不,与连接无关。
USE
只需将数据库设置为默认的 context 。这意味着任何未来的命令(直到下一个USE
语句)都将被命名为USE
语句中指定的数据库。 / p>
例如
USE MyDatabase
SELECT * FROM MyTable
SELECT * FROM SomeOtherDatabase.dbo.SomeOtherTable
SELECT * FROM MyView
USE AThirdDatabase
SELECT * FROM AThirdTable
在以上命令集中,由于使用MyDatabase
命令,第2行和第4行中的语句将被视为引用USE
中的对象。 (它也分别假定默认的dbo
模式,因为它也未指定)。
第3行专门为数据库命名。这是一次性的,不会更改USE
在第二个USE
命令之后,将假定第6行的语句引用了AThirdDatabase
中的对象。
P.S。您问题中的示例代码不能完全代表您所询问的问题-您尚未考虑架构。
您的第一个查询将从StudentTable
中默认模式(通常为dbo
)的SchoolDB
中进行选择。没关系。但是在第二个查询中,将假设SchoolDB
是架构名称,而不是数据库名称。 SQL将假定与默认数据库的连接(通常为master
,除非已登录的用户配置了其他数据库)。
dbName.TableName
(根据您的标题)不是对象名称的有效结构-如果您指定数据库,则还必须指定架构(否则,两个不同对象之间的引用可能不明确相同名称的模式)。