1

次の表を作成しました。

CREATE TABLE [dbo].[tblArchLogDetail](
    [RecordID] [numeric](18, 0) NOT NULL,
    [TableName] [varchar](30) NOT NULL,
    [TotalRecords] [int] NULL,
    [ArchivedRecords] [int] NULL,
 CONSTRAINT [PK_tblArchLogDetail] PRIMARY KEY CLUSTERED 
(
    [RecordID] ASC,
    [TableName] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

では、このテーブルに行を挿入するにはどうすればよいでしょうか? 「PRIMARY KEY制約違反」というエラーが表示され続けます。これは私のサンプルコードです:

Insert into tblArchLogDetail values(54,'tblAuditLogin',13128,0)
4

2 に答える 2

1

ここにあるのは、いわゆる「複合」主キーです。

これは、複合主キーを構成するために選択した値の組み合わせが一意でなければならないことを意味します。

取得しているエラーは、RecordId が 54 で、TableName が「tblAuditLogin」であるレコードがそのテーブルに既にあることを意味するだけです。

于 2013-05-09T19:25:31.843 に答える
0

あなたがやろうとしているのは、フィールドに自動的にインクリメントする整数を追加することだと思いRecordIDます。その場合は、ID フィールドにします。

CREATE TABLE [dbo].[tblArchLogDetail](
    [RecordID] [numeric](18, 0) IDENTITY NOT NULL,
    [TableName] [varchar](30) NOT NULL,
    [TotalRecords] [int] NULL,
    [ArchivedRecords] [int] NULL,
 CONSTRAINT [PK_tblArchLogDetail] PRIMARY KEY CLUSTERED 
(
    [RecordID] ASC,
    [TableName] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

それがあなたの意図ではなく、 本当に と で重複したレコードが必要な場合はRecordIDTableNameRecordID の前に ID フィールドを置き、それを PRIMARY KEY 制約に追加します。

CREATE TABLE [dbo].[tblArchLogDetail](
    [ID] [bigint] IDENTITY NOT NULL
    [RecordID] [numeric](18, 0) NOT NULL,
    [TableName] [varchar](30) NOT NULL,
    [TotalRecords] [int] NULL,
    [ArchivedRecords] [int] NULL,
 CONSTRAINT [PK_tblArchLogDetail] PRIMARY KEY CLUSTERED 
(
    [ID] ASC,
    [RecordID] ASC,
    [TableName] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

これら 2 つの解決策で問題が解決しない場合は、この質問に回答するために必要な追加情報があります。

于 2013-05-09T18:26:37.323 に答える