【问题标题】:how to find stored procedure without knowing Database name如何在不知道数据库名称的情况下查找存储过程
【发布时间】:2017-07-12 21:34:43
【问题描述】:

谁能告诉我如何找到存储过程的代码? 我什至不知道数据库名称,所以我怎么能找到它。 请帮我解决这个问题

【问题讨论】:

标签: sql-server stored-procedures


【解决方案1】:

选择 * FROM dbo.sysobjects WHERE type = 'P'

【讨论】:

    【解决方案2】:

    您可以使用以下代码在所有数据库中搜索 SP。

    DECLARE @SPROCS AS TABLE (DBNAME VARCHAR(64), SCHEMANAME VARCHAR (128), 
    STOREDPROCNAME VARCHAR(128), 
    TYPE VARCHAR(10), TYPE_DESC VARCHAR(128), 
    CREATE_DATE DATETIME, MODIFY_DATE DATETIME, IS_MS_SHIPPED INT)
    INSERT INTO @SPROCS
    EXECUTE SP_MSFOREACHDB N'USE ?; SELECT ''?'', 
    S.NAME AS SCHEMANAME, O.NAME AS STOREDPROCNAME, 
    TYPE, TYPE_DESC, CREATE_DATE, MODIFY_DATE, IS_MS_SHIPPED
    FROM SYS.ALL_OBJECTS AS O INNER JOIN SYS.SCHEMAS AS S 
    ON S.SCHEMA_ID = O.SCHEMA_ID 
    WHERE O.TYPE IN (''P'',''V'',''PC'',''FN'',''TF'',''U'')
    AND IS_MS_SHIPPED = 0'
    
    SELECT * FROM @SPROCS
    WHERE DBNAME NOT IN ('MASTER', 'TEMPDB', 'MODEL', 'MSDB', 'DBA') AND STOREDPROCNAME LIKE '%<SP Name>%'
    ORDER BY DBNAME, SCHEMANAME, TYPE, STOREDPROCNAME
    

    选项 2

    EXEC sp_msforeachdb 
    'if exists(select 1 from [?].sys.objects where name=''<SPname>'')
    select ''?'' as FoundInDb from [?].sys.objects where name=''<SPname>'''
    

    选项 3

    或者如果可能的话,您可以从RedGate SQLSearch 安装一个工具来轻松完成此操作

    【讨论】:

    • 太复杂了。只需给我一份声明即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2011-09-09
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多