gpt4 book ai didi

java - 通过 JDBC 创建的 SQL Server 全局临时表不持久

转载 作者:行者123 更新时间:2023-12-02 09:26:19 26 4
gpt4 key购买 nike

是否有任何方法可以在 SQL Server 上使用 JDBC 创建全局临时表,该表在我的连接关闭后仍将保留?

我发现,如果我使用 JTDS JDBC 驱动程序创建全局临时表,它在连接关闭后就不存在:

String sql = "CREATE TABLE ##foobar([name] [nvarchar](50) NOT NULL)";
Statement stmt = connection.getConnection().createStatement();
stmt.execute(sql);

我想要的是一个对每个人都可见的表,并且将跨连接持续存在,直到服务器重新启动。

最佳答案

您可以使用永久表、 View 和登录触发器来创建与 Oracle 样式临时表具有类似行为的内容:

create table dbo._Data (
Session int not null constraint DF__Data DEFAULT (@@SPID),
ColumnA int not null,
ColumnB int not null
)
go
create view dbo.Data (
ColumnA,
ColumnB
)
with schemabinding
as
select
ColumnA,
ColumnB
from
dbo._Data
where
Session = @@SPID
with check option
go
create trigger T_Data_Logon_Cleardown
ON ALL SERVER
FOR LOGON
AS
delete from Database.dbo.Data
go

然后,您可以针对 dbo.Data“表”执行所有操作。

这样做的特点是每个 session 的行都是隔离的,如果断开连接并重新连接,“表”将为空。

您没有得到的是自动清除事务边界上的行(如果这是您的首选选项 - 您必须手动删除)。它也不完全相同,因为行将保留在表中,直到新 session 声明旧 session ID(因此稍后会进行清理,如果有的话)。但从客户的角度来看,它可能“足够接近”。

关于java - 通过 JDBC 创建的 SQL Server 全局临时表不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12595709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com