SQL Server - 比较输出多个表的两个存储过程的结果

时间:2015-06-19 22:30:05

标签: sql-server

因此,类似于"SQL Server compare results of two queries that should be identical",我需要比较两个存储过程的输出,以确保新版本生成与旧版本等效的输出。棘手的部分是我的SP输出六张不同宽度的表。

我开始编写它们的混合版本,可以单独比较每个表格,但它是一个非常复杂的SP,所以我希望有一个更简单的方法。

我尝试在链接问题中使用EXCEPT,但看起来只会将一个表与另一个表进行比较。

3 个答案:

答案 0 :(得分:3)

简易选项1:将存储过程结果输出到文本文件(每个过程版本一个),并使用diff工具/编辑器确保它们是相同的。

简易选项2:将存储过程结果写入表/临时表(每个过程按返回表)并编写sql以比较结果。只计算每个结果表中的行,然后计算两个表的并集(不是union all)。对每个结果表重复一次。

答案 1 :(得分:1)

我唯一能想到的是为你的两个(新/旧)存储过程添加一个额外的参数来处理它应该返回的结果。

Exec usp_proc @var1 , @var2 , @ResultSet = 1

上面的执行应该返回第一个结果集,如果你传递@ResultSet = 2它应该返回第二个结果集等等......

使用两个存储过程执行此操作,然后逐组比较结果集(使用except将执行此操作)。

答案 2 :(得分:0)

您可以非常轻松地在.NET(C#或VB)中捕获多个结果集。您可以创建DataAdapterDataSet,并使用DataAdapter.Fill()方法填充DataSet。每个结果集将在DataTable内存储为DataSet。然后,您只需遍历每个DataTables中的DataSet集合并进行比较。您可以在此MSDN页面上找到更多信息:Populating a DataSet from a DataAdapter

如果要将其作为存储过程或用户定义的函数运行,可以在SQLCLR中完成,或者它可以是独立的控制台应用程序。将它作为SQLCLR存储过程运行是非常方便的,但考虑到您将存储所有6个结果集的所有结果,并且对于您正在测试的两个存储过程,可能需要太多内存。在这种情况下,控制台应用程序是最佳选择。