Я видел немного производственного кода, который выглядит так, как будто он должен быть в порядке, и работает 80% времени, но остальные 20% перестанут возвращаться и перебирать список баз данных без видимой причины:
DECLARE c_UserDatabases CURSOR FOR
SELECT Name
FROM Sys.Databases SD (NOLOCK)
ORDER BY Name
OPEN c_UserDatabases
FETCH Next FROM c_UserDatabases INTO @v_DatabaseName
WHILE @@FETCH_STATUS = 0
BEGIN
-- Query that takes a few minutes to run (using dynamic SQL and EXEC, etc)
FETCH Next FROM c_UserDatabases INTO @v_DatabaseName
END
CLOSE c_UserDatabases
DEALLOCATE c_UserDatabases
Это на SQL Server 2008 с пакетом обновления 3 (SP3).Я заметил статьи, в которых упоминалось, что в некоторых версиях было неправильно, если вы не заказывали по имени, но ничего не указывало на это условие сбоя.Я думаю, что мы можем оказаться в редкой ситуации, потому что внутренний раздел может занять так много времени?
Я хотел бы знать, видел ли кто-нибудь еще это.Я планирую переписать его, чтобы выбрать во временную таблицу и вместо этого навести курсор на него.