代码之家  ›  专栏  ›  技术社区  ›  bugfixr

SQL Server Management Studio-在表列表中使用多个筛选器?

  •  47
  • bugfixr  · 技术社区  · 16 年前

    在Management Studio中,您可以右键单击表组为表列表创建筛选器。有人想出在过滤器中包含多个表的方法了吗?例如,我想要所有带有“ br_* tbl_*

    有人知道怎么做吗?

    10 回复  |  直到 8 年前
        1
  •  39
  •   shA.t Rami Jamleh    8 年前

    你不能这么做。当我们第一次有Management Studio时,我尝试了你能想到的一切可能的组合: _ , % , * , " , ' , && , & , and , or , | , || 等等。。。

        2
  •  7
  •   stubaker    11 年前
        3
  •  4
  •   Vladas Cibulskis    8 年前

    我使用的是SQL Server Management Studio v17.1,它的过滤器构造中有一个SQL注入错误,所以你实际上可以转义默认值

    tbl.name like '%xxx%' 
    

    并编写自己的查询(有一些限制)。例如,为了筛选以“_arch”、“_hist”、“_purge”结尾的表,我使用了以下筛选值

    _arch') and RIGHT(tbl.name, 5) != N'purge' and RIGHT(tbl.name, 4) != N'hist' and not(tbl.name like N'bbb
    

    您可以使用SQL Server Profiler查看构造的查询,并根据需要进行调整。

    不确定这个错误在以前的SQLManagementStudio版本中是否可用,也不确定何时会修复,但目前我对结果感到满意。

        4
  •  2
  •   Etni Etni    16 年前

    我使用了Toad for SQL Server(免费版),它有非常好的过滤选项。

        5
  •  2
  •   shA.t Rami Jamleh    8 年前

    起初,它看起来可能需要一个 CONTAINS 查询(例如。 "br_*" OR "tbl_*" ),但似乎并非如此。它似乎只支持一个值,然后将该值传递给 LIKE 条款(例如。 'app' 成为 '%app%'

        6
  •  1
  •   Claudio    4 年前

    “sql注入”方法仍然有效(v17.5),但有一个转折:

    zzzz' or charindex('pattern1',  name) > 0  or charindex('pattern2', name) > 0 or name like 'zzzz
    

    (我使用“zzzz”绕过“%”)

    如果在模式中(或代码中的任何地方)使用了“_”或“%”,则它不起作用,因为在计算之前,它会自动被“[_]”或“[%]”替换。

        7
  •  0
  •   robyaw    9 年前

    正如其他人所说,您不能在SQL Server Management Studio(包括2014年)中执行此操作。

    如果您只需要这些,以下查询将为您提供一个经过筛选的表列表:

    SELECT
        CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS TABLE_SCHEMA_AND_NAME,
        TABLE_SCHEMA,
        TABLE_NAME
    FROM
        INFORMATION_SCHEMA.TABLES
    WHERE
        TABLE_SCHEMA IN ('X', 'Y', 'Z') -- schemas go here
    ORDER BY
        TABLE_SCHEMA,
        TABLE_NAME;
    
        8
  •  -1
  •   DevDave    8 年前

    SQL注入方法仍然(在一定程度上)适用于(从2017 v17.8.1开始),尽管它在 % 符号,所以它会从字面上解释这些。

    如果您使用的是名称->包含筛选器,Profiler显示: ... AND dtb.name LIKE N'%MyDatabase1%')

    因此,在名称中->包含字段: MyDatabase1') OR (dtb.name LIKE 'MyDatabase2 对于简单的情况应该这样做。

        9
  •  -1
  •   krkc    6 年前

    我知道这很旧,但很高兴知道,如果你只输入“过滤器”文本,它就可以工作。跳过 * % 或任何其他标准搜索字符,只需输入 br_ tbl_ 或者你想过滤的任何东西。

        10
  •  -2
  •   Andre Figueiredo    9 年前

    幸运的是,我刚刚征服了这一壮举,尽管我的成功很小,因为你可以按模式过滤,这将允许你看到多个表,但每次你想更改它时,你都必须键入过滤文本。