2017-04-26 2 views
0

は、これは私が2つの主キーprod_idbarcodeを持つテーブル2つの主キーの間で選択を行う方法1他に値がある場合はnullになりますか?

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) 
); 

ための私のコードです。ユーザーがprod_idまたはbarcodeを入力するかどうかを選択すると、それらをnullにしたいと考えています。どちらも同時に価値がない。さあ、どうすればいいか教えてください。私はそれらをnullにすると構文エラーが出るようにしようとしました。

+2

主キーはNullではなく一意である必要があります。 – Kapil

+0

Prod_IdとBarcodeがnullとして定義されている場合、null可能な列に主キーを作成することはできません。 – Kapil

+0

ID列を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#を使用してSQLサーバにC#からデータを送信する場合、その後、あなたは1がnullの場合、もう一方がnullでないことと、そこから例外/エラーを投げると列の両方を行う必要がありますチェックする場所で検証を持つことができます一意のキーではなく一意のDBとしてDBに格納します。それは助けるかもしれない。

1

任意のデータベーステーブルには、1つのプライマリキーがあり、そのプライマリキーはnullであってはいけません。 あなたの場合、それぞれのprod_idには一意のバーコードとその逆があります。だから、それはNULLのいずれかの意味を作っていないでしょう。 代わりに2つのテーブルを作成します.1つはtable_idと他のバーコードを含むテーブルで、もう1つはforeign_keyを使用して参照します。

関連する問題