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