2010-06-02 61 views
7

有什麼辦法可以唯一標識一個數據庫嗎?在SQL Server中有沒有辦法唯一標識一個數據庫?

如果我們要將數據庫複製到另一臺機器上,則假定此實例不同。我檢查了主表,但無法識別任何可識別此信息的信息。

+0

我正在尋找同樣的東西 - 這些答案都不適用於我,因爲如果數據庫移動到另一臺計算機,目標是使ID無效。 – 2011-08-09 14:14:15

+0

這是一箇舊帖子,但我正在尋找相同的東西,並且我發現了對任何SQL Server都是唯一的校驗和(在安裝時生成),即使它是快速版也能正常工作。它位於HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ 100 \ Tools \ Setup中。但是我不確定是否改變這個校驗和會損害SQL Server ... – 2012-02-09 14:08:15

回答

3

您可以用一個唯一的名稱在其中創建一個表格,然後只需對其進行查詢即可。這是一個黑客位的,肯定的,但它會工作...

+0

+1。一個黑客之美:o) – 2010-06-02 11:35:26

+0

如果我複製一個數據庫,我不知道我們是否可以識別數據庫是否已經改變。不知道我是否錯過了一些東西,你能詳細說明一下嗎? – sraj 2010-06-04 07:22:55

+0

改變措詞推斷。你的意思是在另一臺機器上識別數據庫的方式,還是在複製到另一臺機器時更改數據庫的方式,或者確認數據庫在另一臺機器上發生了某種變化的方法? – 2010-06-07 09:28:05

1

創建返回ID /版本號的標量函數:

create function fnGetThisDBID() returns varchar(32) as begin 
    return ('v1.1,origin=server1') 
end 

select 'version is: ' + dbo.fnGetThisDBID() 
3

你可以把該信息相關的擴展屬性與數據庫本身:

USE AdventureWorks2008R2; 
GO 
EXEC sys.sp_addextendedproperty 
@name = N'MS_DescriptionExample', 
@value = N'AdventureWorks2008R2 Sample OLTP Database'; 
GO 

http://msdn.microsoft.com/en-us/library/ms190243.aspx

在你的情況,我會用這樣的:

EXEC sys.sp_addextendedproperty 
@name = N'UniqueID', 
@value = N'10156435463'; 

select objname, [name], [value] 
from fn_listextendedproperty (null, null, null, null, null, null, null) 
3

service_broker_guid in sys.databases非常接近你的要求。它是創建數據庫時生成的一個獨特信息,並在數據庫四處移動時保留(分離並附加,備份和恢復,服務器重命名等)。可以通過ALTER DATABASE ... SET NEW_BROKER;明確更改。

+0

需要與我想的完全相反。如果一個數據庫被複制到一個新的服務器上,那麼它必須被標記爲唯一的。如果我結合服務器名稱和ID,這可能會使它獨一無二。 – sraj 2010-06-04 07:25:35

相關問題