я имею следующую хранимую процедуру: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
Боковое примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (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] - первичный ключ. –