【问题标题】:How to view a stored function - SQL Server如何查看存储的函数 - SQL Server
【发布时间】:2013-03-09 10:51:11
【问题描述】:

版本:SQLServer 8

我想查看sqlserver中存储函数的内容,即该函数到底在做什么。

here 列出的所有选项都不适合我。似乎没有任何名为 sys.objects 的数据库/表。我能够查询 information_table.routines 表,但它不包含我正在寻找的功能。我的函数位于:

DBName.dbo.functionName

如何查看这个函数的内容?

【问题讨论】:

  • 你为什么不使用 Management Studio 或者你肯定想用查询来检查?
  • @Rolice 我想通过查询进行检查,因为我使用的是 Linux,并且我找到的解决方案都不允许我直接查看该函数。

标签: sql-server stored-functions


【解决方案1】:

您可以使用sp_helptext 命令查看定义。它只是这样做

显示用户定义的规则、默认、未加密的 Transact-SQL 存储过程、用户定义的 Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)的定义。

例如;

EXEC sp_helptext 'StoredProcedureName'

编辑: 如果您的 databasesserver 不同,那么您也可以通过指定它们来做到这一点

EXEC [ServerName].[DatabaseName].dbo.sp_helptext 'storedProcedureName'

【讨论】:

  • 当前数据库与目标数据库不同时如何运行?当我连接到默认数据库并运行上述命令时,我得到:Error code 15250, SQL state S0001: The database name component of the object qualifier must be the name of the current database. 这仅在当前连接到 DBName 时有效:EXEC sp_helptext 'DBName.dbo.functionName'
  • 试试这个EXEC [ServerName].[DatabaseName].dbo.sp_HelpText 'storedProcName
  • 成功了!不过,我不需要服务器名称部分。 EXEC [DatabaseName].dbo.sp_helptext '[functionName]'
【解决方案2】:
select definition 
from sys.sql_modules 
where object_name(object_id) like 'functionName'

【讨论】:

  • 你可以使用like '%routineName%'= 'routineName'
  • 请注意,此表并未存储所有类型的函数。根据文档 (msdn.microsoft.com/en-us/library/ms175081.aspx),它包括存储过程、复制过滤器过程、视图、SQL DML 触发器、标量函数、TVF 和规则。这不包括所有 CLR 函数、CLR 触发器、约束和扩展存储过程。
  • 啊,非常感谢!这适用于函数(不仅仅是存储过程)并且完全救了我。
【解决方案3】:
--ShowStoredProcedures
select p.[type]
      ,p.[name]
      ,c.[definition]
  from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
 where p.[type] = 'P'
   --and c.[definition] like '%foo%'
ORDER BY p.[name]
___________

SELECT OBJECT_NAME(object_id) ProcedureName,
       definition
FROM sys.sql_modules
WHERE objectproperty(object_id,'IsProcedure') = 1
ORDER BY OBJECT_NAME(object_id)

【讨论】:

  • 这比最佳答案要好得多
【解决方案4】:

是的,它工作正常。

查看存储过程... SELECT * FROM sys.procedures;

并获取 procduere 名称并使用以下查询(我使用的是 SQuirreL SQL 客户端版本 3.2.0-RC1)。

EXEC sp_helptext 'StoredProcedureName'。

【讨论】:

    【解决方案5】:

    我宁愿使用 INFORMATION_SCHEMA.ROUTINES:

    select ROUTINE_NAME, ROUTINE_DEFINITION, LAST_ALTERED 
    from INFORMATION_SCHEMA.ROUTINES where SPECIFIC_NAME = 'usp_mysp'
    

    只需将 ROUTINE_DEFINITION 列复制到新窗口即可查看完整内容。

    【讨论】:

      【解决方案6】:

      无论是存储过程还是函数还是脚本下面的任何 SQL 对象都会给出完整的定义

      USE<Your Data base>
      SELECT OBJECT_DEFINITION (OBJECT_ID('<YOUR OBJECT NAME>')) AS ObjectDefinition 
      

      OBJECT NAME 可以是您的对象名称,例如存储过程/函数/触发器...等名称

      【讨论】:

        【解决方案7】:

        您可以转到对象资源管理器,选择包含存储过程的数据库,然后选择“将存储过程编写为脚本”:

        然后签入您选择的目标文件夹。

        【讨论】:

          猜你喜欢
          • 2012-12-22
          • 1970-01-01
          • 1970-01-01
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 2017-10-01
          • 2018-12-11
          • 2013-11-29
          相关资源
          最近更新 更多