SQL Server Management Studio - использование нескольких фильтров в списке таблиц?
-
06-09-2019 - |
Вопрос
В Management Studio вы можете щелкнуть правой кнопкой мыши на группе таблиц, чтобы создать фильтр для списка таблиц.Кто-нибудь придумал способ включить в фильтр несколько таблиц?Например, я бы хотел, чтобы все таблицы имели "br_*
" и "tbl_*
- чтобы появиться.
Кто-нибудь знает, как это сделать?
Решение
Возможно, вы сможете добавить свой собственный аддон к SMSS, который позволит вам делать то, что вы ищете:
Черное искусство написания надстройки SQL Server Management Studio 2005
Расширение функциональности в среде SQL Server 2005 Management Studio с помощью надстроек
Первый из них специально предназначен для поиска и отображения всех объектов схемы с заданным именем, чтобы вы могли расширить его для того, что вы ищете.
Другие советы
НЕТ, - ты не можешь этого сделать.Когда мы только запустили Management Studio, я перепробовал все возможные комбинации всего, что только можно было придумать: _
, %
, *
, "
, '
, &&
, &
, and
, or
, |
, ||
, и т.д...
Я использовал Toad для SQL Server (бесплатная версия), которая имеет очень хорошие параметры фильтрации.
Я использую SQL Server Management Studio версии 17.1, и в нем есть ошибка SQL-инъекции в конструкции фильтра, так что вы действительно можете избежать использования default
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, чтобы просмотреть созданный запрос и скорректировать его по мере необходимости.
Не уверен, была ли эта же ошибка доступна в предыдущих версиях SQL Management Studio и когда она будет исправлена, но пока я доволен результатом.
На первый взгляд кажется, что для этого можно было бы использовать CONTAINS
запрос (например, "br_*" OR "tbl_*"
), но, похоже, это не так.Кажется, он поддерживает только значение, которое затем передается в LIKE
оговорка (например, 'app'
становится '%app%'
).
Как уже говорили другие, вы не можете сделать это в 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;
Метод SQL-инъекции все еще работает (в некоторой степени) начиная с SSMS 2017 версии 17.8.1, хотя он заключает в квадратные скобки %
символ, так что он будет интерпретировать их буквально.
Если вы используете фильтр Name->Contains, профилировщик покажет:... AND dtb.name LIKE N'%MyDatabase1%')
Итак, в поле Name->Содержит: MyDatabase1') OR (dtb.name LIKE 'MyDatabase2
следует делать это для простых случаев.
Вам повезло, я только что преодолел этот подвиг, хотя мой успех невелик, потому что вы можете фильтровать по схеме, которая позволила бы вам видеть более 1 таблицы, но вам нужно вводить текст фильтра каждый раз, когда вы хотите его изменить.
Я знаю, что это устарело, но приятно сознавать, что это может сработать, если вы просто вводите текст "фильтр".Пропустить *
или %
или любые другие стандартные поисковые символы, просто введите br_
или tbl_
или все, что вы хотите отфильтровать.