【问题标题】:Accessing TSQL created #temp tables from CLR stored procedure. Is it possible?从 CLR 存储过程访问 SQL 创建 #temp 表。可能吗?
【发布时间】:2010-10-18 19:32:35
【问题描述】:
  1. 我有一个 TSQL 存储过程 tsql__sp__A,它做了两件事:

(a) 创建一个临时表 #tempTable,其中包含来自复杂 SELECT 查询的 SELECT 数据。

(b) 为对行参数进行计算的每一行调用一个 CLR 管理的存储过程 clr__sp__B

问题:是否可以使用相同的连接上下文从 CLR 过程 clr__sp__B 访问 #tempTable? (不,我不想在托管过程中移动或创建另一个 #tempTable

谢谢。

【问题讨论】:

    标签: tsql sqlclr temp-tables


    【解决方案1】:

    谢谢博杰。

    但是我发现当你使用“context connections=true”时,它会打开所有的 SET

    Read Bol Article

    //上下文连接允许您在最初调用代码的同一上下文中执行 SQL 语句//

    using (SqlConnection connection = new SqlConnection("context connection=true"))
    {
        connection.Open();
        // access #temp table
    }
    

    【讨论】:

      【解决方案2】:

      我们可以在 SQL 中定义两种类型的临时表。

      • 本地
      • 全球

      关于本地临时表:

      当表前面有一个'#'符号时,它被定义为本地临时表,其范围仅限于创建它的会话。

      关于全局临时表:

      与本地临时表相比,全局临时表在整个实例中都是可见的。

      所以你应该尝试使用“##”来创建一个全局临时表。 (如果“连接上下文”和“会话”有区别)

      【讨论】:

      • 谢谢。是的,我将全局临时表 (##) 作为最后一个选项,但想知道是否有办法将 TSQL 的当前会话/连接上下文传递给管理器 CLR?
      • 嗯,好问题。但是调用反转呢?我的意思是您创建了一个托管的“包装器”存储过程,该过程调用 tsql__sp__A,然后调用 clr__sp__B。或者,你重写 clr__sp__B 以先调用 tsql__sp__A。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2016-04-14
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多