为什么完全的资格似乎被忽视了?
在这里,我USE我正在查询的数据库,并得到预期的结果:
use [_DBMgt];
GO
select
s.[name] as [Schema],
o.[name] as [Table]
from [_DBMgt].[sys].[objects] o
inner join [_DBMgt].[sys].[schemas] s
on s.[schema_id] = o.[schema_id]
where OBJECTPROPERTY(o.[object_id], N'IsUserTable') = 1
order by s.[name], o.[name]
;
GO
Schema Table
------ ---------------
dbo TableAbbrLookup
(1 row(s) affected)在这里,我没有USE我想查询的数据库,但是完全限定了数据库引用;但是,我没有得到预期的结果。
use [master];
GO
select
s.[name] as [Schema],
o.[name] as [Table]
from [_DBMgt].[sys].[objects] o
inner join [_DBMgt].[sys].[schemas] s
on s.[schema_id] = o.[schema_id]
where OBJECTPROPERTY(o.[object_id], N'IsUserTable') = 1
order by s.[name], o.[name]
;
GO
Schema Table
------ ----------------------
sys sqlagent_job_history
sys sqlagent_jobsteps
sys sqlagent_jobsteps_logs
(3 row(s) affected)要么我期望错误的事情(可能),要么我发现了一个错误(不太可能)。
我遗漏了什么?
发布于 2017-08-18 14:23:21
来自与OBJECTPROPERTYOBJECTPROPERTY有关的文档:
注:数据库引擎假定object_id位于当前数据库上下文中。引用另一个数据库中的object_id的查询将返回空或不正确的结果。例如,在下面的查询中,当前数据库上下文是主数据库。数据库引擎将尝试返回该数据库中指定的object_id的属性值,而不是查询中指定的数据库。查询返回不正确的结果,因为视图vEmployee不在主数据库中。
https://dba.stackexchange.com/questions/183837
复制相似问题