多个表我的表像LG-010-A ...,LG-010-AC ......,等等,我有ABC数据库,删除与字符串
我有一个命令行窗口:
drop table from abc where Table_Name like 'lg-010-%'
这会删除所有以lg-010-开头的表吗?
多个表我的表像LG-010-A ...,LG-010-AC ......,等等,我有ABC数据库,删除与字符串
我有一个命令行窗口:
drop table from abc where Table_Name like 'lg-010-%'
这会删除所有以lg-010-开头的表吗?
不幸的是,你不能这样做。 一种方法是:
DECLARE @TableName NVARCHAR(128)
SELECT TOP 1 @TableName = TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'lg-010-%'
ORDER BY TABLE_NAME ASC
WHILE (@@ROWCOUNT > 0)
BEGIN
PRINT 'DROP TABLE [' + @TableName + ']'
SELECT TOP 1 @TableName = TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'lg-010-%'
AND TABLE_NAME > @TableName
ORDER BY TABLE_NAME ASC
END
这将只打印出DROP TABLE语句为每个表 - 那么你可以复制并粘贴此输出,并运行它。你可以在循环中放入一个EXECUTE而不是PRINT,但我已经这样做了,所以你可以先看看发生了什么/检查输出。
尝试这样:
declare @sql varchar(max)
declare @tablenames varchar(max)
select @tablenames = coalesce(@tablenames + ', ','') + Table_Name from INFORMATION_SCHEMA.TABLES
where Table_Name like ('lg-010-%')
set @sql = 'drop table ' + @tablenames
exec (@sql)
此查询INFORMATION_SCHEMA.TABLES表检索符合条件的表名,然后将其连接在一起成一个逗号分隔的字符串。
该字符串被添加到“Drop table”语句并执行。
Drop table
可以采用多个以逗号分隔的表名。
(本来我有这个查询SYS.TABLES但一些研究显示,虽然他们目前相等,则INFORMATION_SCHEMA方法quaranteed在以后的版本中工作)
可惜你不能那样做。一种方法是:
SELECT 'DROP TABLE ' + name FROM sysobjects WHERE name LIKE '%lg-010-a%' AND [type] IN ('P')
这将只是打印出每个表的DROP TABLE语句 - 然后您可以复制并粘贴此输出并运行它。你可以在循环中放入一个EXECUTE而不是PRINT,但我已经这样做了,所以你可以先看看发生了什么/检查输出。