在Server 2008 R2中,我有一个允许0作为外键的表。这很奇怪,因为指定了主键约束,并且还使用了IDENTITY(1,1)描述符。
当第一个记录被插入到表中时,它的PK (RegionID)是0。
我在做插入时没有打开IDENTITY-INSERT。(正常操作)
以下是表的定义:
CREATE TABLE [dbo].[tdfRegions](
[RegionID] [int] IDENTITY(1,1) NOT NULL,
[RegionName] [nvarchar](50) NOT NULL,
[RegionDescription] [nvarchar](50) NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_tdfRegions] PRIMARY KEY CLUSTERED
(
[RegionID] 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 我一直在假设插入到此表的第一条记录的RegionID为1。
INSERT INTO
tdfRegions (RegionName, RegionDescription, Active)
VALUES
('test','test', 1)生产:
RegionID RegionName RegionDescription Active
0 test test 1为什么会发生这种事?
编辑:
好的,我这里有一些背景信息。有人跑了一个
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO若要清除首次创建数据库时的数据,请执行以下操作。这可能是罪魁祸首?
发布于 2013-05-02 16:58:44
你能在RegionID中得到0的唯一原因是--
当您截断表并使用下面的命令将标识重新定位为0时
DBCC CHECKIDENT('tdfRegions', RESEED, 0)如果然后使用insert块插入到表中,则为RegionID = 0。

发布于 2013-05-02 16:50:16
我所知道的重置PK的方法是:
( a)使用截断
但这会让我们看到1
( b)使用类似于:
(MyTable,RESEED,1)
如果在最后一条语句中使用0而不是1,那么种子设置为0。
其他人在谈论这件事。
http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/ca0db3d2-e3ae-46ce-b8f0-bfc3bf95a509/
https://stackoverflow.com/questions/16343123
复制相似问题