我有以下存儲過程:SQL Server存儲過程的隨機故障
CREATE PROCEDURE [dbo].[sp_cache_remove]
@Key NVARCHAR(450)
AS
BEGIN
--Clean up first
DELETE FROM Cache WHERE Expire <= GETUTCDATE()
DECLARE @Result NVARCHAR(MAX)
SELECT TOP 1 @Result = Value
FROM Cache
WHERE [Key] = @Key AND
Expire > GETUTCDATE()
DELETE FROM Cache WHERE [Key] = @Key
SELECT @Result
END
這一個隨機失敗。當我將第一行註釋掉(DELETE FROM...
)時,它工作正常。這隻發生在生產服務器上,因此獲取更多錯誤細節是不可能的。有人可以在這裏找出任何可能的問題嗎?
編輯:還有其他存儲過程添加,獲取等可能有死鎖或什麼?
定義 「失敗」。我能看到的唯一的錯誤是沒有ORDER BY – LoztInSpace
的「TOP」。注意:你不應該爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –
@LoztInSpace:我有一個try/catch塊,它捕獲一個SqlException,並顯示它失敗。 TOP不應該是一個問題,因爲我有一個WHERE子句,[Key]是主鍵。 –