2012-08-08 54 views
1

當我嘗試運行我的應用程序,我得到以下錯誤:部署錯誤,「數據庫中已有一個名爲'PK _ ***'的對象,無法創建約束。」

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

這實際上是兩個錯誤的結合簡潔。 注:星號是我自己的;這不是密鑰的實際名稱。

我已經搜遍了似乎每個帖子在這裏的東西,但我似乎無法進一步尋找解決方案。最糟糕的部分?團隊中的其他人在跑步時沒有遇到這些錯誤,他們也不能確定我爲什麼。我們都使用相同的環境,VS 2012 Premium RC。我當然有最新的TFS。

我想知道是否有其他人遇到類似的問題,只發生在一個人的環境中的問題/錯誤?我可以繼續並運行該應用程序。它似乎按預期運行,但我是唯一一個得到這些錯誤。

+0

請在您的問題中[不要使用簽名](http://stackoverflow.com/faq#signatures)。 – 2012-08-09 03:42:11

+0

運行應用程序時,它是使用LocalDB還是SQL Server數據庫作爲其數據源?如果是前者,那可能是你成爲唯一一個看到錯誤的原因。 – 2012-08-09 21:08:19

回答

5

在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標準的工作方式。

祝你好運!

相關問題