SQL Server中的数据库ID可能是否定的?
我知道你总共可以拥有32767(32位和64位)(Maximum Capacity SQL Server)
我知道前几个数据库ID是为master,model,msdb和tempdb保留的,32767是隐藏的系统资源数据库。
我从未见过负数据库ID,但我想确认这是不可能的。
答案 0 :(得分:2)
简而言之,它们可以,但它们几乎从未如此。
在主DB中,sysdatabases表中的id列被定义为带有种子1和增量1的标识列。这意味着,默认情况下,SQL Server将始终为您创建的任何数据库分配正DBID。 / p>
但是,可以更改,您可以为标识列指定负种子和增量,因此您可以将sysdatabases表的标识列重置为-1,-1,并且您创建的下一个数据库将具有ID -1 ,然后-2,等等-1是一个完全有效的16位整数值,所以标识字段应该没有问题。您可能有一个问题,SQL Server通过检查max DBID天真地检查它管理的数据库的数量。我不希望MSS以这种愚蠢的方式进行检查,但是发生了一些奇怪的事情,而且我从未见过一个包含超过几十个DB的实例。
答案 1 :(得分:-1)
在实践中,如果您认为可能用完了身份值而不是负值,那么您应该考虑使用bigint而不是int。但是,当桌子保证某些特殊情况时,我已经看到它们偶尔使用。这些通常使用set identity_insert on输入。
例如,在我工作的一个地方,我们的系统用户有负面的ID。由于在我们的人员表格中输入的数据是由谁输入的,因此很容易从实际人员输入的系统条目中排除系统条目(来自导入等),这有助于研究数据问题。当然,我们可以轻松地查看id是否为13856799但是< 0更容易记住。