Я использую Microsoft SQL Server 2008. Мой вопрос: как отбросить несколько таблиц с общим префиксом в одном запросе?
что-то вроде этой таблицы имен:
LG_001_01_STLINE,
LG_001_02_STFICHE
Я использую Microsoft SQL Server 2008. Мой вопрос: как отбросить несколько таблиц с общим префиксом в одном запросе?
что-то вроде этой таблицы имен:
LG_001_01_STLINE,
LG_001_02_STFICHE
Вы можете создать строку, используя представления каталога, например:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += '
DROP TABLE '
+ QUOTENAME(s.name)
+ '.' + QUOTENAME(t.name) + ';'
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
PRINT @sql;
-- EXEC sp_executesql @sql;
Конечно, есть потенциальные ошибки, например, если эти таблицы имеют отношения внешнего ключа, вам нужно либо сначала удалить их, либо упорядочить вывод, чтобы удалить таблицы в определенном порядке.
Чтобы просто получить список таблиц, используйте:
SELECT s.name, t.name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
Я запустил этот запрос, а затем вставил результаты обратно в окно запроса, чтобы удалить все таблицы:
Если вы хотите удалить все таблицы, но сохраните таблицы с именами, которые начинаются с A, B, C или D:
источник
Это позволяет вам удалить гораздо большее количество таблиц.
источник
Мне нравится тот, который я написал:
источник
STATIC
и / илиLOCAL FAST_FORWARD
] ( sqlperformance.com/2012/09/t-sql-queries/cursor-options ). (3) Вы не должны использовать устаревшие представления обратной совместимости, такие какsysindexes
. (4) Ваш сценарий предполагает, что все таблицы находятся вdbo
схеме (или, что еще хуже, схема по умолчанию для исполняющего пользователя, чего может даже не бытьdbo
).Это можно сделать
execute
следующим образом:источник
dbo
, и 2) имена никогда не могут содержать a]
- оба из них вполне могут быть верными в случае OP, но это все равно будет хорошим Идея упомянуть эти предположения, потому что вытекающие из них предостережения могут быть не совсем очевидны для других людей. Тем не менее, как я сказал в начале, моя главная проблема с этим ответом заключается в том, что он просто повторяет уже существующее предложение, не добавляя никакой новой ценности.Запустите вышеуказанный запрос и сохраните результаты в CSV. Затем откройте этот CSV в блокноте. Затем нажмите Ctrl + H, чтобы заменить схему на DROP TABLE SCHEMA, которая выдаст вам все запросы на удаление, скопируйте и вставьте этот большой sql в ваш инструмент sql и выполните
если ваши результаты
после замены это будет выглядеть так
источник
PRINT
утверждение. Чем ваш ответ лучше, чем ответ с наибольшим количеством голосов?