如何找到包含 UNION 关键字的所有视图和 SP?
(替代问题:SP 和视图的文本存储在哪个系统表中)
谢谢
如何找到包含 UNION 关键字的所有视图和 SP?
(替代问题:SP 和视图的文本存储在哪个系统表中)
谢谢
这是一个有点幼稚但可行的示例:(在 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 子句将需要更复杂,可能使用正则表达式来优化结果。
我个人喜欢使用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
。
那些东西存放在sys.sql_modules
.