4

我有一个stored procedure里面我正在创建一个临时表。我的vb代码将执行这个存储过程。

vb6sp执行后是否可以访问临时表中的数据?

4

4 回答 4

3

使用全局范围的临时表(它们以##而不是开头#)。这些在会话之间共享。当创建它们的会话结束并且没有其他会话引用它们时,它们就会超出范围。

另一种选择是持久临时表(以 为前缀TempDB..

于 2013-06-11T09:30:58.550 回答
0

我过去使用的一个选项是在调用使用它的存储过程之前创建临时表。只要您使用相同的 openadodb connection它应该可以工作:

myAdoDBConn.Execute "CREATE TABLE #foo (ID integer)", , adCmdText
myADODBConn.Execute "StoredProcThatPopulatesFoo", , adCmdStoredProc

myAdoRecordset.Open "Select ID FROM #foo", myAdoDbConn, adOpenForwardOnly, adLockReadOnly
Do While Not myAdoRecordset.EOF
  // do something with the record //
  myAdoRecordset.EOF
Loop

在此示例中,临时表一直可用,直到您关闭连接 ( myAdoDbConn)。

于 2013-06-11T12:50:32.717 回答
0

来自在线书籍

当存储过程完成时,在存储过程中创建的本地临时表会自动删除。该表可以被创建该表的存储过程执行的任何嵌套存储过程引用。调用创建该表的存储过程的进程不能引用该表。

于 2013-06-11T09:31:10.597 回答
0

当存储过程结束时,在存储过程中创建的临时表将被删除,因此答案是否定的。

如果您真的想与调用者共享一个临时表,您可以执行以下操作:

  1. 如果临时表尚不存在,则有条件地在您的存储过程中创建临时表

    CREATE PROCEDURE MyProcedure AS
        ...
        if object_id('tempdb..#temp') is null
        BEGIN
            CREATE TABLE #temp
            (...)
        END 
        ...
    
  2. 每当您想从调用者访问临时表时,您应该在调用存储过程之前创建临时表。

通过在存储过程中有条件地创建临时表,无论调用者是否创建临时表,它都会起作用。调用者当然必须创建具有正确结构的临时表,并在完成时删除它(或关闭数据库连接)。

于 2013-06-11T09:48:55.523 回答