用的是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,那么可以省略不写。
如果不是 必须写的
------解决思路----------------------
没有所有者权限的账号可以指定其它的
--在账号属性--映射里可以设置
USE DB
GO
ALTER USER [Roy] WITH DEFAULT_SCHEMA=[xxx]
GO
CREATE SCHEMA [xxx] AUTHORIZATION [Roy]
GO
--当创建对方时,默认都会以xxx.对象名生成