Saya telah menggali di dalam database AdventureWorks2012 dan melihat Row_GUID digunakan dalam beberapa tabel.
Ada 2 bagian untuk pertanyaan saya:
Kapan saya harus memasukkan kolom Row_GUID?
Apa kegunaan dan manfaat kolom Row_GUID?
sumber
Saya telah menggali di dalam database AdventureWorks2012 dan melihat Row_GUID digunakan dalam beberapa tabel.
Ada 2 bagian untuk pertanyaan saya:
Kapan saya harus memasukkan kolom Row_GUID?
Apa kegunaan dan manfaat kolom Row_GUID?
ROWGUIDCOL
terutama digunakan untuk replikasi MERGE , dan juga diperlukan untukFILESTREAM
, tetapi dapat digunakan dalam skenario apa pun di mana Anda ingin kolom tetap terpisah dari kunci primer (misalnya dalam kasus di mana nilai kunci utama dapat berubah, tetapi Anda masih ingin menjadi dapat mengetahui baris mana yang sebelum dan sesudah perubahan).
USE tempdb;
GO
CREATE TABLE dbo.example
(
name sysname PRIMARY KEY,
rowguid uniqueidentifier NOT NULL DEFAULT NEWID() ROWGUIDCOL
);
INSERT dbo.example(name) VALUES(N'bob'),(N'frank');
SELECT * FROM dbo.example;
UPDATE dbo.example SET name = N'pat' WHERE name = N'bob';
UPDATE dbo.example SET name = N'bob' WHERE name = N'frank';
SELECT * FROM dbo.example;
DROP TABLE dbo.example;
Sekarang, jika replikasi, atau aplikasi Anda, atau apa yang Anda perhatikan, itu akan melihat bahwa:
Lihat di sini , di sini , dan bagian "Pertimbangan Foto" di sini untuk info lebih lanjut.
Menandai kolom yang
ROWGUIDCOL
memungkinkan direferensikan melalui$ROWGUID
kueri. Ini memungkinkan untuk membuat kueri lebih umum karena Anda tidak perlu mencari, per setiap tabel, apa kolom "unik" itu (ini cukup berguna untuk fitur seperti Replikasi dan FileStream seperti yang dicatat oleh @Aaron dan @Martin, masing-masing). ). Anda bisa membuat kueri yang dibangun di lapisan aplikasi, atau bahkan dalam Dynamic SQL, yang melakukan sesuatu sepertiSELECT $ROWGUID AS [ID] FROM {table_name}
dan hanya mengulangi daftar tabel.Hanya perlu diingat bahwa
ROWGUIDCOL
penunjukan itu tidak menegakkan keunikan. Anda masih perlu memberlakukannya melalui Kunci Utama, Indeks Unik, atau Kendala Unik. Opsi ini juga tidak menegaskan bahwa kolom tidak dapat diubah. Untuk itu Anda perluAFTER UPDATE
izin atau tingkat kolom Pemicu untukDENY UPDATE
pada kolom itu.Sebagai contoh:
Mengembalikan sesuatu yang mirip dengan:
Demikian pula, orang bisa menggunakan
$IDENTITY
untuk tabel yang memilikiIDENTITY
kolom.sumber