2013-02-21 102 views
1

在SQL Server 2008 R2,我有一个简单的表有以下的列的定义:SQL Server的奇怪重复键错误

Id (PK ,int , not null) 
MeterId (FK , int ,not null) 
InstallDate(DateTime, not null) 
Image(NVarCharMax, null) 
Number (int , not null) 
Comments(NVarChar(300), null) 

而且Id列设置为Identity

当我运行:

insert into Transmitters (MeterId, Number, InstallDate) 
    values (952, 777 , '2013-02-21') 

我得到的重复键错误。

没有其他发送ID为777,

有id为952

这开始在我的数据库超过1台发生一米。

任何建议将是最appriceated。

整个表脚本是:你一直

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Transmitters](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [MeterId] [int] NOT NULL, 
    [InstallDate] [datetime] NOT NULL, 
    [Image] [nvarchar](max) NULL, 
    [Number] [int] NOT NULL, 
    [Comments] [nvarchar](300) NULL, 
CONSTRAINT [PK_Transmitters] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[Transmitters] WITH CHECK ADD CONSTRAINT [FK_Transmitter_Meter] FOREIGN KEY([MeterId]) 
REFERENCES [dbo].[Meter] ([Id]) 
GO 

ALTER TABLE [dbo].[Transmitters] CHECK CONSTRAINT [FK_Transmitter_Meter] 
GO 
+0

是对FK自参照或你对FK唯一约束? – Kermit 2013-02-21 15:45:54

+1

你可以编制整个表格,包括所有约束吗?另外,插入此记录时表格是否为空?也许它已经填充并且身份正在挑选已经存在的号码。 – Mayo 2013-02-21 15:47:15

+0

FK提供另一张表格:米。我没有任何限制。 – 2013-02-21 15:47:40

回答

0

好,感谢球员最有帮助。

我使用检查了我的身份当前值:

USE Name_Of_The_DB 
GO 
DBCC CHECKIDENT (‘Name_Of_The_Table’) 
GO 

这确实是一些行比 当前标识具有较高的ID值问题的原因。

Thand我插入一行来更新当前标识值:

set identity_insert YourTable ON 

--Insert my row 

set identity_insert YourTable OFF 

谢谢:)

+0

重播身份实际上更适合我:http://www.howtogeek.com/howto/database/reset-identity-column-value-in-sql-server/ – 2013-02-24 08:12:05