如何从sys.all_objects咨询中获取数据库名称

时间:2015-08-28 19:53:52

标签: sql tsql schema

SELECT so.name, so.object_id AS ID, so.type_desc,SCHEMA_NAME ( so.schema_id)  
FROM sys.all_objects so
WHERE so.name LIKE '%'+@search+'%'

我想将对象数据库名称添加到此查询中,但我不知道在哪里可以找到要进行连接的关键字段。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

b