2

Microsoft の定義によると、「グローバル一時テーブルは、作成後にすべてのユーザーとすべての接続に表示され、テーブルを参照しているすべてのユーザーが SQL Server のインスタンスから切断されると削除されます。」

次のように動作するのはなぜですか。

SSMS を使用してグローバル一時テーブル (##SomeTempTableName) を作成し、数秒または数分後に SSMS を使用して別のクエリを実行すると、2 番目のクエリで一時テーブルを表示および使用できます。

ADO を使用してグローバル一時テーブルを作成し、数秒または数分後に別の ADO クエリを実行すると、2 番目のクエリで一時テーブルを参照して使用できます。

Access パススルー クエリを使用してグローバル一時テーブルを作成し、数秒または数分後に別の Access パススルー クエリを実行すると、2 番目のクエリで一時テーブルを参照して使用できるようになります。

しかし、SSMS、ADO、または Access パススルー クエリを使用してグローバル一時テーブルを作成した場合、他の方法で作成された一時テーブルを表示することはできませんか? 編集: SSMS が認識できる Access パススルー クエリを使用して一時テーブルを作成しました。

これらのイベント間で、SSMS を閉じたり、ADO 接続を閉じたり、Access を閉じたりするわけではないことに注意してください。

4

1 に答える 1

2

タイトルの質問を参考に...

Access パススルー クエリは、ADO や SSMS を使用して作成された SQL Server 上のグローバル一時テーブルを参照できますか?

...私のテストでは、答えは「はい」です。これが私がしたことです:

SQL Server マシンを再起動した後、管理者として Windows にログインし、SSMS (Windows 認証) を介してローカルで SQL Server にログインしました。SSMSでスクリプトを実行しました...

USE [Accounting]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE ##gord(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

...グローバル一時テーブルを作成するために、スクリプトを実行しました...

INSERT INTO ##gord ([Name]) VALUES ('bar')

...それを一列に並べます。次に、SSMS を実行したまま Access を起動し、パススルー クエリを実行しました...

SELECT * FROM ##gord

...そして、グローバル一時テーブルから行を返しました。SSMS が実行されている限り、パススルー クエリを実行し続けることができましたが、SSMS をシャットダウンするとすぐに、次に Access パススルー クエリを実行しようとすると、

ODBC -- 呼び出しに失敗しました

[Microsoft][ODBC SQL Server ドライバー][SQL Server]オブジェクト名 '##gord' が無効です。(#208)

SSMS とアクセス セッションの両方で、管理者 (サーバー ロール: sysadmin) として SQL Server に接続していたので、他のセッションがグローバル一時テーブルを参照できないようにしている SQL Server のアクセス許可の問題があるのではないかと考えています。 .

于 2013-09-22T02:12:00.110 に答える