tSQLt 专家能否介绍测试一种不返回任何内容但在表中执行字段更新的存储过程的方法?我了解如何测试从函数或 SP返回的结果,但是在就地更新的情况下,如果过程具有硬编码的表名,我如何使测试针对假表与实际表运行? 我能想到的唯一办法就是让整个SP使用动态SQL,并把表名作为参数传进去,但是这样会让代码的可读性降低,更脆。有没有更好的办法?下面是一个简单的存储过程,它查看 2 个其他字段:TransactionDate 和 ENdOfDropDate,并根据条件的结果将同一个表中名为“IsWithinAddDrop”的第三个字段设置为 True 或 False。
create table tblT1
(
ID [bigint] IDENTITY(1,1) NOT NULL,
TransactionDate [datetime2](7) NULL,
EndOfDropDate [datetime2](7) NULL,
IsWithinAddDrop [nvarchar](10) NULL
)
insert into tblT1 (TransactionDate, EndOfDropDate) values ('1/1/2016', '2/1/2016')
insert into tblT1 (TransactionDate, EndOfDropDate) values ('2/1/2016', '1/2/2016')
insert into tblT1 (TransactionDate, EndOfDropDate) values ('3/1/2016', '3/1/2016')
create procedure spUpdateIsWithinAddDrop
as
begin
Update t1
set t1.IsWithinAddDrop =
(case
when t1.TransactionDate <= t1.EndOfDropDate then 'True'
else 'False'
end)
from tblT1 t1
end
exec spUpdateIsWithinAddDrop
结果是我要测试的表中更新的 IsWithinAddDrop 列:
TransactionDate EndOfDropDate IsWithinAddDrop
2016-01-01 2016-02-01 True
2016-02-01 2016-01-02 False
2016-03-01 2016-03-01 True
谢谢!