2017-10-10 13 views
0

私はそれが私のテーブルではIDRequestNoVendorCodeを同じRequestNoSQL Serverで2つの主キーを使用してテーブルを作成する方法は?

の重複VendorCodeを受け入れるべきではありません

ID VendorName RequestNo VendorCode ChequeDateSearch   Description StoreID 
------------------------------------------------------------------------------------- 
1 John  1011  1021  2017-10-25 00:00:00.000   descr  6000 
2 michael  1011  1022  2017-10-25 00:00:00.000   descr  6000 
3 Abraham  1011  1023  2017-10-25 00:00:00.000   descr  6000 

下記の注意

のようなレコードを挿入する必要がありますしたいです主キーとなる。 IDは自動インクリメントされ、そしてRequestNoVendorCodeは、ユーザ指定

CREATE TABLE [dbo].[CheqVendorSearch](
    [ID] [bigint] IDENTITY(1,1) NOT NULL, 
    [VendorName] [nvarchar](max) NULL, 
    [RequestNo] [varchar](50) Not NULL, 
    [VendorCode] [varchar](50) NOT NULL, 
    [ChequeDateSearch] [datetime] NULL, 
    [Description] [nvarchar](max) NULL, 
    [StoreID] [varchar](10) NULL, 
PRIMARY KEY CLUSTERED 
(
    [ID] ASC, 
    [RequestNo] ASC, 
    [VendorCode] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

である。しかし、この表には、あなたはID、RequestNoおよびvendorCodeのでPKを定義

ID VendorName RequestNo VendorCode ChequeDateSearch   Description StoreID 
------------------------------------------------------------------------------------- 
1 John  1011  1023  2017-10-25 00:00:00.000   descr  6000 
2 michael  1011  1023  2017-10-25 00:00:00.000   descr  6000 
3 Abraham  1011  1023  2017-10-25 00:00:00.000   descr  6000 

答えて

0

の下のようなRequestNoの重複やVendorCodeを受け付けて - したがって、あなたの言及された例は重複として扱われません。ただし、PKからIDを削除しても問題ありません。 IDにはIDが設定されているため、これは問題ありません。 1つの理由または他の場合、identity_insert経由でデータを挿入する必要がある場合は、列IDのみをカバーするypurテーブルに一意のキーを追加することをお勧めします。

0

テーブル定義にはUNIQUEという制約が必要だと思います。

CREATE TABLE [dbo].[CheqVendorSearch](
    [ID] [bigint] IDENTITY(1,1) PRIMARY KEY NOT NULL, 
    [VendorName] [nvarchar](max) NULL, 
    [RequestNo] [varchar](50) Not NULL, 
    [VendorCode] [varchar](50) NOT NULL, 
    [ChequeDateSearch] [datetime] NULL, 
    [Description] [nvarchar](max) NULL, 
    [StoreID] [varchar](10) NULL, 
    CONSTRAINT UQ_vendor_request UNIQUE 
    (
     [RequestNo] , 
     [VendorCode] ASC 
    ) 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

ソリューションにおける主要な問題は、したがって、主キーの一部としてRequestNoVendorCodeを有することは無駄である、各行が一意IDによって識別されることです。

0

コンポジットプライマリキーを作成しようとしています。 複合プライマリキーは、プライム属性(ID、RequestNoおよびVendorCode)の組み合わせを一意にするように強制します。 RequestNoとVendorCodeを一意にするには、両方に一意の句を追加する必要があります。

CREATE TABLE [dbo].[CheqVendorSearch](
[ID] [bigint] IDENTITY(1,1) NOT NULL, 
[VendorName] [nvarchar](max) NULL UNIQUE, 
[RequestNo] [varchar](50) Not NULL UNIQUE, 
[VendorCode] [varchar](50) NOT NULL, 
[ChequeDateSearch] [datetime] NULL, 
[Description] [nvarchar](max) NULL, 
[StoreID] [varchar](10) NULL, 
PRIMARY KEY CLUSTERED 
(
    [ID] ASC, 
    [RequestNo] ASC, 
    [VendorCode] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
0

複合キーは、各列が個々に、3列の組み合わせに対して一意の値を適用しない(1、ジョン、1011)(2、マイケル1011)からユニークです。一意にするには、RequestNo列に一意のキーを追加する必要があります。副メモでは、PKとしてのvarcharデータ型は常に良い考えではなく、RequestNoはintではありませんか?

関連する問題