【问题标题】:Searching for a string in all tables of database in SQL Server 2000在 SQL Server 2000 中的所有数据库表中搜索字符串
【发布时间】:2013-02-20 15:05:53
【问题描述】:

这个问题很多地方都有很多答案,比如:

Search for a string in all tables, rows and columns of a DB

但是我使用的是 SQL Server 2000 并且需要做同样的事情:在数据库中的所有表中搜索特定字符串。

【问题讨论】:

  • 其他答案中的 SQL 是您的问题,还是您找不到用于运行它的程序?
  • 是的,它与其他答案中的 SQL 有关。我的意思是我不能让它们为 SQL Server 2000 工作。
  • 那么,鉴于您决定尝试的 sql(从其他问题接受的答案?)您(具体而言)有什么问题? - 它在 SQL 2000 中看起来并不遥远。您应该编辑您的问题以包含您决定使用的代码并说明您在转换它时遇到的问题。目前我们不知道您实际上要运行什么。
  • 我在链接到的代码中看到的唯一明显问题是sys.objects(例如)在 SQL 2000 中是sysobjects。但这些差异是documented,所以应该很容易修改代码。

标签: sql-server sql-server-2000


【解决方案1】:
DECLARE @SearchString VARCHAR(32);
SET @SearchString = 'Something';

CREATE TABLE #results(o NVARCHAR(512), c SYSNAME, value NVARCHAR(4000));

DECLARE @sql NVARCHAR(4000), @o NVARCHAR(512), @c SYSNAME;

DECLARE c CURSOR LOCAL FAST_FORWARD FOR 
   SELECT QUOTENAME(u.name) + '.' + QUOTENAME(o.name), QUOTENAME(c.name)
FROM sysobjects AS o
INNER JOIN syscolumns AS c ON o.id = c.id
INNER JOIN sysusers AS u ON o.uid = u.uid
WHERE c.xtype IN (35, 99, 167, 175, 231, 239) AND o.xtype = 'U';

OPEN c;

FETCH c INTO @o, @c;

WHILE @@FETCH_STATUS = 0
BEGIN
  SET @sql = N'INSERT #Results(o,c,value) SELECT @o, @c, 
    CONVERT(NVARCHAR(4000), ' + @c + ') FROM ' + @o + ' WHERE ' 
    + @c + ' LIKE ''%' + @SearchString + '%'';';
  EXEC sp_executesql @sql, N'@o NVARCHAR(512), @c SYSNAME', @o, @c;
  FETCH c INTO @o, @c;
END

CLOSE c;
DEALLOCATE c;

SELECT o, c, value FROM #Results;

DROP TABLE #Results;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多