2013-02-21 3 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') 

Я получаю дубликат ключа ошибки.

Там нет другого передатчика с идентификатором 777,

Существует метр с идентификатором 952.

Это начало происходить в более чем 1 таблице моей БД.

Любые предложения были бы самыми пристрастными.

Вся таблица Сценарий:

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

+1

Можете ли вы создать сценарий всей таблицы, включая все ограничения? Кроме того, является ли таблица пустой, когда вы вставляете эту запись? Возможно, он уже был заполнен, а личность выбирает число, которое уже существует. – Mayo

+0

FK refrences другая таблица: Метры. У меня нет никаких ограничений. –

ответ

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/ –