在服务器上所有数据库的所有表中搜索字符串

2023-11-30

编辑:这个问题被标记为重复,但事实并非如此。 SO 上的其他答案显示了如何搜索单个数据库中的所有表,我需要搜索给定服务器上每个数据库中的所有表。

我需要在服务器上的所有数据库的所有表中搜索搜索字符串。我的电子邮件地址散布在即将更改域名的表格中,我需要准备一份报告来显示这些电子邮件地址的位置。我无法将存储过程添加到所有数据库,因此我需要一个查询来执行此操作,这不涉及重复执行 sp。我把这段代码取消了the net并使用它来搜索所有表,但我无法弄清楚如何在所有数据库上运行它。

drop table #Results
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @SearchStr nvarchar(100), @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @SearchStr = '@domaintobereplaced.com'
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM    INFORMATION_SCHEMA.TABLES
        WHERE       TABLE_TYPE = 'BASE TABLE'
            AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND OBJECTPROPERTY(
                    OBJECT_ID(
                        QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                         ), 'IsMSShipped'
                           ) = 0
    )

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM    INFORMATION_SCHEMA.COLUMNS
            WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND TABLE_NAME  = PARSENAME(@TableName, 1)
                AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
                AND QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL
        BEGIN
            INSERT INTO #Results
            EXEC
            (
                'SELECT top 10 ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END 
END

SELECT ColumnName, ColumnValue FROM #Results

首先,您必须收集所有数据库名称的列表sys.databases.
然后你必须创建动态 SQL 来提取所有数据库中所有表的名称,格式如下[database].[schema].[table name]'. You can do it by linking following tables:[数据库].sys.schemas' &[database].sys.tables'<BR/> Then you get list of all text columns by linking found tables to[数据库].sys.columns'
当您获得所有这些后,您可以创建对所有表和文本列的动态查询。

顺便说一句,如果有人将数据隐藏在TEXT列,您必须将其包含在搜索中并进行转换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在服务器上所有数据库的所有表中搜索字符串 的相关文章

随机推荐

  • 如何通过 $this->db->query() 在 codeigniter 中使用分页?

    我正在开发一个项目codeigniter 我在创作时遇到困难pagination的记录 事实上 当我使用 this gt db gt get 然后就可以了 分页工作正常 但是什么时候使用分页 this gt db gt query 当分页不
  • 如何使用 *ngFor 显示 json 对象并访问对象的键、值

    我想显示下面的内容data从服务器中ionic 2 和访问key and value对象使用 ngFor 我想显示这个object动态使用 ngFor 如何得到它 有没有更简单的解决方案problem因为我觉得对于开发人员来说使用它确实很常
  • 正则表达式从文本中每个单词的末尾删除点

    我尝试仅从给定文本中每个单词的末尾删除点 在爪哇中 例如 input java html net node js php output java html net node js php thanks 根据您对单词的定义 您可以替换 w S
  • 如何在kivy python中使用滚动条

    谁能告诉我如何在这段代码中使用滚动条 其次 是否有任何方法可以对齐标签和 TextInput 以便无论有多少输入 TextInput 内的文本都将清晰可见 这里的对齐意味着 如果有数百个 数百或数千 个 TextInput 则 TextIn
  • 使用 OperationContextScope 设置标头时,IClientMessageInspector BeforeSendRequest 方法不起作用

    I have a client code implementation to consume a service with IEndpointBehavior to track request and response data 一切工作正
  • C#中如何获取数据类型的范围?

    如何获取 c Sharp net 中的数据类型范围 例如 如果我想获取 uint 数据类型的范围 如何通过代码获取它 请参阅此示例参考 gt UInt64 MinValue 字段 表示 UInt64 的最小可能值 该字段是恒定的 MSDN
  • 捆绑安装期间 Heroku 部署失败

    当将我的应用程序 Rails3 推送到 Heroku 时 它被拒绝 运行 bundle install withoutdevelopment test pathvendor bundle binstubsvendor bundle bin
  • 如何从提交表单自定义数据全日历包

    我在 FullCalendar 上方添加了一个选择表单来选择用户并显示他的事件 问题是如何加载日历中选择的用户的事件 这是一些代码 在 Calendar html twig 中 block javascripts parent
  • 如何使用 .c 文件而不是 .cpp 文件在 google test 中编写测试类?

    我已将 googletest 用于包含 c 文件的 Android NDK 项目 我使用了 cpp 类型的测试类来执行相同的操作 我想改用 c 文件 当我尝试使用它时出现以下错误 Running main from gtest main c
  • UIGraphicsBeginImageContext 与 CGBitmapContextCreate

    我正在尝试更改背景线程中图像的颜色 苹果文档说 UIGraphicsBeginImageContext 只能从主线程调用 我正在尝试使用 CGBitmapContextCreate 上下文 CGBitmapContextCreate 位图数
  • 如何在Ubuntu上安装OpenAL SDK?

    我对 Linux 和 Linux 编程非常陌生 我正在尝试在 ubuntu 上安装 OpenAL SDK 我最好的猜测是我需要从 CVS 存储库下载 OpenAL 我找到了一个教程 http www edenwaith com produc
  • 在 FormCreate() 中我可以做什么,不可以做什么?

    我认为这一定是一个常见问题解答 但谷歌搜索并没有真正帮助 我可以做什么 和不可以做什么 FormCreate 我想知道表单的所有子控件是否都已完全创建并可供访问等 我问的原因是我偶然发现了一个旧项目 我的FormCreate 简单地包括 S
  • 使用 sed 仅更改连续重复的字母

    使用 sed 如何将字母 a 更改为 A 但前提是它重复出现为两个或多个连续字母 示例 来自 galaxy ear aardvak Haaaaaaaaa into galaxy ear AArdvak HAAAAAAAAA 您可以使用组来完
  • 计算 Pandas GroupBy 对象中日期的差异

    我有一个具有以下格式的 Pandas DataFrame In 0 df Out 0 col1 col2 date 0 1 1 2015 01 01 1 1 2 2015 01 09 2 1 3 2015 01 10 3 2 1 2015
  • 脚本和matlab命令窗口之间的区别

    我想知道在命令窗口中输入几行或让脚本执行它们之间有什么区别 在问题中逃离嵌套的 try catch 语句我有一个示例功能 我已将选定的代码放入脚本中 然后叫它 但是这样它就无法正常工作 另一方面 当我选择行并按 f9 它按预期工作 这些行是
  • 如何在ParaView中读取Ansys数据文件?

    有人知道如何将 Ansys 结构数据文件导出到 ParaView 吗 据了解ParaView有一个Ansys阅读器 但它不起作用 加载 inp 文件时总是会出现错误 是否有任何脚本可以将 inp 文件转换为 vtk Thanks 基于vid
  • 对范围对象使用 Range.Sort 时 Excel for Mac 崩溃

    我有一个 Excel 电子表格 单元格 A1 到 A8 中有 8 个随机数 然后我有两个按钮 每个按钮运行一个 VBA 子程序 Sub Button1 Click Sheets Sheet1 Range A1 A8 Sort key1 Sh
  • SQL日期查询中的VBA变量

    我正在尝试查询 SQL 数据库中日期在用户输入给出的日期之后的所有行 当我用 包围日期时 我遇到了各种错误 从 附近语法不正确 到 将表达式转换为算术溢出错误 我当前的代码如下所示 inputdate InputBox Please ent
  • 增加谷歌云虚拟机的配额

    最近 我试图通过向我的虚拟机添加 GPU 来获得 Google 云加速器的好处 因此请求增加配额 因此我发送了 8 个 GPU 的请求 并收到了以下电子邮件 注意我尝试了多次 那么任何人都可以解释到底发生了什么以及如何成功增加 提前致谢 此
  • 在服务器上所有数据库的所有表中搜索字符串

    编辑 这个问题被标记为重复 但事实并非如此 SO 上的其他答案显示了如何搜索单个数据库中的所有表 我需要搜索给定服务器上每个数据库中的所有表 我需要在服务器上的所有数据库的所有表中搜索搜索字符串 我的电子邮件地址散布在即将更改域名的表格中