查看某个对象在哪些库中存在

SQL对象搜索
该存储过程用于查找指定对象在SQL Server数据库中的位置及类型,支持多种对象如表、视图、存储过程等。

USE Master
GO

/**********************************************************
**ServerName:         N/A
**DatabaseNAME:   Master
**ObjectName:         up_SearchObject
**Function:                查找某个对象所在的数据库和表,对象为除了索引之外的任何对象,包括表,视图,存储过程                                等,若不存在,返回无结果
**Author:                    SQLServer_2005
**Date:                       2006.9.7
**Version:                  V1.0
*********************************************************/

ALTER PROCEDURE dbo.up_SearchObject
@ObjectName sysname
AS
EXEC('CREATE TABLE Temp..#(
                            ID int identity(1,1),
                            ObjectName sysname,
       ObjectType varchar(30),
       CreateTime datetime,
       DatabaseName sysname,
       TableName varchar(256)
                           )
 INSERT INTO Temp..#(ObjectName,ObjectType,CreateTime,DatabaseName,TableName) EXEC SP_MSFOREACHDB
@COMMAND1=''IF EXISTS(
                      SELECT 1
                      FROM ?..sysobjects
                      WHERE name = '''''+@ObjectName+'''''
                    )
           BEGIN       
            SELECT name AS ObjectName,
                            CASE WHEN xtype = ''''C'''' THEN ''''Check''''
                                 WHEN xtype = ''''D'''' THEN ''''Default''''
                                 WHEN xtype = ''''F'''' THEN ''''Foreign Key''''
                                 WHEN xtype = ''''L'''' THEN ''''Log''''
                                 WHEN xtype = ''''FN'''' THEN '''' Function''''
                                 WHEN xtype = ''''IN'''' THEN '''' Inner Talbe Function''''
                                 WHEN xtype = ''''P'''' THEN '''' Procedure''''
                                 WHEN xtype = ''''PK'''' THEN '''' Primary Key''''
                                 WHEN xtype = ''''RF'''' THEN '''' Replication Procedure''''
                                 WHEN xtype = ''''S'''' THEN '''' System Table''''
                                 WHEN xtype = ''''TF'''' THEN '''' Table Function''''
                                 WHEN xtype = ''''TR'''' THEN '''' Trigger''''
                                 WHEN xtype = ''''U'''' THEN '''' User Table''''
                                 WHEN xtype = ''''UQ'''' THEN '''' Unique''''
                                 WHEN xtype = ''''V'''' THEN '''' View''''
                                 WHEN xtype = ''''X'''' THEN '''' Extend Procedure''''
                                 ELSE ''''Unknown''''
                            END AS ObjectType,
                            CONVERT(VARCHAR(20),crdate,120) AS CreateTime,
                            ''''?'''' AS DatabaseName,
                            TableName=ISNULL((SELECT TOP 1 name FROM ?..sysobjects WHERE id = obj.parent_obj),''''N/A'''')
                FROM ?..sysobjects obj
                WHERE NAME = '''''+@ObjectName+'''''
           END''

    SELECT ID,ObjectName,ObjectType,CreateTime,DatabaseName,TableName
    FROM Temp..#

           TRUNCATE TABLE Temp..#
           DROP TABLE Temp..#
')


/**调用
EXEC up_SearchObject 'T1'
**/ 

在 Python 中检查某个对象(如函数、类或变量)是否存在于模块或中,可以使用内置的 `hasattr()` 函数或 `dir()` 函数。这些方法可以动态地检查对象是否属于某个模块。 ### 使用 `hasattr()` 函数 `hasattr()` 函数用于检查某个对象是否具有指定的属性或方法。如果模块中存在对象,则返回 `True`,否则返回 `False`。 ```python import math if hasattr(math, 'sqrt'): print("sqrt 函数存在于 math 模块中") else: print("sqrt 函数不存在于 math 模块中") ``` ### 使用 `dir()` 函数 `dir()` 函数返回模块中定义的所有名称列表(包括函数、类、变量等)。可以通过检查名称是否在列表中来判断对象是否存在。 ```python import math if 'sqrt' in dir(math): print("sqrt 函数存在于 math 模块中") else: print("sqrt 函数不存在于 math 模块中") ``` ### 使用 `inspect` 模块 `inspect` 模块提供了更高级的功能来检查模块内容。例如,可以使用 `inspect.getmembers()` 获取模块中的所有成员,并筛选出特定的对象。 ```python import inspect import math members = inspect.getmembers(math) function_names = [name for name, _ in members if isinstance(_, type(math.sqrt))] if 'sqrt' in function_names: print("sqrt 函数存在于 math 模块中") else: print("sqrt 函数不存在于 math 模块中") ``` ### 动态导入模块并检查对象 如果模块名称是动态提供的,可以使用 `importlib` 模块动态导入模块,然后使用 `hasattr()` 或 `dir()` 进行检查。 ```python import importlib module_name = 'math' obj_name = 'sqrt' module = importlib.import_module(module_name) if hasattr(module, obj_name): print(f"{obj_name} 存在于 {module_name} 模块中") else: print(f"{obj_name} 不存在于 {module_name} 模块中") ``` 这些方法可以灵活地应用于不同的场景,确保在使用模块中的对象之前进行正确性检查[^2]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值