Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法捕获SQL Server alter表错误_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

无法捕获SQL Server alter表错误

无法捕获SQL Server alter表错误,sql,sql-server,sql-server-2012,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 延迟名称解析后由于批处理重新编译而发生的错误无法在发生错误的同一级别捕获。一种解决方法是在动态SQL中封装DDL: BEGIN TRY

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

或者如何捕捉错误

谢谢

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

延迟名称解析后由于批处理重新编译而发生的错误无法在发生错误的同一级别捕获。一种解决方法是在动态SQL中封装DDL:

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;

延迟名称解析后由于批处理重新编译而发生的错误无法在发生错误的同一级别捕获。一种解决方法是在动态SQL中封装DDL:

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;

您可能会发现这很有用:。也许您可以验证是否已经存在。。。如果不存在,则从信息模式表约束中选择*,其中约束类型='PRIMARY'..blahIF不存在从信息模式表约束中选择*,其中约束类型='PRIMARY KEY',表名称='my_TABLE_NAME'ALTER TABLE[dbo]。[my_TABLE_NAME]添加主键[id];谢谢,它也很有用。大多数语言都有现有的控制结构,可以在不使用异常的情况下解决您的问题。不属于反模式。您可能会发现这很有用:。也许您可以验证是否已经存在。。。如果不存在,则从信息模式表约束中选择*,其中约束类型='PRIMARY'..blahIF不存在从信息模式表约束中选择*,其中约束类型='PRIMARY KEY',表名称='my_TABLE_NAME'ALTER TABLE[dbo]。[my_TABLE_NAME]添加主键[id];谢谢,它也可以工作。大多数语言都有现有的控制结构,可以在不使用异常的情况下解决您的问题,而不属于反模式