次のコードがストアドプロシージャにあります。スクリプトが並列実行されているときに#tempテーブルのPKを作成できません
....
select ... into #temp from ....
alter table #temp add constraint PK_mytemp13 primary key (....)
....
ストアドプロシージャを並列実行すると、次のエラーメッセージが表示されることがあります。
データベースには、すでに 'PK_perf322dsf'という名前のオブジェクトがあります。 制約を作成できませんでした。以前のエラーを参照してください。
以下の方法で回避できると思います。他のより洗練されたソリューションがありますか?
最初に主キーを使用してテンポラリテーブルを作成します。次に、行を挿入します。
create table #temp (... primary key (....))
動的にセッションIDを使用してPKを作成します。
declare @s varchar(500) = 'alter table #temp add constraint PK_temp' + @@spid + ' primary key (....)
このエラーは、ローカルtempテーブルの作成、コードブロック内に名前付き主キーを作成し、そのコードブロックを呼び出す接続が2つ以上ある場合に発生します。 SQL Serverでは、ローカルの一時テーブルでも同じ名前の2つのPKを許可しません。 – CDC