【问题标题】:Using a temp table between stored procedures in SQL Server 2008在 SQL Server 2008 中的存储过程之间使用临时表
【发布时间】:2011-08-26 11:41:05
【问题描述】:

我目前有一个主存储过程调用许多存储过程:

Main --| 
     --|
       --| > Exec Pre-processing SP (create and populate #temp table)
     --|
       --| > Exec Actual update
     --|
       --| > Exec Post-Process (consume and drop #temp table)

我目前遇到的问题是我需要从数据库中获取原始值,并将值传递到主存储过程中,以便我可以在最后一步(存储过程)中对更新执行后处理) 被调用。

我无法更改存储过程签名或主存储过程。

当我尝试执行此场景时,我在后处理存储过程中得到一个无效对象。

如何将我的值从第一个存储过程传递到最后一个存储过程。

【问题讨论】:

    标签: tsql sql-server-2008 stored-procedures temp-tables


    【解决方案1】:

    您需要在调用层次结构中创建比所有使用它的存储过程更高的临时表。既然你说你不能改变Main,那么唯一的机会就是创建一个新的最外层过程来创建#temp,然后调用Main

    然后您可以修改预处理程序以填充已经存在的表。您不需要在任何地方显式删除表格。


    或者,您可以创建一个永久表,并包含一个 spid 列,该列指示从哪个连接数据插入。您还需要确保对该表的任何选择/删除再次使用 @@SPID 值。我将此作为对Session-global temporary tables的回答发布了

    【讨论】:

    • 我使用## 全局临时表和@@SPID 解决了我的限制,从全局临时表中获取我的值。
    【解决方案2】:

    如果main 过程始终在单个线程上运行并且永远不会从多个连接并行调用,您可以将您的临时表声明为全局临时表(##temp 而不是#temp),假设您能够更改内部过程。

    如果同时从多个连接调用main,这将不起作用。

    【讨论】:

    • main 从应用的 UI 调用,可以并行调用。
    • @Alexandre - 在这种情况下,此解决方案对您没有用处。对不起。
    猜你喜欢
    • 2015-11-20
    • 2021-01-05
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多