2017-07-10 9 views
0

私は多くの一時テーブルを持つ大規模なクエリ(Webダッシュボードクエリ)を持っています.iは、クエリを使用している一時テーブル上のインデックスを作成しました。権限の異なるレベルのユーザー管理モジュールがあります。私の質問は、一時データベースのようなセッションごとに? 私はインデックスをセッション間で共有したくありません。私はセッション間でテンポラリテーブルインデックスが一意であるか、それとも共有されていますか?

EXEC('CREATE INDEX idx_test'+ @sessionId + 'ON #TempTable (id1,id2)'); 

のようなものをやっている

は、この必要です。私はそれがいくつかの開発者によって行われたのを見ました。

+0

はい、それが適用可能であることが第二は、エラーになりますセッションにのみ – Madhivanan

答えて

1

テンポラリテーブルのインデックス(#tではなく## t)はセッション全体で共有されているため、一意のインデックス名を一時テーブルのインデックスに使用する必要はありません。

異なる(と他の開発者のコ​​ードで見たことがあります)CONSTRAINT NAMEです。索引名は、異なる表に対して何回も繰り返すことができますが、制約名はデータベース内で一意でなければなりません。

したがって、セッションを参照して制約名を作成するストアドプロシージャのコードが表示されます。これは、制約に一意の名前を付ける試みです。 2つのセッションでテンポラリテーブル#tを作成するストアドプロシージャを起動すると、セッションごとに独自のテーブルが作成されます(#tだけでなく、テーブル名にシンボルを追加して一意にします)

しかし、同じprocはCONSTRAINT PK_tを作成しようとした場合、最初のセッションは成功しますが、PK_tが既にデータベースに存在する制約(tempdbの)一時テーブルの

関連する問題