2012-09-13 32 views
1

SQL Server中的数据库Id可否为负数?SQL Server中的否定数据库ID

我知道,你可以有一个总32767(适用于32位和64位)(Maximum Capacity SQL Server)

我知道,最初的几个数据库ID被保留用于主,模型,MSDB和tempdb和32767是隐藏系统资源数据库。

我从来没有见过否定的数据库ID,但我想确认这是不可能的。

+0

可能的重复:http://stackoverflow.com/questions/2253649/are-sql-server-database-ids-always-positive – KeithS

+0

可能使用否定ID的示例是将QA团队所需的数据分开。例如,“imaginary_country_ID = -2”及其所有相关日期(商店,客户等)也有负号 – Andrejs

回答

0

总之,他们可以,但他们几乎从来没有。

在主数据库中,sysdatabases表中的id列被定义为具有种子1和增量1的标识列。这意味着,默认情况下,SQL Server将始终为您创建的任何数据库分配一个肯定的DBID。

但是,可以更改,您可以为标识列指定负种子和增量,以便您可以将sysdatabases表的标识列重置为-1,-1,并且您创建的下一个数据库将具有ID - 1,然后是-2等。-1是一个完全有效的16位整数值,所以身份字段应该没有问题。您可能与SQL Server通过检查最大DBID天真地检查它管理的DB数有一个问题。我不希望MSS以这样一种愚蠢的方式进行检查,但发生了一些奇怪的事情,而且我从来没有见过一个拥有多于几十个DB的实例。

+0

您将非常难以更改系统表的身份属性(至少在2005+ )。 –

0

实际上,如果您认为可能会用完标识值而不是负值,则应该考虑使用bigint而不是int。但是,当桌子需要一些特殊的特殊情况时,我偶尔会看到它们被偶尔使用。这些通常是使用set identity_insert on输入的。

例如,在我工作的一个地方,我们的系统用户有负面ID。由于输入到我们人员表中的数据是由谁输入的,因此很容易从实际人员输入的系统条目(来自进口等)中排除有助于研究数据问题的系统条目。当然,我们可以很容易地看看ID是13856799,但是< 0更容易记住。