TREC ... CATCH块内的EXEC

时间:2013-11-21 11:19:45

标签: sql sql-server tsql sql-server-2012

我试图使用以下脚本删除数据库中的所有表:

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

这个脚本只是在尝试删除第一个表时永远运行。 我做错了什么?

1 个答案:

答案 0 :(得分: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 ' +@name)

 FETCH NEXT FROM MyCursor INTO @name
END

CLOSE MyCursor 
DEALLOCATE MyCursor