2009-04-12 106 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