0

我在SQL Server中有兩個SP。 SP1在具有不同參數的循環中重複調用SP2,並將SP2的輸出保存在臨時表中。在另一個SP中重複調用SP時,在SSRS中使用的被叫SP中的臨時表中導致重複的PK名稱問題

由SP1重複調用的SP2的某些臨時表具有「未命名」主鍵。

我知道臨時表上的已命名主鍵會導致問題,因爲即使臨時表本身被刪除,有時它們也不會被刪除。

在SP2中,如果它們存在,我將在最開始時檢查並刪除SP2中的任何臨時表。

這似乎是在SSMS內完全正常工作,但是當我在SSRS中使用SP1時,它幾次在PK名稱違規中引發SP2錯誤。

無法在對象#tempTable中插入重複鍵。

是否有解決此問題的方法?

+0

如果要將重複值插入臨時表中,那麼爲什麼要將該列設置爲PK?看起來這裏的答案是在創建臨時表時避免這種指定,但如果您可以給出臨時表和循環代碼的結構示例,這將會很有幫助。 –

回答

0

不要在臨時表上定義主鍵。主鍵約束強制唯一性。相反,創建一個聚集索引。您仍然可以獲得查詢的性能優勢,但不會出現重複的數據錯誤。

很可能有重複的行被生成,因此請注意輸出中的重複數據。

解決了重複數據問題後,您可以恢復主鍵以確保將來出現重複數據錯誤,或將其保留爲聚集索引,並希望報表使用者注意數據是否存在再次被複制。

+0

輸出應該是唯一的,這就是爲什麼我使用PK。儘管我的測試數據集中仍然有重複的數據,但是如果有任何重複的數據,那麼這個SP在SSMS中也不應該正常運行。奇怪的是,在SSRS中,這個SP爲這個錯誤提供了相同的參數以及在SSMS中運行正常的相同測試數據集。 –

+0

臨時刪除主鍵以查看正在複製的數據。這是確定如何獲取重複內容以及解決問題所需的第一步。 –