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
相关产品推荐
相关产品推荐

