2013-11-21 3 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

관련 문제