문제

DB1과 DB2라는 2 개의 데이터베이스가 있습니다.
DB1에는 DB2의 데이터에도 액세스하는 모든 저장된 절차가 포함되어 있습니다.
DB1은 동의어를 사용하여 DB2의 테이블에 액세스합니다.
(동의어 사용은 우리 상황에서 요구 사항입니다)

이것은 SQL Server 2005 Developer Edition의 모든 상황에서 완벽하게 작동합니다.

그러나 Express Edition에서는 다음을 수행 할 때 예외가됩니다.
1 SQL Server를 다시 시작합니다
2 DB1 내에서 다음 코드를 실행합니다.

트랜잭션 격리 레벨 스냅 샷을 설정하십시오
거래를 시작하십시오
@squery varchar (max) 선언
set @squery = 'syntoSometableIndb2에서 선택 *'
exec (@squery)
거래를 커밋합니다

이렇게하면 다음 오류가 발생합니다.

현재 트랜잭션이 시작될 때 데이터베이스가 복구되지 않았기 때문에 데이터베이스 '...'에서 스냅 샷 격리 트랜잭션이 실패했습니다. 데이터베이스가 복구 된 후 거래를 다시 시도하십시오.

EXEC없이 사용하거나 개발자 에디션에서 실행될 때 동일한 선택 쿼리가 정상적으로 전달됩니다.
1 단계에서 서버를 다시 시작하는 것이 DB2에 연결되면 SQL Server Express Edition에서도 코드가 잘 실행되므로 중요합니다.

누구든지 이것이 무엇인지 생각이 있습니까? 동적 쿼리에 Exec를 사용할 수 있어야합니다. 우리는 이미 MSDN을 확인하고 Google을 검색했습니다. 도움을 주셔서 감사합니다.

--- 편집 : 3 월 10 일 09
아래의 Ed Harper와 논의한 바와 같이, 나는 이것에 대한 버그 보고서를 제출했습니다.
보다 https://connect.microsoft.com/sqlserver/feedback/viewfeedback.aspx?feedbackid=422150

도움이 되었습니까?

해결책

발견 한 바와 같이 Microsoft Connect, 문제는 기본적으로 SQL Server Express Edition에서 auto_close 옵션이 설정됩니다 진실.
이 옵션을 변경합니다 거짓 문제를 해결합니다.

다른 팁

오류 메시지는 쿼리를 실행할 때 서비스 재시작 후에 SQL Server가 여전히 데이터베이스를 복구하고 있기 때문에 쿼리가 실패 함을 나타냅니다.

서비스가 다시 시작된 이후 경과 한 시간에 관계 없이이 코드를 실행하려는 첫 번째 시도에서 오류가 항상 발생합니까?

재시작 후 데이터베이스가 올바르게 복구되고 있는지 SQL Server 로그에서 확인할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top