アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServer2005 を使用し、ストアドプロシージャを作成しています。

select ~ into ~ で一時テーブルを作成、データ挿入するのですが、
この命令で作成された一時テーブルにプライマリキーを作成したいと
考えております。
目的は、挿入される件数が多くなりそうなので、
検索を速くする為です。

プライマリキーを作成するのは、
ALTER TABLE ~ CONSTRAINT PK_xxx PRIMARY KEY CLUSTERED ( ~ )
で作成できる事は、理解しております。

これらの処理をストアドプロシージャで行いたいのですが、
注意点としては、当ストアドプロシージャが
並行して実行される事を考慮しておかなくてはなりません。


以下のようなサンプルを作成し、テストしてみたのですが、
セション1でストアドプロシージャ実行後、
セション2でストアドプロシージャを実行してみたのですが、
以下のエラーメッセージが表示されてしまいます。

ここで質問ですが、
制約名をどのようにすれば実現できるのでしょうか。
たとえば、制約名を省略すれば、システム内で一意な名称を
命名してくれるような書き方はないのでしょうか。

ご存じの方、ご回答宜しくお願いします。



-- サンプルストアドプロシージャ
create procedure proc_test as

select getdate() AS sysdate into #worktable

alter table #worktable with nocheck add
constraint pk_xxx primary key clustered ([sysdate])

waitfor time '23:59' -- テストの為待機

-- セション1ストアドプロシージャ実行
exec proc_test

-- セション2ストアドプロシージャ実行
exec proc_test

-- セション2の実行結果
(1 行処理されました)
メッセージ 2714、レベル 16、状態 4、プロシージャ proc_test、行 6
データベースに 'pk_xxx' という名前のオブジェクトが既に存在します。
メッセージ 1750、レベル 16、状態 0、プロシージャ proc_test、行 6
制約を作成できませんでした。以前のエラーを調べてください。

A 回答 (1件)

ALTER TABLE #worktable ADD PRIMARY KEY CLUSTERED ([sysdate])


でいけるとおもいますが。
    • good
    • 2
この回答へのお礼

早速の回答、どうもありがとうございます。

先ほど、教えて頂いた内容でテストしてみたところ、
問題なく動作しました。

これで、解決しそうです。

どうもありがとうございました。

お礼日時:2009/06/10 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す