You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server SSMS中用户自定义存储过程未在对象资源管理器显示的问题

解决SSMS中仅显示系统存储过程、不显示用户自定义存储过程的问题
  • 检查SSMS对象资源管理器的筛选器
    误设置筛选器是常见诱因。右键「存储过程」目录,选择「筛选器」→「筛选设置」,确认没有针对存储过程名称、所有者的过滤规则——比如有没有只显示sp_开头的系统过程,或者排除了自定义存储过程的所有者/前缀。

  • 核对用户对存储过程的VIEW DEFINITION权限
    就算权限查询结果一致,也可能存在权限继承或查询范围不全的情况。执行以下SQL确认当前用户对自定义存储过程的权限:

    SELECT 
        SCHEMA_NAME(p.schema_id) AS SchemaName,
        p.name AS ProcedureName,
        dp.permission_name,
        dp.state_desc
    FROM sys.procedures p
    LEFT JOIN sys.database_permissions dp 
        ON p.object_id = dp.major_id 
        AND dp.grantee_principal_id = USER_ID()
    WHERE p.is_ms_shipped = 0; -- 仅查询用户自定义存储过程
    

    如果结果里没有VIEW DEFINITION权限,哪怕有执行权限,SSMS也不会显示这些存储过程。需要给用户或其所属角色授权:

    GRANT VIEW DEFINITION ON SCHEMA::dbo TO [YourUser]; -- 替换为实际用户和架构名
    
  • 刷新SSMS元数据缓存
    SSMS的对象资源管理器可能缓存了旧数据,试试这些操作:

    • 右键对应数据库→「刷新」
    • 关闭重开SSMS
    • 清空SSMS缓存:关闭SSMS后,删除%APPDATA%\Microsoft\SQL Server Management Studio\18.0\Cache路径下的所有文件
  • 确认系统视图中存在自定义存储过程
    在问题环境里执行以下SQL,检查自定义存储过程是否存在于系统视图中:

    SELECT name, schema_id, is_ms_shipped 
    FROM sys.procedures 
    WHERE is_ms_shipped = 0;
    

    如果返回空,说明存储过程可能被误删;如果有结果但SSMS不显示,基本是SSMS端或权限细节的问题。

  • 检查存储过程所属架构的权限
    用户可能没有访问存储过程所在架构的权限。执行以下SQL核对:

    SELECT 
        s.name AS SchemaName,
        dp.permission_name,
        dp.state_desc
    FROM sys.schemas s
    LEFT JOIN sys.database_permissions dp 
        ON s.schema_id = dp.major_id 
        AND dp.grantee_principal_id = USER_ID()
    WHERE s.name = 'dbo'; -- 替换为自定义存储过程的所属架构
    

    确保用户对该架构有SELECT或VIEW DEFINITION权限。

内容的提问来源于stack exchange,提问作者Drewbty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:55:31