SQL Server 中的负数据库 ID

8
SQL Server中的数据库ID可以为负数吗?
我知道在32位和64位系统中,最多可以有32767个数据库 (SQL Server的最大容量)
我知道前几个数据库ID保留给master、model、msdb和tempdb,而32767是隐藏的系统资源数据库。
我从未见过负数数据库ID,但我想确认这是不可能的。

可能是重复问题:https://dev59.com/vkvSa4cB1Zd3GeqPifFi - KeithS
负ID可能被用于保持QA团队所需的数据分离。例如,有“imaginary_country_ID = -2”,以及所有相关日期(商店、客户等)也具有负ID。 - Andrejs
2个回答

7
简而言之,它们可能是负数,但几乎从不这样。
在主数据库中,sysdatabases表中的id列被定义为具有种子1和增量1的标识列。这意味着,默认情况下,SQL Server将始终分配正DBID以创建任何数据库。
然而,可以进行更改,您可以为标识列指定负种子和增量,因此可以将sysdatabases表的标识列重置为-1,-1,然后创建的下一个数据库将具有ID -1,然后是-2等。-1是一个完全有效的16位整数值,因此标识字段应该没有问题。您可能会遇到SQL Server天真地通过检查最大DBID来检查其管理的DB数量的问题。我不希望MSS以这种愚蠢的方式进行检查,但更奇怪的事情已经发生了,我从未看到过有超过几十个DB的实例。

在系统表中更改标识属性会非常困难(至少在2005+版本中)。 - Aaron Bertrand

0

实际上,如果您认为可能会用尽标识值而不是负值,您应该考虑使用bigint而不是int。然而,在某些特殊情况下,我偶尔看到它们被使用,例如表格需要使用set identity_insert on输入的情况。

例如,在我曾经工作的一个地方,我们为系统用户设置了负ID。由于我们的人员表中输入的数据是由谁输入的标记的,因此很容易将系统条目(从导入等)排除在由实际人员输入的条目之外,这有助于研究数据问题。当然,我们可以轻松查看id是否为13856799,但< 0更容易记住。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接