2015-10-09 39 views
1

我需要在單個數據庫上的幾個存儲過程之間進行單元測試結果(不同結果集之間的某些值應該是相同的)。另外,我需要能夠複製這些單元測試,以便在我選擇開始測試時,幾個相同的數據庫將以相同的方式執行單元測試。幾個存儲過程之間的單元測試結果?

我想使用OpenRowSet轉儲這些結果到臨時表,然後比較這些表,可能使用我可以每週執行一次的存儲過程。

在配置服務器之前,讓這個有沒有什麼理由不使用OpenRowSet?如果是的話,我還有什麼其他的選擇?

+0

當您說單個數據庫包含存儲過程但由其他幾個執行時,您的意思不清楚。你用什麼來執行單元測試? –

+0

我們有幾個相同的數據庫。如果這些數據庫可以執行例行的自我檢查,我希望它。理想情況下,我可以管理多個數據庫執行的單個測試。如果我說,一個存儲過程,我可以簡單地編寫一個'CREATE'語句並在所有數據庫上運行它,這樣我就可以在任何時候調用它,這將是一個可靠的解決方案。我基本上是問我在想什麼是一個很好的方法來做到這一點,或者如果它是安全明智的風險太大。 –

+0

查看http://tsqlt.org/ – sarin

回答

1

不使用OpenRowSet的主要原因是您不需要使用它。既然你想做測試,你應該使用測試框架。我是DbFit的粉絲(http://dbfit.github.io/dbfit/)。您的測試與您的數據庫完全隔離。這是很容易設置和修改。你甚至可以比較兩個存儲過程之間的結果集。自動化非常簡單。創建小節很容易,只能在特定小節或單個測試中運行測試。您可以使用DML語句進行測試,並且在測試結束時,所有內容都會回滾。您可以使用變量從查詢或過程中獲取數據,並將其用於後續的調用/查詢中。

1

那麼...也許使用單元測試框架對你來說太過分了。如果你不想走那麼遠,請嘗試下面的內容。

MSDN OpenRowset「是訪問鏈接服務器中的表的替代方法,它是通過使用OLE DB連接和訪問遠程數據的一次性臨時方法」。您已經聲明同一臺服務器上有多個數據庫(即沒有鏈接的服務器)。因此OpenRowSet似乎是矯枉過正。您仍然可以通過使用「Select Into」語句在新的單元測試數據庫中創建數據表(我不會在您的prod數據庫中建立測試表)中獲得批量性能提升。這將有一個存儲過程,使用3或4部分命名來調用每個單獨的數據庫。如果你真的想要你可以有一個數據庫\存儲過程的表,並使用動態SQL來執行它們。一旦你有所有的數據,你存儲的proc只需要比較它們。

0
  • 另一種方法是在存儲的 過程中引入一種ReturnType,或使用現有參數發送該值。
  • 當返回類型設置爲「INSERT_RESULTS_TO_TEST」或一些這樣的, 然後有存儲過程的最後的return語句,插入 記錄到被設計用於測試的測試表,而不是他們 默認返回。
  • 如有必要,請在測試表中添加其他列,以指示 哪個服務器,哪個數據庫,哪個存儲過程正在生成 結果。說調用這些ResultSetID。
  • 然後,爲了便於比較,請在測試表 上使用自連接來比較不同ResultSetID之間的值。