如何通过sys.sql_modules系统视图或SHOW CREATE命令查看SQL存储过程的源代码?

2026-04-27 21:431阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计694个文字,预计阅读时间需要3分钟。

如何通过sys.sql_modules系统视图或SHOW CREATE命令查看SQL存储过程的源代码?

查看SQL Server源代码,使用 `sys.sql_modules`;MySQL使用 `SHOW CREATE PROCEDURE` —— 但两者差异极大,不能混用,也不能仅复制一条命令就完事。

SQL Server 查不到源码?先确认 sys.sql_modules.definition 是否为空

执行 SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('your_proc_name') 返回 NULL,不是语法错,大概率是这几种情况:

  • 存储过程名没带 schema,比如写成 'usp_GetUser' 而不是 'dbo.usp_GetUser'OBJECT_ID() 默认查当前数据库 + 当前用户默认 schema,跨 schema 必须显式指定
  • 过程被创建时加了 WITH ENCRYPTION,此时 definition 字段永远为 NULL,sp_helptext 同样失效,没有绕过办法
  • 权限不足:当前登录用户没被授予对 sys.sql_modules 的 SELECT 权限(虽少见,但在严格管控库中存在)

MySQL 的 SHOW CREATE PROCEDURE 报 “PROCEDURE does not exist” 怎么办

这不是过程真不存在,而是 MySQL 没找对地方。

阅读全文

本文共计694个文字,预计阅读时间需要3分钟。

如何通过sys.sql_modules系统视图或SHOW CREATE命令查看SQL存储过程的源代码?

查看SQL Server源代码,使用 `sys.sql_modules`;MySQL使用 `SHOW CREATE PROCEDURE` —— 但两者差异极大,不能混用,也不能仅复制一条命令就完事。

SQL Server 查不到源码?先确认 sys.sql_modules.definition 是否为空

执行 SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('your_proc_name') 返回 NULL,不是语法错,大概率是这几种情况:

  • 存储过程名没带 schema,比如写成 'usp_GetUser' 而不是 'dbo.usp_GetUser'OBJECT_ID() 默认查当前数据库 + 当前用户默认 schema,跨 schema 必须显式指定
  • 过程被创建时加了 WITH ENCRYPTION,此时 definition 字段永远为 NULL,sp_helptext 同样失效,没有绕过办法
  • 权限不足:当前登录用户没被授予对 sys.sql_modules 的 SELECT 权限(虽少见,但在严格管控库中存在)

MySQL 的 SHOW CREATE PROCEDURE 报 “PROCEDURE does not exist” 怎么办

这不是过程真不存在,而是 MySQL 没找对地方。

阅读全文