2009-04-12 107 views
2

我有兩個TSQL語句EXECTSQL使EXECUTE語句同步

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的同步? ;現在第二個EXEC不會等待第一個EXECUTE完成。我嘗試發出WaitFor Delay,它等待着,但第二個EXEC語句永遠不會回退。

謝謝。

更新,下面是詳細信息:

  1. 首先執行創建一個全局臨時表,並從複雜的SELECT查詢填充它。
  2. 第二個EXEC是一個CLR存儲過程,它根據最近創建和填充的全局臨時表的變量生成一個動態SP。

現在第二個EXEC,抱怨沒有找到全局臨時表。

更新2,發現問題(和它的我!)

GBN(及其他)爲點對答案的空白。 EXEC IS是同步的。問題?我對這個問題本身的認識。我曾提到

  1. EXECUTE(N'MyDynamicallyGeneratedStoredProcedure') - 在成功返回0

它應該是:

1(a)執行(N'CreateMyDynamicStoredProcedure ') - 成功返回0

圖1(b)EXECUTE(N'MyDynamicStoredProcedure') - 成功返回0

我錯過了1(b)實際上是在其他地方執行並且在步驟(2)之後。

(我應該去獲得生命!!)

+0

我懷疑你有一些其他的問題。 EXECUTE是同步的 – 2009-04-12 16:04:47

回答

5

EXECUTE是同步的。第二個在第一個之後運行。總是。

你有多個連接運行相同的代碼?您正在使用一個全局臨時表,它將對所有連接都可見,因此它可能看起來像是asyncc執行...

1

由於gbn's answer已經指出,EXECUTE是同步的。

問題可能是您的CRL存儲過程中的SQL連接對象與批處理腳本不在同一個上下文中。您的全局臨時表應該已經通過傳遞"context connection=true" 這裏運行EXECUTE (N'MyDynamicallyGeneratedStoredProcedure')

確保您創建SQLConnection對象後回落是post answer如果有人有類似的問題訪問臨時表,因爲的SQLConnection是不是在同一個連接上下文。

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

如果你的第二個CRL存儲過程通過不同的連接運行,CRL存儲過程將不能夠因爲它應該已經降到了訪問全局臨時表。

參考這個職位上全局臨時生命週期(當gloal溫度被降低)
Deleting Global Temporary Tables (##tempTable) in SQL Server