2009-04-12 5 views
2

내가 두 TSQL의 EXEC 문 TSQL은

EXECUTE (N'MyDynamicallyGeneratedStoredProcedure') -- return 0 on success 
SELECT @errCode = @@ERROR ; 

IF (@errCode = 0) 
BEGIN 
    EXEC 'A Sql Statement using ##temptable created from first', @returnValue 
END 

가 어떻게 두 EXEC의 동기해야합니까 한 동기 EXECUTE 문을 만들? ; 현재 두 번째 EXEC는 첫 번째 EXECUTE가 완료되기를 기다리지 않습니다. WaitFor Delay를 시도했으나 기다렸지 만 두 번째 EXEC 명령문은 결코 되돌아 가지 않습니다.

감사합니다. 먼저 실행

  1. 글로벌 임시 테이블을 생성하고 복잡한 SELECT 쿼리에서 채 웁니다 :

    업데이트, 여기에 추가 정보를 원하시면입니다.

  2. 두 번째 EXEC는 최근에 작성되고 채워진 전역 온도 테이블의 변수를 기반으로 동적 SP를 생성하는 CLR 저장 프로 시저입니다.

이제 두 번째 EXEC에서 전역 임시 테이블을 찾을 수 없다는 메시지가 표시됩니다.

업데이트 2는이 문제 (그리고 그 날!)

GBN (및 기타)를 발견 한 것은 대답에 빈 점이었다. EXEC는 동기식입니다. 문제가 있습니까? 문제 자체에 대한 이해 ..이 나는

  1. (N'MyDynamicallyGeneratedStoredProcedure를 ')을 실행 언급했다 - 그것은 있었어야

성공 수익률 0 :

1의 (a)을 실행을 (N'CreateMyDynamicStoredProcedure ') - 성공 복귀 0

1 (b) (N'MyDynamicStoredProcedure EXECUTE') - 성공 복귀 0

,

나는 1 (b)가 실제로 어딘가에 그리고 단계 (2) 후에 실행되지 않았다.

(I 생명을 얻을 가야한다!)

+0

난 당신이 다른 문제가 의심 글로벌 임시 수명주기에이 게시물을 참조하십시오. EXECUTE가 동기입니다. –

+0

"순차적"이라는 뜻입니까? 명령은 순차적 일 것입니다 ... – MatBailie

+0

미치와 동의하십시오. 좀 더 자세한 정보를 제공해 주시겠습니까? –

답변

5

EXECUTE가 sychronous입니다. 두 번째는 첫 번째 이후에 실행됩니다. 항상.

동일한 코드를 실행하는 연결이 여러 개 있습니까? 모든 연결에서 볼 수있는 전역 임시 테이블을 사용하고 있으므로 asyncc 실행과 유사 해 보일 수 있습니다 ...

1

gbn's answer은 지적했듯이 EXECUTE는 동기식입니다.

CRL 저장 프로 시저 내의 SQL 연결 개체가 일괄 처리 스크립트와 동일한 컨텍스트에 있지 않을 수 있습니다. 글로벌 임시 테이블이 여기에 "context connection=true" 를 전달하여 EXECUTE (N'MyDynamicallyGeneratedStoredProcedure')

당신이 당신의 SQLConnection 객체를 만들 수 있는지 확인 실행 한 후 삭제 된해야 사람이 SQLConnection을 동일한 연결 컨텍스트에서하지 이후 임시 테이블에 액세스하는 유사한 문제를했다 post answer입니다.

Accessing TSQL created #temp tables from CLR stored procedure. Is it possible?

두 번째 CRL 저장 프로 시저가 다른 연결을 통해 실행하는 경우, CRL의 sproc에 그것을 삭제 된해야하기 때문에 글로벌 임시 테이블에 액세스 할 수 없습니다. 합니다 (gloal 온도가 제거 될 때)


Deleting Global Temporary Tables (##tempTable) in SQL Server