当前位置: 代码迷 >> Sql Server >> select * from [report].[dbo].[report_test] 跟 select * from report_test有什么区别吗
  详细解决方案

select * from [report].[dbo].[report_test] 跟 select * from report_test有什么区别吗

热度:346   发布时间:2016-04-24 08:58:40.0
select * from [report].[dbo].[report_test] 和 select * from report_test有什么区别吗
用的是sqlserver2008R2数据库
select * from [report].[dbo].[report_test] 和 select * from report_test有什么区别吗?
这两个语句 执行后的效果都是一样的
那 加 dbo 与不加 dbo 有什么不同?dbo 有什么作用? 是否会有效率问题? 
请大神们赐教
------解决思路----------------------
那 加 dbo 与不加 dbo 有什么不同?

你登陆账号默认架构是dbo可用不用输入,非则必须输入dbo

use report
go
select * from report_test

----当前数据库为report时不用指定数据库

use master
go
select * from [report].[dbo].[report_test]
----当前数据库不为report时必须指定数据库


------解决思路----------------------
 select * from report_test
一般在程序里都是这么写的,因为你程序里面连接数据库的时候,是指定了数据库名称的。
select * from [report].[dbo].[report_test] 
这种情况,我一般在一台数据库服务器上,同时装了两个数据库的时,实现跨库操作才会加前缀。
 
------解决思路----------------------
加前缀要稍微快那么一点点,不过影响不大,
原因是SQL Server不会去扫描你所有的Schema来定位,
你指定了前缀,就相当于替SQL Server省去了扫描Schema定位目标的过程,
---------
不过总体来说,加和不加影响不大,
------解决思路----------------------
DBO是框架拉。
如果你的数据库默认框架DBO,那么可以省略不写。
如果不是 必须写的
------解决思路----------------------
引用:
请问大神 我怎么知道我的账号登陆后 默认的框架是不是 dbo? 什么账号登陆时默认不是 dbo? 还有加不加 dbo 和查询效率有关吗? 


没有所有者权限的账号可以指定其它的

--在账号属性--映射里可以设置
USE DB
GO
ALTER USER [Roy] WITH DEFAULT_SCHEMA=[xxx]
GO
CREATE SCHEMA [xxx] AUTHORIZATION [Roy]
GO

--当创建对方时,默认都会以xxx.对象名生成
  相关解决方案