1

在 SQL Server 2008 R2 中,我有一个简单的表,其中包含以下列定义:

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 的仪表。

这开始发生在我的数据库的多个表中。

任何建议都将是最受重视的。

整个表格脚本是:

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
4

1 回答 1

0

好的,谢谢你们最有帮助的人。

我使用以下方法检查了我的身份当前值:

USE Name_Of_The_DB
GO
DBCC CHECKIDENT (‘Name_Of_The_Table’)
GO

某些行的 Id 值高于当前标识确实是问题的原因。

然后我插入了一行来更新当前的标识值:

set identity_insert YourTable ON

--Insert my row

set identity_insert YourTable OFF

谢谢 :)

于 2013-02-21T16:07:32.893 回答