我有两个TSQL EXEC语句
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语句永远不会退回。
感谢。
更新,以下是更多信息:
现在第二个EXEC,抱怨找不到Global Temp表。
更新2,发现问题(和我一样!!)
GBN(和其他人)在答案上一点空白。 EXEC是同步的。问题?我对问题本身的理解......我曾提到
应该是:
1(a)EXECUTE(N'CreateMyDynamicStoredProcedure') - 成功时返回0
1(b)执行(N'MyDynamicStoredProcedure') - 成功时返回0
我错过了1(b)实际上在其他地方执行并且在步骤(2)之后执行。
(我应该去生活!!)
答案 0 :(得分:5)
EXECUTE是同步的。第二个在第一个之后运行。总是
您是否有多个连接运行相同的代码?您正在使用一个对所有连接都可见的全局临时表,因此它可能看起来像asyncc执行...
答案 1 :(得分:1)
正如gbn's answer指出的那样,EXECUTE是同步的。
问题可能是CRL存储过程中的SQL Connection对象与批处理脚本不在同一上下文中。运行EXECUTE (N'MyDynamicallyGeneratedStoredProcedure')
确保通过传递"context connection=true"
来创建SQLConnection对象
这是post answer,其中有人在访问临时表时遇到类似的问题,因为SQLConnection不在同一个连接上下文中。
Accessing TSQL created #temp tables from CLR stored procedure. Is it possible?
如果您的第二个CRL存储过程通过不同的连接运行,则CRL sproc将无法访问全局临时表,因为它应该被删除。
请参阅本篇关于全球临时生命周期的文章(当消除阴茎温度时) Deleting Global Temporary Tables (##tempTable) in SQL Server