В Sql Server самым простым способом, вероятно, будет генерирование динамического sql с использованием information_schema.tables
:
DECLARE @Sql nvarchar(4000) = ''; -- you might need max instead of 4000 here...
SELECT @Sql = @Sql + 'DROP TABLE '+ TABLE_NAME +';'
FROM information_schema.tables
WHERE TABLE_NAME LIKE 'glossary_items%'
AND CAST(REPLACE(TABLE_NAME, 'glossary_items_', '') As int) > 1002;
EXEC(@Sql)
Предполагая, что имена таблиц glossary_items_XXXX
, где XXXX
- это число
(т. е. glossary_items_1000
, glossary_items_1001
и т. д.)
После комментария Дэна Гузмана - лучшая реализация будет использовать for xml
для версии 2016 (или более ранней):
SET @Sql = (
SELECT 'DROP TABLE '+ TABLE_NAME +';'
FROM information_schema.tables
WHERE TABLE_NAME LIKE 'glossary_items%'
AND CAST(REPLACE(TABLE_NAME, 'glossary_items_', '') As int) > 1002;
FOR XML PATH('')
)
или string_agg
для версии 2017 (или более поздней):
SELECT @Sql = STRING_AGG('DROP TABLE '+ TABLE_NAME, ';')
FROM information_schema.tables
WHERE TABLE_NAME LIKE 'glossary_items%'
AND CAST(REPLACE(TABLE_NAME, 'glossary_items_', '') As int) > 1002;