2010-06-02 13 views
7

C'è un modo per identificare univocamente un database?Esiste un modo in SQL Server per identificare univocamente un database?

Se dovessimo copiare un database su un'altra macchina, si presume che questa istanza sia diversa. Ho controllato le tabelle principali, ma non sono riuscito a identificare alcuna informazione che possa identificarlo.

+0

Sto cercando la stessa cosa, nessuna di queste risposte funziona anche per me, poiché l'obiettivo è che l'ID non sia valido se il database viene spostato su un altro computer. –

+0

È un vecchio post ma stavo cercando la stessa cosa e ho trovato il checksum (generato all'installazione) che è univoco per qualsiasi SQL Server e funziona anche se è un'edizione express. È su HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ 100 \ Strumenti \ Setup. TUTTAVIA non sono sicuro se la modifica di questo checksum danneggerebbe SQL Server ... –

risposta

3

È possibile creare una tabella con un nome univoco e fare semplicemente una ricerca. E 'un po' di hack, certo, ma in questo modo funziona ...

+0

+1. Una bellezza di un trucco: o) –

+0

Se copio un database, non sono sicuro se possiamo identificare se il database è cambiato. Non sono sicuro che mi manchi qualcosa, puoi approfondire un po 'di più per favore? – sraj

+0

che modifica l'inferenza della parola. Intendi per un modo di riconoscere un db su un'altra macchina, o un modo per far cambiare il db quando viene copiato su un'altra macchina, o un modo per confermare che il db sia in qualche modo cambiato sull'altra macchina? –

1

Creare una funzione scalare che restituisce un numero ID/Versione:

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

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

Si potrebbe mettere le informazioni in una proprietà estesa associata con il database stesso:

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

Nel tuo caso, vorrei usare qualcosa di simile:

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 arriva molto vicino a quello che chiedi. È un identificatore univoco generato quando il database viene creato e viene conservato quando il database viene spostato (scollegamento e collegamento, backup e ripristino, ridenominazione del server, ecc.). Può essere modificato in modo esplicito con ALTER DATABASE ... SET NEW_BROKER;.

+0

Avrò esattamente l'opposto di quello che penso. Se un database viene copiato su un nuovo server, questo deve essere contrassegnato come univoco. Se combino il nome del server e l'id, questo potrebbe renderlo unico. – sraj

Problemi correlati