2010-12-14 73 views
26

Tôi xin lỗi vì đã hỏi những gì có vẻ như một câu hỏi mệt mỏi, nhưng không có phản hồi diễn đàn hoặc tài liệu tôi đã đọc dường như cung cấp một câu trả lời đầy đủ.MS SQL Server Row GUID Cột

Mục đích của thuộc tính Row GUID Column trong MS SQL Server 2008 là gì?

Hãy để tôi mở rộng điều đó. Tôi đã nhìn thấy "Không sử dụng GUID như PK" lặp đi lặp lại như là câu trả lời cho câu hỏi này, mà dường như hoàn toàn không liên quan đến tôi. Nếu tôi đặt Row GUID Column là nó buộc cột GUID là khóa chính hay gì đó?

Để rephrase câu hỏi ban đầu của tôi: Nếu tôi có một cột GUID trong bảng của tôi mà không đóng bất kỳ vai trò trong lập chỉ mục, tôi đứng để đạt được bất cứ điều gì từ thiết lập cột GUID như Row GUID Column?

Trả lời

33

Nó cho phép bạn sử dụng biến $ ROWGUID thay vì tên cột. Nó được sử dụng chủ yếu để nhân rộng hợp nhất. Nó không buộc cột GUID cho PK, bạn chỉ có thể khai báo PK một cách rõ ràng. Câu trả lời cho câu hỏi cuối cùng của bạn là không, trừ khi bạn có kế hoạch triển khai Hợp nhất Nhân rộng.

+0

Vì vậy, rõ ràng, ngắn gọn, cảm ơn tất cả mọi người> _ ​​ instantmusic

+1

Rất đẹp. Và chỉ FYI, bắt đầu từ SQL Server 2012, nó cũng được sử dụng cho [FILESTREAM] (https://msdn.microsoft.com/en-us/library/gg471497.aspx) chức năng :-). –

1

Cột RowGUID được sử dụng để nhân rộng. Nó cho phép công cụ sao chép hợp nhất chính xác. Khi nhân rộng được kích hoạt, cột này sẽ được thêm vào các bảng chưa có cột RowGUID.

Bạn sẽ không nhận được gì bằng cách sử dụng trừ khi bạn dự định triển khai bản sao. Nó tương đương với việc thiết lập newsequentialid() làm giá trị mặc định cho một cột.

0

Nó không buộc nó là khóa chính, thuộc tính chỉ xác định nếu trường sẽ được cập nhật tự động. NẾU bạn muốn tạo GUID trong ứng dụng và gửi nó vào, đặt thuộc tính này thành false, nếu không thì đặt nó thành true và để cơ sở dữ liệu tự động tạo nó. Nếu trường là chỉ mục nhóm, hãy đảm bảo giá trị mặc định là NEWSEQUENTIALID().

7

ROWGUIDCOLUMN được sử dụng chủ yếu trong các kịch bản sao chép nơi bạn cần kết hợp nội dung của một số bảng cơ sở dữ liệu vệ tinh vào một DB trung tâm.

Thêm ROWGUIDCOLUMN vào bảng đang được nhân rộng đảm bảo rằng công cụ sao chép có thể sử dụng trường ROWGUIDCOLUMN để phân biệt giữa các bản ghi có cùng giá trị khóa chính.

Vì đây là tính năng được sử dụng chủ yếu để đảm bảo sao chép mượt mà, bạn nên tránh sử dụng cột này làm khóa chính của mình. Khóa chính của bạn phải là một thực thể kinh doanh hợp lý dưới sự kiểm soát của bạn và không ảnh hưởng đến đặc điểm hoạt động của các tính năng cụ thể của công cụ DB đã chọn của bạn.

+0

Giải thích rõ ràng! –

+0

Rất cám ơn. Rất vui khi nó có ý nghĩa :) –

+0

Rich (và @Jeffrey): cách đánh dấu một cột là 'ROWGUIDCOL' _ensure_" mà công cụ nhân bản có thể sử dụng trường ROWGUIDCOLUMN để phân biệt giữa các bản ghi với cùng giá trị khóa chính "khi nó không đảm bảo tính duy nhất?Có, theo mặc định, giá trị sẽ gần như luôn là duy nhất, nhưng không có gì ngăn không cho thêm giá trị trùng lặp theo cách thủ công, ngoài việc thêm Chỉ mục/Ràng buộc duy nhất. –

0

Không có nó không ép buộc nó là PK. Nó có nghĩa là bạn không thể tạo ra một uniqueidentifier thứ hai và chỉ định đó là Row GUID Cột

Các vấn đề liên quan