我使用SQL Server 2008 R2 Express定义了一个数据库,并使用Visual Basic 2010 Express连接到它。由于某种原因,当我在程序中使用数据库时,它想要使用负主键开始。为什么VB 2010和SQL Server中的数据表以负的主键开始?
有什么办法让主键只有一个正数吗?
我使用SQL Server 2008 R2 Express定义了一个数据库,并使用Visual Basic 2010 Express连接到它。由于某种原因,当我在程序中使用数据库时,它想要使用负主键开始。为什么VB 2010和SQL Server中的数据表以负的主键开始?
有什么办法让主键只有一个正数吗?
除了@RNarry年轻响应。如果你的表,你可以检查架构
假设你有如下表
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, 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
我在Visual Basic中创建了表(连接到SQL Server Express)。我检查了身份规范,并将其设置为1的种子,并且增量为1.也许我不应该将数据类型设置为bigint? – 2011-05-26 15:28:10
我想我想通了。在XSD文件中,在主键的属性中,它被设置为-1的种子。去确定XSD文件会忽略MDF设置。谢谢! – 2011-05-26 16:44:25
关闭的手,我只能想到两两件事,将导致此:
在创建表,你(或你正在使用一些软件/代码)被设置标识种子为负数。
或者,您(或您使用的是一些软件/代码)使用IDENTITY_INSERT,只是迫使负数。
该表的标识种子将是内SSMS可见。
但是......它丝毫不关心它产生负数。这里只有实际上是两个你identiity值实际问题:
一旦它们被排序后,实际值根本不应该有任何顾虑。它们在数据库内部。
发布您的表的DDL和用于写入它的代码,这将是一个很大的帮助,在回答你的问题。 – Tony 2011-05-26 00:08:17
它为什么重要?如果您使用标识列作为主键,则您应该关心的是这些值是自动唯一的。 – 2011-05-26 04:30:11