Попробуйте Catch SQL Server 2005 с помощью ALTER TABLE - PullRequest
1 голос
/ 07 февраля 2012

Я пытаюсь изменить некоторые таблицы с ограничениями, и для производственной среды мне нужен какой-то Try / Catch с функциями "print", а не с общими ошибками. Как я могу это сделать? Я пробовал с этим:

BEGIN TRY
My command
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT 
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();

    -- Use RAISERROR inside the CATCH block to return error
    -- information about the original error that caused
    -- execution to jump to the CATCH block.
    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );
END CATCH;

но это не работает. Я изменил имя таблицы на имя, которое не существует, и в результате получилось типичное сообщение.

Заранее спасибо

Мой источник: http://msdn.microsoft.com/en-us/library/ms178592%28v=sql.90%29.aspx

1 Ответ

2 голосов
/ 07 февраля 2012

Это работает в моем компе

Кроме того, почему вы не используете печатные сообщения?

enter image description here

edit

Согласно Microsoft:

это шаблон, в котором try catch + транзакция должна использоваться с:

BEGIN TRANSACTION;

BEGIN TRY
    -- Generate a constraint violation error.
    DELETE FROM Production.Product
    WHERE ProductID = 980;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
...