我曾经需要存储过程的行来跟踪我是否有对某个函数、过程或表的引用,或者有时尝试查找sp代码中的某些内容。
SQL Server将过程的代码存储在哪里?
发布于 2010-03-16 21:46:23
使用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 o.type_desc,o.name
使用此命令可以查看给定过程、视图、函数的文本:
select * from sys.sql_modules where object_id=object_id('YourProcedure')
发布于 2010-09-17 03:02:18
您可以使用
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
这些版本永远不会被截断。
发布于 2010-03-16 21:20:37
它将其存储在系统模式表中:
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%'
https://stackoverflow.com/questions/2454537
复制相似问题