#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')