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 標準が機能する方法ではありません。
幸運を!