【问题标题】:How to get the database name from a sys.all_objects consult如何从 sys.all_objects 咨询中获取数据库名称
【发布时间】:2015-11-23 13:49:49
【问题描述】:
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+'%'

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

【问题讨论】:

  • 不是一直局限在当前数据库吗?

标签: sql tsql schema


【解决方案1】:
DECLARE @search sysname

SET @search='xyz'

SELECT DB_NAME()[DATABASE],
    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】:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2011-10-30
      • 1970-01-01
      • 2018-09-20
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      相关资源
      最近更新 更多