无法捕获SQL Server alter table错误

Roc*_*ock 1 sql sql-server sql-server-2012

这是一个非常简单的代码,但它无法捕获错误.

或者如何捕获错误?

谢谢.

BEGIN TRY
    ALTER TABLE [dbo].[my_table_name] 
    ADD PRIMARY KEY ([id]);
END TRY
BEGIN CATCH
    PRINT 'Primary Key already exists. '
END CATCH
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

在延迟名称解析后因批量重新编译而发生的错误无法在错误发生的同一级别捕获.一种解决方法是将DDL包装在动态SQL中:

BEGIN TRY
    EXEC(N'ALTER TABLE [dbo].[my_table_name] ADD PRIMARY KEY ([id]);');
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() = 1779
    BEGIN
        --handle expected errors
        PRINT 'Primary Key already exists. ';
    END
    ELSE
    BEGIN
        --raise other unexpected errors
        THROW;
    END;
END CATCH;
Run Code Online (Sandbox Code Playgroud)