Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 标识1,1列中的零行_Sql Server 2008_Database Performance_Identity Column - Fatal编程技术网

Sql server 2008 标识1,1列中的零行

Sql server 2008 标识1,1列中的零行,sql-server-2008,database-performance,identity-column,Sql Server 2008,Database Performance,Identity Column,我正在清理一个旧数据库。我有一个表User,为User.SequenceNumber列设置了标识1,1,该列在许多表中用作外键,作为用户ID号。另一个表UserNotes在过去几年中错误地添加了许多记录,UserNotes.UserID为零。我最初的想法是添加User.SequenceNumber为零,User.UserName为“Unknown”,以恢复User.SequenceNumber和UserNotes.UserID之间的外键约束。我已经能够在测试区域成功地做到这一点,并且有一些记录

我正在清理一个旧数据库。我有一个表User,为User.SequenceNumber列设置了标识1,1,该列在许多表中用作外键,作为用户ID号。另一个表UserNotes在过去几年中错误地添加了许多记录,UserNotes.UserID为零。我最初的想法是添加User.SequenceNumber为零,User.UserName为“Unknown”,以恢复User.SequenceNumber和UserNotes.UserID之间的外键约束。我已经能够在测试区域成功地做到这一点,并且有一些记录


我关心的是,当我添加“零”行时,它是否会开始在我的500多万个数据库中引发问题,该数据库每分钟大约保存6次读取和4条记录?我发现,当人们不想这样做时,他们在数据库中会遇到问题,而不是有人有意这样做

它不会破坏Identity属性

我认为你担心人为的改变会有副作用是对的。但我认为应用方面的问题是。。。您的应用程序对您未考虑的记录还有什么作用


如果零行是唯一的,并且您对该列没有任何其他约束,则可以插入该行。

在定义为
IDENTITY(1,1)
的列中插入一个0应该可以,因为您插入的值超出了为自动生成的值分配的范围(假设
int
[1..2147483647]
),这意味着您的任意值不会干扰自动值生成

这可能会影响您的应用程序,但可能性不大。例如,如果您的应用程序将0引用视为特殊值,并不是因为它是0,而是因为
User
中没有
SequenceNumber=0
的行,则添加0行将破坏该逻辑

或者,您可以将
UserNotes.UserID
中的所有零替换为null。在我看来,这是一种更自然的方式来指定“未知”另一方面,在我看来,它也更有可能影响应用程序,而且可能影响的程度也更大——特别是如果应用程序已经设置为使用零作为特殊参考值,并且其设计方式能够在读取查询结果时立即区分0和NULL

无论哪种方式,您似乎面临着一个更大的问题。
UserNotes.UserID
被允许包含不存在的0引用,这是一个在
User.SequenceNumber
列中找不到的值,这意味着
UserNotes.UserID
没有正式定义为外键。如果没有正式的foreign key/primary key关系,也没有引用完整性(无论如何从数据库的角度来看),即使在执行清理之后,
UserNotes
表也容易获得不存在的引用


您应该考虑在数据库级别建立表之间的形式关系。这可能需要对应用程序进行额外的更改(取决于它是如何设计的)。,但这将是一项合理的时间/精力投资,并可能在将来为您省去一些麻烦。

实际问题是什么?在标识设置为1开头的情况下,当我将零行添加到上面描述的生产表中时,零行是否会导致问题?它在五行测试表中工作正常,但如果这会导致问题,我会有很多问题后来出现了更大的问题。我添加了0列,它一直运行良好。感谢您的帮助。谢谢您,此项目是我第一次在.net中工作,也是我第一次使用SQL。数据库是继承的,但web代码是新的。更新的原因是修复所有DB问题,例如缺少引用完整性。添加0 User.SequenceNumber允许我轻松地在表之间建立引用完整性。