2

如何找到包含 UNION 关键字的所有视图和 SP?

(替代问题:SP 和视图的文本存储在哪个系统表中)

谢谢

4

3 回答 3

3

这是一个有点幼稚但可行的示例:(在 SQL Server 2005 和 2008 R2 上测试)

use msdb;

SElECT * FROM sys.all_sql_modules
WHERE  
(definition LIKE '%CREATE VIEW%' OR 
 definition LIKE '%CREATE PROCEDURE%')
AND definition LIKE '%UNION%'

要巩固它,只需通过 object_id 链接加入并按对象类型过滤视图和存储过程,而不是使用 LIKE。

更简单:

SElECT * FROM sys.all_sql_modules
WHERE definition LIKE '%UNION%'

警告:由于我们正在对每个对象的创建脚本执行 LIKE 比较,如果/当它出现在评论中时,我们也会选择 UNION 这个词。这对您来说可能没问题,但如果您需要使结果更具确定性并避免这种情况,您的 WHERE 子句将需要更复杂,可能使用正则表达式来优化结果。

于 2011-10-12T14:06:28.323 回答
3

我个人喜欢使用INFORMATION_SCHEMA视图:

对于存储过程:

SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_TYPE = 'PROCEDURE' 
    AND 
    --ROUTINE_DEFINITION LIKE '%union%' <-- 4,000 character limitation
    OBJECT_DEFINITION(OBJECT_ID(SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME)) 
        LIKE '%union%'

对于意见:

SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.VIEWS 
WHERE 
    --VIEW_DEFINITION LIKE '%union%' <-- 4,000 character limitation
    OBJECT_DEFINITION(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME)) LIKE '%union%'

这些视图仅限于您当前正在使用的任何数据库中的定义USE

或者,xSQL 软件有一个很棒的工具,它可以为您提供强大的 Microsoft SQL Server 2005 和 2008 搜索功能。

更新:正如@Bogdan 指出的那样,INFORMATION_SCHEMA定义仅限于前 4000 个字符。我已经更新了我的答案以包含一个解决方法。在这一点上,追求观点可能更容易sys

于 2011-10-12T14:11:56.967 回答
2

那些东西存放在sys.sql_modules.

于 2011-10-12T14:06:36.557 回答