0

有时我需要在数据库中查找一些字符串,通常它只是主机名或 IP 地址。

是否有任何脚本可以在我有权访问的所有 Sybase db 对象(或至少在所有表中)中找到字符串。

4

2 回答 2

1

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
  设置无计数
结尾

去
于 2009-05-28T21:36:56.427 回答
0

没有我知道的本地人。您也许可以滚动一个查询系统表以获取对象列表的过程,然后让游标遍历并根据给定的搜索条件查询这些对象。

于 2009-05-12T22:32:35.377 回答