我的情况是:DBname:后端用户每次创建一组新的词汇表项目(即1000、10001、10002 ...)时,由序列号创建的组和临时表。如何删除具有序列号> 10002?
我需要使用表名称> 1002的条件删除表。
答案 0 :(得分:1)
在Sql Server中,最简单的方法可能是使用information_schema.tables
生成动态sql:
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
等)
在丹·古兹曼(Dan Guzman)评论之后-更好的实现方式是将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;