我有一个stored procedure
,我正在创建一个临时表。
我的vb
代码将执行此存储过程。
sp执行后是否可以在vb6
中访问临时表中的数据?
答案 0 :(得分:3)
使用全局范围临时表(它们以##
而不是#
开头)。这些在会话之间共享。当创建它们的会话结束且没有其他会话引用它们时,它们会超出范围。
另一个选项是持久临时表(以TempDB..
为前缀)
答案 1 :(得分:0)
来自Books Online:
删除在存储过程中创建的本地临时表 存储过程完成后自动执行。表可以 由存储的任何嵌套存储过程引用 创建表的过程。该表不能被引用 调用创建表的存储过程的过程。
答案 2 :(得分:0)
当存储过程结束时,将删除在存储过程中创建的临时表,因此答案为否。
如果您真的想与调用者共享临时表,可以执行以下操作:
有条件地在存储过程中创建临时表(如果它尚不存在)
CREATE PROCEDURE MyProcedure AS
...
if object_id('tempdb..#temp') is null
BEGIN
CREATE TABLE #temp
(...)
END
...
每当您想要从调用者访问临时表时,您应该在调用存储过程之前创建临时表。
通过在存储过程中有条件地创建临时表,无论调用者是否创建临时表,它都将起作用。调用者当然必须创建具有正确结构的临时表,并在完成时删除它(或关闭数据库连接)。
答案 3 :(得分:0)
我过去使用的一个选项是在调用使用它的存储过程之前创建临时表。只要你使用相同的开放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
)之前保持可用。