如何查找使用UNION的数据库中的所有对象

时间:2011-10-12 14:01:28

标签: sql-server sql-server-2005 sql-server-2008 union union-all

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

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

谢谢

3 个答案:

答案 0 :(得分: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子句将需要更复杂,可能使用正则表达式来优化结果。

答案 1 :(得分: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的任何数据库中的定义。

或者,a wonderful tool from xSQL software为Microsoft SQL Server 2005和2008提供了强大的搜索功能。

更新:正如@Bogdan所指出的,INFORMATION_SCHEMA定义仅限于前4000个字符。我已经更新了我的答案,包括一个解决方法。此时,查看sys视图可能更容易。

答案 2 :(得分:2)

这些内容存储在sys.sql_modules