트랜잭션 내부에서 테이블을 만드는 SQL Compact 쿼리가 있습니다. 이것은 SQL Compact가 지원하지 않는 임시 테이블을 시뮬레이트해야하기 때문에 주로 발생합니다. 실제 테이블을 만든 다음 트랜잭션이 끝날 때 테이블을 삭제하여이 작업을 수행합니다.Sql Compact 및 __sysobjects
대부분이 작동합니다. 그러나 테이블을 생성 할 때 Sql Compact는 __sysobjects 테이블에서 페이지 수준 잠금을 획득하려고 시도합니다. "임시"테이블을 만드는 여러 개의 동시 쿼리가 실행중인 경우 페이지 잠금을 얻으려고하면 SqlLockTimeout 예외가 뒤 따르는 데드락이 발생할 수 있습니다.
일반 테이블의 경우 "with (rowlock)"힌트를 사용하여이 문제를 해결할 수 있습니다. 그러나, 나는 __sysobjets에 삽입 할 쿼리를 작성하지 않기 때문에 (SQL 서버는 "create table"에 대한 응답으로이를 수행합니다)이 작업을 수행 할 수 없습니다.
내가이 문제를 해결할 수있는 방법을 알고있는 사람이 있습니까?
나는 거래에서 테이블 생성을 당기는 것에 대해 생각해 보았지만, 그런 다음 정기적으로 정리해야 할 팬텀 임시 테이블의 가능성을 열었다. 이상적으로 나는 가능하면 그것을 피하고 싶습니다.
아니요. SQL compact는 테이블 변수를 지원하지 않습니다. –