有时我需要在数据库中查找一些字符串,通常它只是主机名或 IP 地址。
是否有任何脚本可以在我有权访问的所有 Sybase db 对象(或至少在所有表中)中找到字符串。
sysobjects + cursor + EXECUTE 上的查询有效。有点像。
sp__map_object 'SELECT * FROM %O where name like "bar%"', 'foo_%'
代码中有很多错误/问题/担忧,我不愿意发布它,但我对 Sybase 的同胞有一定的同情。
Rob Verschoor 在http://www.sypron.nl/new_ssp_dwn.html上有一堆不错的存储过程
pjjH
289:1> ? sp__map_object
(受影响的 1 行)
/*
*
* 运行时要小心!!!
*
* 请参阅 sp__map_db.sql 中的严重警告列表
*
* 对每个对象的存储过程运行给定的命令
* 匹配 @object_pat 并将 %O 的第一个实例替换为
* 姓名。
*
* 只需在 Perl 中执行此操作。或者重构 sql 使其适用于一些理智的人
* 用户、登录名、数据库和对象的交叉产品。
*
*保罗·哈灵顿
*
*/
创建过程 sp__map_object
@sql VARCHAR(255) = 'sp__help',
@objpat VARCHAR(32) = NULL,
@type VARCHAR(2) = 'U',
@do_it INT = 1,
@verbose INT = 0
作为
开始
设置无计数
声明 object_cursor CURSOR
为了
选择不同的名称
来自系统对象
像@objpat这样的名字
和类型像@type
声明 @munged_sql VARCHAR(255)
声明@object_name varchar(64)
打开 object_cursor
FETCH object_cursor INTO @object_name
而@@sqlstatus = 0
开始
IF CHARINDEX('%O', @sql) 0
SELECT @munged_sql = SUBSTRING(@sql, 1, CHARINDEX('%O', @sql) - 1) +
@object_name +
SUBSTRING(@sql, CHARINDEX('%O', @sql) + 2, 255)
别的
选择 @munged_sql = @sql
如果(@do_it = 0 或 @verbose = 1)
开始
声明@msg varchar(255)
选择@msg = @munged_sql
选择@msg
结尾
如果@do_it = 1
执行(@munged_sql)
FETCH object_cursor INTO @object_name
结尾
关闭 object_cursor
DEALLOCATE CURSOR object_cursor
设置无计数
结尾
去
没有我知道的本地人。您也许可以滚动一个查询系统表以获取对象列表的过程,然后让游标遍历并根据给定的搜索条件查询这些对象。