2013-11-21 65 views
0

我想砸在下面的腳本數據庫中的所有表:EXEC ... catch塊

WHILE EXISTS(SELECT * FROM sys.tables where is_ms_shipped = 0) 
BEGIN 
    EXEC sp_MSforeachtable 'DROP TABLE ?' 
END 

我得到很多的錯誤,因爲外鍵約束的。但是,這很好,無論如何表格都會丟失。我想用下面的腳本擺脫錯誤信息。

WHILE EXISTS(SELECT * FROM sys.tables where is_ms_shipped = 0) 
BEGIN 
    BEGIN TRY 
    EXEC sp_MSforeachtable 'DROP TABLE ?'; 
    END TRY 
    BEGIN CATCH 
    END CATCH 
END 

這個腳本只是試圖放下第一個表。 我在做什麼錯?

回答

0

我不知道有什麼不對您的查詢,但我已經使用光標這樣刪除的表:

DECLARE @name as varchar(100) 
DECLARE MyCursor CURSOR FAST_FORWARD FOR 
    SELECT name FROM sys.tables 

OPEN MyCursor 

FETCH NEXT FROM MyCursor INTO @name 

WHILE @@FETCH_STATUS = 0 
    BEGIN 

    execute('drop table ' [email protected]) 

FETCH NEXT FROM MyCursor INTO @name 
END 

CLOSE MyCursor 
DEALLOCATE MyCursor 
+0

謝謝你,但不會是仍從外鍵約束受苦? – Kimi