既不引发错误也不完成规定行为的 TSQL 过程

TSQL procedure that neither raises an error nor completes prescribed behaviour

概览

我编写了一个更改列类型并对其应用唯一约束的过程。该过程成功执行并完成,但是,既没有更改列类型,也没有应用唯一约束。当我 SELECT @tsql 检查生成的语句并 运行 在 Azure Data Studio 中它们工作正常。同样,在任何时候都不会引发错误。

我使用的数据库服务是AzureSQL数据库实例.

程序

CREATE PROCEDURE [dbo].[usp_aProcName]
    @tableName NVARCHAR(250),
    @fieldName NVARCHAR(250)
AS
    BEGIN TRY
        DECLARE @tsql VARCHAR(MAX) = N'ALTER TABLE my_schema.'+@tableName+' ALTER COLUMN '+@fieldName+' INT NOT NULL;';
        EXECUTE sp_executesql @tsql;
        
        SET @tsql = N'ALTER TABLE my_schema.'+@tableName+' ADD CONSTRAINT AK_'+@tableName+'_'+@fieldName+' UNIQUE ('+@fieldName+');';
        EXECUTE sp_executesql @tsql;
        
        RETURN 0;
    END TRY
    BEGIN CATCH
        RETURN @@ERROR;
    END CATCH
;

有什么想法吗?

正在解决运行时错误;

动态 SQL 必须分配给 NVARCHARNCHARNTEXT 类型,不是 VARCHAR尽管在异常情况下返回 @@ERROR,但错误已被捕获 但未显示在 Azure Data Studio 中。

错误旨在返回到编排层(Azure 数据工厂)并存储在另一个数据库中。错误处理改造(这是一个模拟);

CREATE PROCEDURE [dbo].[usp_aProcName]
    @tableName NVARCHAR(250),
    @fieldName NVARCHAR(250)
AS
    BEGIN TRY
        BEGIN TRAN TranName;
        DECLARE @tsql VARCHAR(MAX) = N'ALTER TABLE my_schema.'+@tableName+' ALTER COLUMN '+@fieldName+' INT NOT NULL;';
        EXECUTE sp_executesql @tsql;
        
        SET @tsql = N'ALTER TABLE my_schema.'+@tableName+' ADD CONSTRAINT AK_'+@tableName+'_'+@fieldName+' UNIQUE ('+@fieldName+');';
        EXECUTE sp_executesql @tsql;
        
        COMMIT TRAN TranName;
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN TranName;
        SELECT
            OBJECT_NAME(@@PROCID) AS [ProcedureName],
            ERROR_MESSAGE() AS [ErrorMessage],
            ERROR_NUMBER() AS [ErrorNumber],
            ERROR_LINE() AS [ErrorLine],
            ERROR_SEVERITY() AS [ErrorSeverity],
            ERROR_STATE() AS [ErrorState]
        ;
    END CATCH
;