【问题标题】:TSQL make EXECUTE statement synchronousTSQL 使 EXECUTE 语句同步
【发布时间】:2009-04-12 16:03:02
【问题描述】:

我有两个 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 延迟,它等待但第二个 EXEC 语句永远不会返回。

谢谢。

更新,这里有更多信息:

  1. 首先执行创建一个全局临时表并从一个复杂的 SELECT 查询中填充它。
  2. 第二个 EXEC 是一个 CLR 存储过程,它根据最近创建和填充的全局临时表中的变量生成动态 SP。

现在第二个 EXEC 抱怨找不到全局临时表。

更新 2,发现问题(还有我!!)

GBN(和其他人)的答案是空白的。执行是同步的。问题?我对问题本身的理解..我提到过

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

应该是:

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

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

我错过了 1(b) 实际上是在其他地方和步骤 (2) 之后执行的。

(我应该去活下去!!)

【问题讨论】:

  • 我怀疑您还有其他问题。 EXECUTE 是同步的
  • 您的意思是“顺序”吗?命令将是顺序的...
  • 同意米奇。能否请您提供更多信息?
  • @Dems:我的意思是顺序的。
  • @47d_:“基于最近创建和填充的全局临时表中的变量”是什么意思?

标签: sql sql-server tsql exec synchronous


【解决方案1】:

EXECUTE 是同步的。第二个在第一个之后运行。总是。

您是否有多个连接运行相同的代码?您正在使用对所有连接都可见的全局临时表,因此它可能看起来像异步执行...

【讨论】:

    【解决方案2】:

    正如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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2020-09-27
      • 2021-12-13
      • 2013-08-15
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多