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+'%'
我想将对象数据库名称添加到此查询中,但我不知道在哪里可以找到要进行连接的关键字段。
答案 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