2017-04-26 49 views
0

這是我的表如何在兩個主鍵之間進行選擇1如果其他值有空值,它將爲空?

CREATE TABLE [dbo].[product] (
    [prod_Id] NUMERIC (5) NULL, 
    [barcode] NUMERIC (13) NULL, 
    [prod_name] NVARCHAR (50) NULL, 
    [price]  FLOAT (53) NULL, 
    [stock]  NUMERIC (18) NULL, 
    [cat_id] NCHAR (10) NULL, 
    [discount] FLOAT (53) NULL, 
    PRIMARY KEY CLUSTERED ([prod_Id],[barcode] ASC) 
); 

代碼,我有2個主鍵prod_idbarcode。我想讓它們爲空,因爲用戶可以選擇輸入prod_idbarcode。兩者在同一時間都不會有價值。現在請任何人幫助我如何做到這一點。我試圖讓它們爲空,它給出了語法錯誤。

+2

主鍵應該是唯一的而不是空的。 – Kapil

+0

Prod_Id和Barcode被定義爲null,您不會被允許在可爲空的列上創建主鍵。 – Kapil

+0

創建一個標識列作爲rowid字段並將其設置爲主。如果需要,請使用prod_id和條形碼的非聚集索引。 – Kapil

回答

2

替換獨特

unique CLUSTERED ([prod_Id],[barcode] ASC) 

(或)

主鍵提供一些默認值是存在於所述複合主鍵的列。

CREATE TABLE [dbo].[product] (
    [prod_Id] NUMERIC (5) default 0, 
    [barcode] NUMERIC (13) default 0, 
    [prod_name] NVARCHAR (50) NULL, 
    [price]  FLOAT (53) NULL, 
    [stock]  NUMERIC (18) NULL, 
    [cat_id] NCHAR (10) NULL, 
    [discount] FLOAT (53) NULL, 
    PRIMARY KEY CLUSTERED ([prod_Id],[barcode] ASC) 
); 
1

如果您正在使用C#C#SQL服務器發送數據,然後,你可以驗證到位,檢查1爲null,則另一個必須不空,拋出異常/錯誤的存在,使雙方的列在數據庫中作爲唯一而不是主鍵。它可能有幫助。

1

在任何數據庫表中,只有一個主鍵,並且該主鍵不應爲空。 在你的情況下,對於每個prod_id將會有獨特的條形碼,反之亦然。因此,將其中的任何一個設置爲NULL都沒有任何意義。 改爲創建2個表,其中一個包含table_id和其他包含條形碼,然後使用foreign_key在另一個表中引用。

相關問題