如何在 Sql Server 2008 R2 存储过程中搜索字符串?

Posted

技术标签:

【中文标题】如何在 Sql Server 2008 R2 存储过程中搜索字符串?【英文标题】:how to search Sql Server 2008 R2 stored procedures for a string? 【发布时间】:2011-09-15 07:18:33 【问题描述】:

我正在将旧版 SQLS2k 迁移到 2008R2,似乎所有数据访问都是通过存储过程完成的,并且任何自定义查询都使用旧版 *==* 外连接语法。有超过一百个 procs,所以我不想单独打开每一个来查看它是否使用该语法(大多数不会),有没有一种方法可以查询元数据以获取 procs/functions/views 列表/triggers,然后循环搜索*==* 字符串,打印出违规对象的名称?

我的背景是 oracle,我知道如何在那里找到元数据视图,但我对 Sql Server 有点陌生。降级兼容版本不是一种选择。

谢谢!

【问题讨论】:

很高兴您正在解决这个问题,即使在 SQl sserver 2000 中也不应该使用该代码,因为它不可靠并且并不总是进行外部连接,有时它会进行交叉连接。希望您同时删除这些查询中的所有其他隐式连接,因为混合隐式和显式连接也会导致问题。隐式连接无论如何都是 SQL 反模式,不应在任何数据库中使用。示例见链接:***.com/questions/1080097/… 【参考方案1】:

Free Red Gate SQL Search?

或查询sys.sql_modules

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules
WHERE definition LIKE '%=*%' OR definition LIKE '%*=%'

注意:INFORMATION_SCHEMA 视图和 syscmets 会截断定义,因此不可靠。

【讨论】:

+1 用于 Red-Gate SQL 搜索 - DB 程序员(和 DBA)绝对不可缺少的 免费 工具! 完美!接受 :) 唯一的麻烦是它告诉我我所有的日记触发器都使用旧语法...... FML! 还有,刚刚安装了那个Red Gate工具,非常棒,谢谢!【参考方案2】:

使用查询的问题是,如果存储过程被加密,除非您正在运行 DAC 连接类型,否则这些将不起作用。

这是第三方工具派上用场的地方,因为它们可以帮助您轻松做到这一点。我使用的是免费的ApexSQL Search,但我想 Red Gate 或其他任何工具都不会出错。

【讨论】:

以上是关于如何在 Sql Server 2008 R2 存储过程中搜索字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sql server 2008r2 中将行名更改为列名

在 SQL Server 2008 R2 和 SQL Server Compact 4 中存储日期/时间数据的最佳方式

SQL Server 2008 R2 用户权限

SQL Server 2008 R2 中运行缓慢的存储过程

如何卸载 2012 r2 故障转移群集

如何安装sql server 2008 r2