多個表我的表像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,但我已經這樣做了,所以你可以先看看發生了什麼/檢查輸出。