2011-11-09 6 views
0

임시 테이블을 사용하기 전에 문제가 발생하지 않았지만 현재는 저를 위해 작동하지 않습니다. 이것은SQL Server에서 임시 테이블 문제가 발생했습니다.

을 반환합니다. # 주제를 찾을 수 없음

마지막 줄부터.

scBld.CommandText = "select top 10 * into #MyTemp from elig_feeds"; 
scBld.ExecuteNonQuery(); 
scBld.CommandText = "select count(*) from #MyTemp"; 
int p = (int) scBld.ExecuteScalar(); 

"#"을 제거하면 올바르게 작동합니다.

최근에 변경된 사항은 데이터베이스의 버전 호환성 뿐이지 만 그럴 수는 없습니다. db는 2005 개발자 에디션입니다.

Thx.

+0

임시 테이블은 해당 테이블을 만든 세션 (spid)에서만 볼 수 있습니다. 연결이 변경되면 spid가 변경되어 액세스 할 수 없게됩니다. 쿼리가 끝나면 세션이 삭제되고 임시 테이블도 삭제됩니다. 반면에 전역 임시 테이블은 모든 세션에서 볼 수 있으므로 한 세션에서 세션을 생성하고 다른 세션에서 액세스 할 수 있습니다. – brian

+0

그게 사실이야, 브라이언,하지만 위의 네 줄은 동일한 SqlCommand와 같은 오픈 SqlConnection을 사용하여 표시된대로 순서대로 실행되었습니다. 열려있는 또 다른 SqlConnection이 있습니다. 작업 순서를 변경하면 이러한 테스트 문이 실행될 수 있지만 더 복잡한 SQL로 원하는 프로그램 코드가 실행되지 않았습니다. – SeaDrive

답변

1

연결이 자동으로 종료되는지 확인하십시오. 연결 설정에 따라 두 개의 다른 명령을 실행 중이며 ExecuteNonQuery()를 호출 한 후 재설정 될 수 있습니다.

은 [연결이 종료 될 때 임시 테이블이 파괴된다.]

+0

연결 해제 모드를 검색합니다. 당신은 아마 공격적으로 연결을 해제 할 것입니다. – ImplexOne

+0

연결 풀링과 관련이 있다고 생각하지만 제어하는 ​​방법을 알지 못합니다. 모든 관련 문장을 하나의 CommandText에 넣을 수있었습니다. – SeaDrive

2

I 2005 Express를 모두 사용하여 ODBC 및 OLE DB 오늘 유사한 문제가 있었다. this article에서 설명했듯이이 동작은 준비시 임시 저장 프로 시저로 래핑 된 준비된 문 사용으로 인한 것일 수 있습니다. SQL 서버 2005, SQL Server 2000 및 SQL Server 7.0

는 준비 문은 임시 개체를 만드는 데 사용 할 수 없습니다 수 없습니다 참조 임시 개체, 같은 임시 테이블을 생성 시스템 저장 프로 시저. 이 절차는 직접 실행해야합니다.

SQLExecDirect를 사용하여 직접 문을 제공하면 응용 프로그램을 수정하는 데 도움이되었습니다. 하지만 어떻게 ADO.NET에 적용해야하는지 확실하지 않습니다.

관련 문제