2010-12-14 12 views
26

Mi scuso per aver chiesto che cosa sembra una domanda stanca, ma nessuna risposta del forum o documentazione che ho letto sembra fornire una risposta adeguata.Riga GUID riga MS SQL Server

Qual è lo scopo della proprietà Row GUID Column in MS SQL Server 2008?

Lasciatemi approfondire. Ho visto "Non usare GUID come PK" ripetuto come risposta a questa domanda, che sembra essere completamente estranea a me. Se imposto lo Row GUID Column, si sta costringendo la colonna GUID come chiave primaria o qualcosa del genere?

di riformulare la mia domanda iniziale: Se ho una colonna GUID nel mio tavolo che non gioca alcun ruolo nella indicizzazione, faccio da guadagnare qualcosa da impostare quella colonna GUID come il Row GUID Column?

risposta

33

Consente di utilizzare la variabile $ ROWGUID anziché il nome della colonna. Viene utilizzato principalmente per la replica di tipo merge. Non impone la colonna GUID per PK, è possibile dichiarare esplicitamente solo i PK. La risposta alla tua ultima domanda è no, a meno che tu non abbia in programma di implementare Merge Replication.

+0

Così chiaro, così conciso, grazie a tutti> _ instantmusic

+1

Bello. E solo FYI, a partire da SQL Server 2012, viene anche utilizzato per la funzionalità [FILESTREAM] (https://msdn.microsoft.com/en-us/library/gg471497.aspx) :-). –

1

La colonna RowGUID viene utilizzata per la replica. Consente al motore di replica di unirsi correttamente. Quando la replica è abilitata, questa colonna verrà aggiunta alle tabelle che non dispongono già di una colonna RowGUID.

Non si guadagna nulla usandolo a meno che non si preveda di implementare la replica. È equivalente all'impostazione di newsequentialid() come valore predefinito per una colonna.

0

Non impone che sia la chiave primaria, la proprietà si limita a determinare se il campo verrà automaticamente aggiornato. Se si desidera creare il GUID nell'applicazione e inviarlo, impostare questa proprietà su false, altrimenti impostarla su true e consentire al database di crearla automaticamente. Se il campo è l'indice cluster, assicurarsi che il valore predefinito sia NEWSEQUENTIALID().

7

Il ROWGUIDCOLUMN viene utilizzato principalmente negli scenari di replica in cui è necessario combinare il contenuto di diverse tabelle dei database satelite in un unico DB centrale.

L'aggiunta di un ROWGUIDCOLUMN alle tabelle da replicare assicura che il motore di replica possa utilizzare il campo ROWGUIDCOLUMN per distinguere tra i record con gli stessi valori di chiave primaria.

Poiché si tratta di una funzione utilizzata principalmente per garantire una replica fluida, è consigliabile evitare di utilizzare questa colonna come chiave primaria. La tua chiave primaria dovrebbe essere un'entità aziendale logica sotto il tuo controllo e che non influisce sulle caratteristiche operative di funzionalità specifiche del motore DB scelto.

+0

Spiegazione brillante! –

+0

Mille grazie. Sono contento :) –

+0

Rich (e @Jeffrey): come si contrassegna una colonna come 'ROWGUIDCOL' _ensure_" che il motore di replica può utilizzare il campo ROWGUIDCOLUMN per distinguere tra i record con gli stessi valori della chiave primaria "quando non garantisce unicità?Sì, per impostazione predefinita il valore sarà quasi sempre univoco, ma nulla impedisce l'aggiunta manuale di valori duplicati, al di fuori dell'aggiunta di un indice/vincolo univoci. –

0

No, non lo forza come PK. Significa che non è possibile creare un secondo identificatore univoco e specificarlo come colonna Riga GUID