我曾经需要存储过程的行能够跟踪我是否有对某些函数,过程或表的引用,或者有时试图在sp的代码中找到某些内容。
SQL Server在哪里存储过程的代码?
答案 0 :(得分:34)
使用sys.sql_modules
因为definition
是nvarchar(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,并单击“修改”,然后单击查询窗口用代码打开。