sys.objects 视图包括在当前数据库中创建的所有对象(包括那些由 Microsoft 提供的对象,这些对象在 is_ms_shipped 列中进行了标记)。这些对象可以是表、视图、存储过程、约束、用户定义的函数等。
sys.system_objects 视图包括所有系统对象。这些对象可以从任何数据库访问,但不存储在当前数据库中。它们的定义在资源数据库 (mssqlsystemresource.mdf) 中,这是一个隐藏的只读数据库,无法以通常的方式访问。
sys.all_objects 视图包含 sys.objects 和 sys.system_objects 之间的 UNION。如果您想搜索用户创建的对象,您应该使用sys.objects 视图而不是sys.all_objects 视图。
如果想知道当前数据库的名称,可以使用DB_NAME()函数。
如果你想在所有数据库中搜索一个对象,你可以使用游标或(如果是一次性的)未记录的存储过程sp_MSforeachdb:
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='USE ? SELECT name, object_id, type_desc, SCHEMA_NAME(schema_id), DB_NAME() FROM sys.objects WHERE name LIKE ''%'+REPLACE(@search,'''','''''''')+'%'''
EXEC sp_MSforeachdb @SQL