2012-04-24 46 views
1
INSERT INTO tbl_AllParcel 
      ([P_ID],[Sub_ID],[X_COORD],[Y_COORD]) 

VALUES 
     ('0706' , '002' , '579002' , '1167176'), 
     ('0706' , '003' , '579013' , '1167153') 

P_ID和Sub_ID是每個主鍵一起形成複合鍵。我收到以下錯誤消息,我運行上面的代碼。不應該由複合密鑰單獨創建唯一的值嗎?違反覆合鍵上的主鍵約束

消息2627,級別14,狀態1,2號線 違反PRIMARY KEY約束 'PK_tbl_Parcel' 的。無法在對象'dbo.tbl_AllParcel'中插入重複鍵。 該聲明已被終止。

回答

1

這個錯誤意味着你已經得到了這個組合鍵的表中的一個。

'0706' , '002' 
'0706' , '003' 
+0

所以可以在SQL Server 2008創建執行沒有獨特的個體組合鍵鍵?;我想要在 – 2012-04-24 21:05:49

2

嘗試分別插入兩行。我敢打賭,至少有一次失敗,但不一定都是。失敗不是來自僅在插入語句中找到的數據,除非您在各個列上同時具有複合主鍵/唯一約束和另一個唯一約束。

你也可以解釋你有兩個主鍵一起形成一個複合鍵嗎?一個表只能有一個主鍵。你可以編寫表格定義的腳本(右鍵單擊SSMS中的對象瀏覽器,Script Table As,Create To,Clipboard),並將其添加到問題中,這樣我們可以就術語達成一致?

如果你有P_ID唯一約束和Sub_ID唯一約束,那麼你只能有一個表中的每個價值,反對什麼,我想你打算(只組合必須是唯一的)。如果您對各個列唯一約束,那麼這是不是有效,因爲它不違反合併約束,但它確實違反了第一列的約束:

P_ID Sub_ID 
---- ------ 
0706 002 
0706 003 

我們可以告訴您如何解決這(並確認還沒有一行P_ID ='0706'和Sub_ID ='002'或'003')。當你這樣說時會發生什麼:

SELECT COUNT(*) FROM dbo.tbl_AllParcel WHERE P_ID = '0706' AND Sub_ID = '002'; 

?或者更重要的是,我想,根據您提供的腳本:

SELECT COUNT(*) FROM dbo.tbl_AllParcel WHERE P_ID = '0706'; 
SELECT COUNT(*) FROM dbo.tbl_AllParcel WHERE Sub_ID = '002'; 

爲了創建無添加鍵單獨列複合鍵,你不選擇單獨的列。這裏是一個辦法做到這一點使用CREATE TABLE:我假設你正在使用中的UI

CREATE TABLE dbo.tbl_AllParcel2 
(
    P_Id CHAR(4), 
    Sub_Id CHAR(3), 
    ... other columns, 
    CONSTRAINT PK_Parcel PRIMARY KEY(P_Id, Sub_Id) 
); 

。不要在桌子設計師那裏嘗試這樣做 - 這是一大堆垃圾。學習DDL,它會讓你走得更遠。下面是CREATE TABLEALTER TABLE主題聯機叢書,其中有大量的例子來定義各種限制和其他表屬性:

CREATE TABLE (MSDN)
ALTER TABLE (MSDN)

+0

以上的數據中實現什麼,謝謝Aaron!以下是代碼CREATE TABLE [dbo]。[tbl_AllParcel]([P_ID] [nvarchar](10)NOT NULL,[SUB_ID] [nvarchar](10)NOT NULL,[X_COORD] [int] NULL,[Y_COORD] [int] NULL,CONSTRAINT [PK_tbl_Parcel] PRIMARY KEY CLUSTERED([P_ID] ASC,[Sub_ID] ASC – 2012-04-24 21:55:51

+0

ALTER TABLE [DBO]。[tbl_AllParcel] WITH CHECK ADD CONSTRAINT [FK_tbl_AllParcel_tbl_AllParcel]外鍵([P_ID],[Sub_ID]) 參考文獻[DBO]。[tbl_AllParcel]([ P_ID],[Sub_ID]) GO ALTER TABLE [DBO]。[tbl_AllParcel]檢查約束[FK_tbl_AllParcel_tbl_AllParcel] GO – 2012-04-24 21:58:29

+0

查詢的結果是一個記錄。你肯定就在你說特別是在評論第3段涉及到我的意圖,我只是不知道如何創建一個組合鍵而沒有在個別鍵上加上主鍵約束,請告訴我我錯了! – 2012-04-24 21:59:19

相關問題