SQL Server在哪里存储存储过程代码?

时间:2010-03-16 13:14:40

标签: sql-server-2005 stored-procedures

我曾经需要存储过程的行能够跟踪我是否有对某些函数,过程或表的引用,或者有时试图在sp的代码中找到某些内容。

SQL Server在哪里存储过程的代码?

7 个答案:

答案 0 :(得分:34)

使用sys.sql_modules因为definitionnvarchar(max),因为它不会截断长代码。

INFORMATION_SCHEMA.ROUTINES ROUTINE_DEFINITION列中只有nvarchar(4000),因此如果您尝试查看较长过程的文本,您会看到它被截断。

使用此选项可在任何过程,视图,功能中搜索文本:

SELECT DISTINCT
    o.name AS Object_Name,o.type_desc
    FROM sys.sql_modules        m 
        INNER JOIN sys.objects  o ON m.object_id=o.object_id
    WHERE m.definition Like '%'+@Search+'%'
    ORDER BY 2,1

使用它来查看给定过程,视图,函数的文本:

select * from sys.sql_modules where object_id=object_id('YourProcedure')

答案 1 :(得分:3)

它将其存储在系统架构表中:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

有关INFORMATION_SCHEMA.ROUTINES视图的信息,请参阅MSDN:

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/c75561b2-c9a1-48a1-9afa-a5896b6454cf.htm

有关此内容的搜索,您可以执行以下操作:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%search_string%'

答案 2 :(得分:3)

您可以使用

select object_definition(object_id(routine_name)) from information_schema.routines

select object_definition(object_id) from sys.objects where name = 'foo'

甚至

select object_definition(object_id('foo')); -- 'foo' is the table name

这些版本永远不会被截断。

答案 3 :(得分:1)

如果您尝试搜索对其他对象的引用,则可以运行如下查询:

SELECT * 来自syscomments 在哪里写'%searchstring%'

这将返回数据库中引用搜索字符串的所有对象。然后,您可以查看这些对象以查看哪些存储过程(以及视图和函数)正在执行此操作。

答案 4 :(得分:1)

查看依赖关系

在SQL Server Management Studio中,右键单击表,然后选择“查看依赖项”。您将看到引用该表的每个对象

<强> INFORMATION_SCHEMA

存储过程,视图,约束等的实际代码存储在SysComments中。您应该使用模式Information_Schema中提供的视图进行查询。以下是Information_Schema的所有组成部分。

答案 5 :(得分:0)

如果您只是想查看存储过程代码,请进入数据库中的progammabiltity文件夹,它们应该全部存储在存储过程中。

答案 6 :(得分:0)

如果使用SQL Server Management Studion,则可以右键单击所需的数据库,然后单击“任务 - &gt;生成脚本”。

在那里,您可以生成一个脚本,将所有SP放在一个文件中,单独的文件中,或直接放到查询窗口中,然后搜索/更改您想要的内容。

希望这有帮助。

(这适用于SQL Server 2008,但我认为2005也具有此功能)

编辑:

您还可以按照此路径“YourDB - &gt;可编程性 - &gt;存储过程”查看单个SP代码,然后右键单击要查看的SP,并单击“修改”,然后单击查询窗口用代码打开。