You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DW迁移至Synapse:专用SQL池@@变量(@@error、@@rowcount等)失效求替代方案

DW到Synapse专用SQL池迁移:@@error、@@rowcount的替代方案

替代@@rowcount的方案

Synapse专用SQL池不支持@@rowcount,但可以使用ROWCOUNT_BIG()函数实现相同功能,该函数返回bigint类型的受影响行数,支持更大的数值范围,用法需紧跟在目标语句之后。

示例代码:

-- 执行数据操作语句
UPDATE sales SET amount = amount * 1.1 WHERE region = 'North';
-- 获取受影响行数
DECLARE @affectedRows BIGINT = ROWCOUNT_BIG();
PRINT '更新操作影响行数: ' + CAST(@affectedRows AS VARCHAR(20));

替代@@error的方案

Synapse专用SQL池不支持@@error,推荐使用TRY...CATCH错误处理结构捕获并处理执行错误,通过以下内置函数获取详细错误信息:

  • ERROR_NUMBER():返回错误编号
  • ERROR_MESSAGE():返回错误描述信息
  • ERROR_SEVERITY():返回错误严重级别
  • ERROR_STATE():返回错误状态码

示例代码:

BEGIN TRY
    -- 执行可能抛出错误的操作
    INSERT INTO customer (id, email) VALUES (1001, 'invalid-email');
END TRY
BEGIN CATCH
    -- 捕获并处理错误
    DECLARE @errNum INT = ERROR_NUMBER();
    DECLARE @errMsg NVARCHAR(4000) = ERROR_MESSAGE();
    
    PRINT '执行出错: 编号=' + CAST(@errNum AS VARCHAR(10)) + ', 信息=' + @errMsg;
    -- 可选:将错误记录到日志表
    INSERT INTO error_log (error_time, error_number, error_message)
    VALUES (GETDATE(), @errNum, @errMsg);
END CATCH

注意事项

  • ROWCOUNT_BIG()必须直接跟在需要统计行数的语句之后,中间不能插入任何其他执行语句,否则会返回后续语句的受影响行数。
  • 在TRY...CATCH块中,只有当TRY块内的语句触发错误时才会进入CATCH块,可根据业务需求添加事务回滚、告警触发等逻辑。

内容的提问来源于stack exchange,提问作者Sankar M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:42:41