我有两个版本的存储过程,并希望确保它们的输出完全相同。我的单元测试和功能测试确实验证了两个版本是否相同。但是,在现场环境中使用较新版本的proc之前,我想确保它们匹配。
我正在尝试在实时数据库的副本上执行以下操作:
很明显,在第3步之后 - T1_v1中的值也会回滚。可能是我可以将数据转储到文件中并比较文件。想知道是否有另一种方法可以进行这种匹配。
答案 0 :(得分:1)
我总是使用excel。将第一个存储过程的结果粘贴到工作表1中,将第二个存储过程的结果粘贴到第二个工作表中,并比较第三个工作表中的值。
答案 1 :(得分:1)
您的结果集有多大?
一种方法可能是声明xml变量
DECLARE @xml1 XML, @xml2 XML;
...并使用
SET @xml1=(SELECT ... FOR XML RAW) --without the "INTO SomeTable"! Same with `@xml2`
最后你可以使用
SELECT CASE WHEN CAST(@xml1 AS NVARCHAR(MAX))=CAST(@xml2 AS NVARCHAR(MAX)) THEN ...`
确保没有时间戳或其他可变内容,这当然会打扰......
您可以使用声明的表变量,只要您的作业存在并且不受回滚影响,该变量就会存在:
而不是SELECT * INTO SomeTable
使用INSERT INTO @tableVariable (col1, col2, ...) SELECT col1, col2, ... FROM ...
。
只需使用表的现有声明来创建表变量。无需手动输入所有列...