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

tSQLt技术问询:如何检查表中数值是否按指定幅度变化?

在tSQLt中校验表间数值的幅度变化

首先明确一点:tSQLt.AssertEqualsTable 只能做精确的逐行逐列匹配,没办法直接校验数值的变化幅度(比如Balance差值在±100范围内)。不过你提到的用常规SQL逻辑实现的思路是完全可行的,而且我们可以把它和tSQLt的测试命令结合得更贴合框架用法。

具体实现步骤

  • 第一步:关联两张表,计算Balance的差值,筛选出变化幅度超出±100的记录,存入临时表
  • 第二步:用tSQLt的AssertEmptyTable命令断言这个临时表为空——如果有记录,说明存在不符合要求的Balance变化,测试会直接失败

示例代码

CREATE PROCEDURE [TestBalanceValidation].[Test_BalanceChangesAreWithinAllowedRange]
AS
BEGIN
    -- 1. 筛选出Balance变化超出±100的账户
    SELECT 
        a.AccID,
        a.Balance AS OriginalBalance,
        b.Balance AS UpdatedBalance,
        ABS(a.Balance - b.Balance) AS BalanceChangeAmount
    INTO #UnacceptableChanges
    FROM TableA a
    INNER JOIN TableB b 
        ON a.AccID = b.AccID
    WHERE ABS(a.Balance - b.Balance) > 100;

    -- 2. 断言没有不符合要求的记录
    EXEC tSQLt.AssertEmptyTable '#UnacceptableChanges';
END;

额外说明

  • 使用AssertEmptyTable比自己判断记录数更符合tSQLt的测试风格,当测试失败时,它会自动返回临时表中的所有异常记录,帮你快速定位哪些账户的Balance变化超标
  • 如果需要更自定义的失败提示,也可以先统计异常记录数,再用tSQLt.AssertEquals断言记录数为0,比如:
DECLARE @InvalidCount INT;
SELECT @InvalidCount = COUNT(*) FROM #UnacceptableChanges;
EXEC tSQLt.AssertEquals 0, @InvalidCount, '存在Balance变化超出±100的账户';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:38:22