2012-09-13 33 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更容易記住。