2012-02-15 66 views
0

我有一個很好奇的問題... 我用CONTAINSTABLE謂詞編寫了一個存儲過程;像CONTAINSTABLE謂詞在短時間內調用幾次失敗

SELECT dbo.MyTable.MyPK 
FROM dbo.MyTable INNER JOIN 
     CONTAINSTABLE(dbo.MyTable, FullTextField, 'mysearch') AS tbl1 
      ON tbl1.[KEY] = dbo.MyTable.MyPK 

如果我用SQL Server Management Studio運行這個SP,一切都好。

現在我已經準備了一個自動測試套件,用於測試我的工作在重的重量下的有效性...... 我幾次用不同的參數調用我的SP,這裏有一些問題:如果我啓動我的測試套件,它將無法返回錯誤的結果(例如,當我期待3個結果時有1個結果,等等......)。但是,如果我以調試模式啓動我的測試套件,單步執行測試代碼,則不會發生錯誤。此外,如果我發現錯誤的結果並嘗試重新執行給出錯誤結果的SP(只需在錯誤條件中放置條件斷點並在Visual Studio上拖動執行指針...),則重新執行將返回正確的結果!

我該怎麼辦?

任何想法?

非常感謝您的幫助!

再見cghersi

+0

您是否在這些測試運行中操縱全文索引?這些索引需要時間來構建,並且在相關語句完成時*不一定是完全構建的。單步/重新運行顯然會給索引操作更多時間來完成 – 2012-02-16 08:00:02

+0

這正是點!我在測試套件中添加了5秒的睡眠時間,現在一切正常。非常感謝你! – 2012-02-16 18:30:44

+0

我相信,你可以查詢系統視圖來發現索引是否是最新的 - 我不知道它們是否是我的頭頂 - 但它們會比在測試中包含固定延遲更好。 – 2012-02-16 19:09:20

回答

1

運行顯然對數據庫相同的語句不應該與所有其他條件相同的產生不同的結果。有些事情在變化。

運行SQLProfile當你踩着通過您的代碼,以確認:

  1. 你認爲你發送到數據庫的SQL是什麼是真正進入數據庫
  2. 沒有其他用戶同時更新當你正在步進的數據庫

請確保在您的配置文件跟蹤中,您可以識別您正在使用的連接(一種簡單的方法是通過設置應用程序名稱來更改您的連接字符串)。當您逐步查看代碼時,請查看配置文件跟蹤。將您在那裏看到的SQL複製到SSMS中,並直接運行以確認結果。在一天結束時,您應該能夠將其與SSMS中運行的原始TSQL分離,以找出問題所在。