Получить все таблицы в базе данных SQL Server, кроме некоторых выбранных?

#sql-server #tsql

#sql-server #tsql

Вопрос:

Я хочу отобразить имена всех таблиц в базе данных сервера MySQL, за исключением трех выбранных. В MySQL я использовал запрос типа:

 SHOW TABLES FROM "   self.databaseName   " WHERE tables_in_"   self.databaseName   " NOT LIKE 'shots' AND tables_in_"   self.databaseName   " NOT LIKE 'conditions' AND tables_in_"   self.databaseName   " NOT LIKE 'analysis'"
  

Есть ли эквивалент в SQL Server?

Комментарии:

1. Рассмотрите возможность использования представлений каталога в INFORMATION_SCHEMA схеме. Тот же запрос будет работать в MySQL, SQL Server и других продуктах СУБД, поддерживающих стандартные представления ISO.

Ответ №1:

Используйте системные таблицы:

 SELECT s.[name] AS SchemaName,
       t.[name] AS TableName
FROM sys.schemas s
     JOIN sys.tables t ON s.schema_id = t.schema_id
WHERE t.[name] NOT IN (N'Table1',N'Table2','Table3');
  

Вы также можете использовать INFORMATION_SCHEMA объекты, но в документации предлагается использовать sys объекты:

 SELECT T.TABLE_SCHEMA,
       T.TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES T
WHERE T.TABLE_NAME NOT IN (N'Table1',N'Table2','Table3')
  AND T.TABLE_TYPE = N'BASE TABLE';
  

Обратите внимание, что если таблицы, которые вы хотите исключить, находятся в определенных схемах, и у вас есть объекты с одинаковыми именами в разных схемах, которые вы не хотите исключать, вам нужно будет использовать AND предложения в WHERE :

 WHERE NOT(s.[name] = N'dbo' AND t.[name] = N'Table1')
  AND NOT(s.[name] = N'test' AND t.[name] = N'Table3')
  AND NOT(s.[name] = N'usr' AND t.[name] = N'Table2')