괜찮은 것처럼 보이고 80 %의 시간 동안 작동하는 약간의 프로덕션 코드를 보았지만 나머지 20 %는 반환을 멈추고 명백한 이유가없는 데이터베이스 목록 :데이터베이스에서 커서를 건너 뛰는 sys.databases
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 SP3에 있습니다. 나는 당신이 이름으로 주문하지 않았다면 그것을 언급하는 기사를 보았습니다 만, 어떤 버전에서는 iffy 였지만이 실패 조건을 나타내는 것은 아무것도 아닙니다. 나는 내부 섹션이 너무 오래 실행될 수 있기 때문에 드문 상황에 처한 것 같아요?
다른 사람이 본 적이 있는지 알고 싶습니다. 대신 그것을 통해 임시 테이블과 커서로 선택하여 다시 작성 계획입니다.
왜 SYS.DATABASES에서 NOLOCK을 사용하고 있습니까?! –
코드를 작성하지 않았습니다. 하지만 장기 실행 중에 사용자/로그인 테이블의 장기 실행 커서가 로그인을 방해하는 문제를 엿 들었습니다. 그런 다음 세이프 가드 (safeguard)로 추가되었을 수 있습니다. 왜 묻는거야. –