1

アプリを実行しようとすると、次のエラーが表示されます。

There is already an object named 'PK_***' in the database. Could not create constraint."

これは実際には、簡潔にするために 2 つのエラーを組み合わせたものです。注: アスタリスクは私自身のものです。これはキーの実際の名前ではありません。

ここにあるすべての投稿のように見えるものを精査しましたが、解決策を見つけるのにこれ以上進むことができないようです. 最悪の部分は?チームの他の誰も実行時にこれらのエラーを経験しておらず、私がなぜそうなのかを判断することもできません. 私たちは皆、VS 2012 Premium RC という同じ環境を使用しています。私は確かにTFSから最新のものを持っています。

問題/エラーが 1 人の環境でのみ発生した、これと同様の問題に他の誰かが遭遇したかどうか疑問に思っていますか? 続行してアプリを実行できます。期待どおりに動作しているようですが、これらのエラーが発生したのは私だけです。

4

1 に答える 1

6

SQL Server では、主キーや外部キーなどの制約は、"包含" テーブルに依存していますが、それ自体がオブジェクトです。

つまり、それらの名前は、所有するスキーマ内で一意でなければなりません。したがって、次の行に沿って DDL を実行するのと同じように

create table some_schema.foo
(
  id int not null
)
go

create table some_schema.foo
(
  id int not null
)
go

2 番目create tableが [試行された] 実行されるとエラーが発生します。このように ddl を実行すると、同様にエラーが発生します。

create table some_schema.foo
(
  id          int          not null ,
  description varchar(200) not null ,

  constraint PK   primary key clustered ( id          ) ,
  constraint AK01 unique nonclustered   ( description ) ,

)
go

create table some_schema.bar
(
  id          int          not null ,
  description varchar(200) not null , 

  constraint PK   primary key clustered ( id          ) ,
  constraint AK01 unique nonclustered   ( description ) ,

)
go

作成しようとしている制約の名前が重複しているため、同様にエラーが発生します。したがって、テーブル名でそれらを修飾する必要があります。

create table some_schema.foo
(
  id          int          not null ,
  description varchar(200) not null ,

  constraint foo_PK   primary key clustered ( id          ) ,
  constraint foo_AK01 unique nonclustered   ( description ) ,

)
go

create table some_schema.bar
(
  id          int          not null ,
  description varchar(200) not null , 

  constraint bar_PK   primary key clustered ( id          ) ,
  constraint bar_AK01 unique nonclustered   ( description ) ,

)
go

そしてあなたの問題はなくなります。

所有オブジェクトのコンテキスト外に存在しない依存オブジェクトは、所有オブジェクトのスコープ内で名前空間を指定する必要があるように私には思えますが、それは SQL 標準が機能する方法ではありません。

幸運を!

于 2012-08-08T18:40:08.833 に答える