2009-09-06 3 views
0

트랜잭션 내부에서 테이블을 만드는 SQL Compact 쿼리가 있습니다. 이것은 SQL Compact가 지원하지 않는 임시 테이블을 시뮬레이트해야하기 때문에 주로 발생합니다. 실제 테이블을 만든 다음 트랜잭션이 끝날 때 테이블을 삭제하여이 작업을 수행합니다.Sql Compact 및 __sysobjects

대부분이 작동합니다. 그러나 테이블을 생성 할 때 Sql Compact는 __sysobjects 테이블에서 페이지 수준 잠금을 획득하려고 시도합니다. "임시"테이블을 만드는 여러 개의 동시 쿼리가 실행중인 경우 페이지 잠금을 얻으려고하면 SqlLockTimeout 예외가 뒤 따르는 데드락이 발생할 수 있습니다.

일반 테이블의 경우 "with (rowlock)"힌트를 사용하여이 문제를 해결할 수 있습니다. 그러나, 나는 __sysobjets에 삽입 할 쿼리를 작성하지 않기 때문에 (SQL 서버는 "create table"에 대한 응답으로이를 수행합니다)이 작업을 수행 할 수 없습니다.

내가이 문제를 해결할 수있는 방법을 알고있는 사람이 있습니까?

나는 거래에서 테이블 생성을 당기는 것에 대해 생각해 보았지만, 그런 다음 정기적으로 정리해야 할 팬텀 임시 테이블의 가능성을 열었다. 이상적으로 나는 가능하면 그것을 피하고 싶습니다.

답변

-1

#temp 테이블 대신 일반 테이블을 만드는 데 동시성 문제가있을 것이라고 생각합니다.

SQL Server Compact Edition에서 #Temp 테이블을 만들 수 없다는 것을 알지 못했습니다.

대신 테이블 변수를 사용하는 것이 어떻습니까? 그게 너에게 효과가 있니?

+0

아니요. SQL compact는 테이블 변수를 지원하지 않습니다. –

관련 문제