繁体   English   中英

如何访问存储过程内创建的临时表[vb6]

[英]how to access the temporary table created inside stored procedure [vb6]

我有一个stored procedure ,我在其中创建一个临时表。 我的vb代码将执行此存储过程。

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

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

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

来自联机丛书

存储过程完成时,将自动删除在存储过程中创建的本地临时表。 该表可以由创建该表的存储过程执行的任何嵌套存储过程引用。 调用创建表的存储过程的进程无法引用该表。

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

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

  1. 有条件地在存储过程中创建临时表(如果它尚不存在)

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

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

我过去使用的一个选项是在调用使用它的存储过程之前创建临时表。 只要您使用相同的开放式adodb 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 )之前保持可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM