问题描述
|
我使用SQL Server 2008 R2 Express定义了一个数据库,并使用Visual Basic 2010 Express将其连接到数据库。但是由于某种原因,当我在程序中使用数据库时,它想使用负主键开始。
有什么办法可以使主键只有一个正数?
解决方法
除了@RNarry Young的回应。您可以检查表的架构
假设您有下表
create table #t
(
ID int Identity(-1,1),s varchar(100)
)
现在您要插入两个
Insert into #t(s) values(\'ed\')
Insert into #t(s) values(\'ed\')
检查输出
select * from #t
它显示如下。如果您看到屏幕截图。第一行在主键值中显示-1。由于架构中提到的身份种子为-1的原因。
您可以摆脱这个问题。我们应该使用如下所示的模式。
create table #t
(
ID int Identity(1,s varchar(100)
)
以下是产生的另一种方式
Set Identity_Insert #t On
Insert into #t(ID,s) values(-1,\'ed\')
Set Identity_Insert #t OFF
Set Identity_Insert #t On
Insert into #t(ID,s) values(-2,\'ed\')
Set Identity_Insert #t OFF
,暂时,我只能想到会导致此的两件事:
创建表时,您(或您使用的某些软件/代码)将身份种子设置为负数。
或者,您(或您正在使用的某些软件/代码)正在使用Identity_Insert,并且只强加一个负数。
,该表的身份种子将在SSMS中可见。
但是......产生负数也没有关系。关于您的身份价值,实际上只有两个实际问题:
独特价值
足够的空间来覆盖期望值的范围(因此,tinyint键对于跟踪整个世界人口来说不是一个好主意...)
对它们进行排序后,实际值完全不应该引起任何关注。它们在数据库内部。