【发布时间】:2012-02-13 08:00:50
【问题描述】:
我正在使用 Oracle 11g 全局临时表,因为我需要一个解决方案,在该解决方案中我可以将行添加到临时表以进行连接,并且我只希望将添加到临时表的行包含在 Oracle 连接/会话中。我在 Oracle 中使用全局临时表,因为我希望该表存在于会话之间,因此不必在每次创建查询时都重新创建它。这很好。
我的Oracle表定义如下:
CREATE GLOBAL TEMPORARY TABLE book_id_temp
(
book_id RAW(32)
)ON COMMIT DELETE ROWS;
我在 SQL Server 2008-R2 端也有相同的数据库结构,并且在 SQL Server 中需要类似的解决方案。我想:
- 打开 SQL 连接 (ADO.NET)
- 在交易中:
- -向临时表添加行。
- -将它们加入另一个表,选择结果
- - 仅将在此会话期间添加的行包含在联接中。另一个线程可能正在同一个临时表上执行。那么本地临时表可能在这里最好吗?
- 回滚整个事务。
根据我对 SQL Server 中全局临时表的了解,这些表在连接结束后存在,就像常规表一样,也像 Oracle 中的全局临时表。但是,目前尚不清楚数据的范围。是否只有创建行的 SQL Server 会话才能访问它,就像在 Oracle 中一样? SQL Server 全局临时表对数据的可访问性如何?您对实现我的目标的替代方案有什么建议吗?
【问题讨论】:
-
Oracle 全局临时表也需要被截断,具体取决于操作...如果可以选择,我会在 SQL Server 中的临时表上使用表变量,但您需要说明您的需要当连接丢失时的持久性以获得真正的帮助。为什么不直接制作一张实际的表格?
-
我希望表在会话之间存在,这样就不必在每次创建查询时都重新创建它。
-
它听起来就像你想要一个本地临时表,而不是一个全局临时表。你能描述一下你需要什么语义吗?
-
@Damien_The_Unbeliever,我已经添加了我更确切需要的细节。希望这能回答您的问题。
标签: sql-server oracle temp-tables