在SQL Server中,像主鍵或外鍵這樣的約束本身就是對象,即使它們依賴於「包含」表。
這意味着它們的名稱在擁有模式中必須是唯一的。因此,正如執行DDL沿
create table some_schema.foo
(
id int not null
)
go
create table some_schema.foo
(
id int not null
)
go
線當第二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標準的工作方式。
祝你好運!
請在您的問題中[不要使用簽名](http://stackoverflow.com/faq#signatures)。 – 2012-08-09 03:42:11
運行應用程序時,它是使用LocalDB還是SQL Server數據庫作爲其數據源?如果是前者,那可能是你成爲唯一一個看到錯誤的原因。 – 2012-08-09 21:08:19