如果有一种不使用正则表达式的方法,那太棒了。如果没有,这里是我到目前为止:如何查找从特定表中删除行的所有存储过程
我已经写了一个简单的CLR用户定义的函数(你可以看到我叫CLR_RegExMatch
)执行正则表达式匹配提供的字符串。我用它来搜索模式中的存储过程,触发器,函数等
下面是使用它的一个例子 - 搜索插入到一个名为ExampleTable表:
SELECT O.name, O.type_desc
FROM
SYS.OBJECTS O
INNER JOIN SYS.SQL_MODULES M ON
M.object_id = O.object_id
AND dbo.CLR_RegExMatch('INSERT\s+(INTO\s+)?ExampleTable\b', M.definition) = 1
我有问题我无法想出正则表达式来查找从给定表中删除行的所有例程。很显然,我可以用以下代码替代上例中的最后一行:
AND dbo.CLR_RegExMatch('DELETE\s+(FROM\s+)?ExampleTable\b', M.definition) = 1
而那让我成为那里的一部分。但是它不会拿起如下:
DELETE T1
FROM
ExampleTable T1
INNER JOIN AnotherTable T2 ON T2.ParentId = T1.Id
所以,我正在寻找的是要么将匹配一个正则表达式模式如上删除,或者要去这个以不同的方式。
N.B.我查询
definition
列的原因是
SYS.SQL_MODULES
而不是
ROUTINE_DEFINITION
列
INFORMATION_SCHEMA.ROUTINES
是因为后者只包含前4000个字符的例程定义,而前者包含全文。
作为解释在我的问题中,我已经从CLR正则表达式函数和系统表的组合中为您提供了该工具的所有功能。但是我猜你写的东西可能对不愿意查询系统表或编写CLR函数的人有用。也是一个不错的搜索引擎优化提升为开发者! – aslant 2011-06-02 09:33:53