2010-06-02 69 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

相关问题