簡體   English   中英

使用表比較兩個版本的存儲過程的輸出

[英]Comparing output of two versions of a stored procedure using a table

我有兩個版本的存儲過程,並希望確保它們的輸出完全相同。 我的單元測試和功能測試確實驗證了兩個版本是否相同。 但是,在實時環境中使用較新版本的proc之前,我想確保它們匹配。

我正在嘗試在實時數據庫的副本上執行以下操作:

  1. 開始交易。
  2. 調用存儲過程sproc_v1(內部proc修改表T1)。
  3. 在T1的T1_v1中選擇*(條件是過濾掉受sproc_v1影響的那些行)
  4. 回滾事務(以便我具有運行V2的相同初始條件
  5. 調用存儲過程sproc_v2
  6. 從T1選擇*進入T1_v2

顯然,在第3步之后-T1_v1中的值也會回滾。 也許我可以將數據轉儲到文件中並進行比較。 想知道是否還有另一種方式可以進行這種匹配。

我總是為此使用excel。 將第一個存儲過程的結果粘貼到工作表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 ...

只需使用表的現有聲明來創建表變量。 無需手動輸入所有列...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM