3

接続が閉じられた後も存続するSQLServerでJDBCを使用してグローバル一時テーブルを作成する方法はありますか?

JTDS JDBCドライバーを使用してグローバル一時テーブルを作成した場合、接続が閉じた後は存在しないことがわかりました。

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

私が欲しいのは、すべての人に表示され、サーバーが再起動するまで接続間で存続するテーブルです。

4

2 に答える 2

0

永続テーブル、ビュー、およびログオン トリガーを使用して、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次に、 「テーブル」に対してすべてのアクションを実行します。

これには、各セッションの行が分離されているという特徴があり、切断して再接続すると「テーブル」は空になります。

得られないのは、トランザクション境界での行の自動クリアです (それが望ましいオプションである場合は、手動で削除する必要があります)。また、新しいセッションが古いセッション ID を要求するまで行がテーブルに残るため、まったく同じというわけではありません (したがって、クリーンアップは後で行われます)。しかし、クライアントの観点からは、「十分に近い」かもしれません。

于 2012-09-26T07:17:05.440 に答える
0

ローカル一時テーブルは、テーブルが最初に作成または参照されたときと同じように SQL Server のインスタンスに接続している間、その作成者にのみ表示されます。ユーザーが SQL Server のインスタンスから切断すると、ローカルの一時テーブルが削除されます。グローバル一時テーブルは、作成後にすべてのユーザーとすべての接続に表示され、それらを参照したすべての接続が閉じられると削除されます ( MSDN のドキュメントを参照してください) 。

この場合、私が必要とするのは、すべての人に表示され、サーバーの再起動時に削除される Tempdb 永続テーブルです。

CREATE TABLE tempdb..foobar([name] [nvarchar](50) NOT NULL)
于 2012-09-26T21:05:42.263 に答える