2010-01-05 61 views
2

多個表我的表像LG-010-A ...,LG-010-AC ......,等等,我有ABC數據庫,刪除與字符串

我有一個命令行窗口:

drop table from abc where Table_Name like 'lg-010-%' 

這會刪除所有以lg-010-開頭的表嗎?

回答

0

不幸的是,你不能這樣做。 一種方法是:

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

4

嘗試這樣:

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在以後的版本中工作)

1

可惜你不能那樣做。一種方法是:

SELECT 'DROP TABLE ' + name FROM sysobjects WHERE name LIKE '%lg-010-a%' AND [type] IN ('P') 

這將只是打印出每個表的DROP TABLE語句 - 然後您可以複製並粘貼此輸出並運行它。你可以在循環中放入一個EXECUTE而不是PRINT,但我已經這樣做了,所以你可以先看看發生了什麼/檢查輸出。