如何查找包含UNION关键字的所有视图和SP?
(替代问题:在SP和视图的文本中存储了什么系统表)
谢谢
答案 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
。