存储过程和其他对象在磁盘上的位置?

问题描述:

问题:在磁盘上有什么地方可以找到数据库实例上每个过程/触发器的人类可读文件?存储过程和其他对象在磁盘上的位置?

我已经浏览了我的磁盘上的Program Files\Microsoft SQL Server\,但它主要是.dll/.rll文件。

我问的原因是因为我的公司已决定将某个VARCHAR(10)字段增加到VARCHAR(50),并且此字段在350多个存储过程/触发器中出现。我的工作是弄清楚哪些脚本需要修改以解释这个字段长度的增加。如果我可以写一个脚本来解析这些文件并找出与各种不同的正则表达式匹配的文件,那就太好了。

+3

在数据库本身。使用'syscomments'或'sys.sql_modules'。 – shawnt00

as shawnt00提到的存储过程[SP],函数,表定义等都存储在数据库文件本身而不是文件系统中。但是,您可以使用系统视图来查询SP或功能文本,以尝试查找您正在查找的列/变量。

一个例外是任何加密的对象,因为对象的文本定义不会以明文显示,而是会被加密,因此不会从这样的查询中返回。

SELECT 
    SCHEMA_NAME(o.schema_id) as SchemaName 
    ,o.name AS ObjectName 
    ,o.type 
    ,o.type_desc 
    ,m.definition as ObjectText 
FROM 
    sys.sql_modules m 
    INNER JOIN sys.objects o 
    ON m.object_id = o.object_id 
WHERE 
    m.definition LIKE '%VARCHAR(10)%' 
+1

是的,我使用'sys.sql_modules'来识别感兴趣的350多个脚本,但是我并不知道“定义”列包含的是什么。进一步展望,我现在明白了。我可以从我的代码执行该查询,然后遍历结果并以这种方式解析出感兴趣的过程。谢谢。 – sab669

+0

是的,祝你好运,350+听起来不是很有趣,但一直在那里:) – Matt