2013-06-07 13 views
6

này MSDN page trạng thái:Tại sao cột hàng tuần có thể vô hiệu hóa tương đương ngữ nghĩa với một varbinary (8)?

Một cột rowversion nonnullable là ngữ nghĩa tương đương với một nhị phân (8) cột. Cột hàng tuần có thể vô hiệu hóa là ngữ nghĩa tương đương với cột varbinary (8).

Cho rằng cột hàng tuần không thể so sánh được ngữ nghĩa tương đương với cột nhị phân (8), tại sao cột hàng tuần có thể tương đương ngữ nghĩa với cột varbinary (8) chứ không phải cột nhị phân không thể dùng được (8)?

Điều này có nghĩa là cột hàng tuần có thể vô hiệu hóa không tương đương ngữ nghĩa ngữ nghĩa với cột nhị phân không thể (8) không?

Ví dụ cụ thể của tôi là tôi sẽ có một bảng chứa các bản sao của các hàng từ các bảng khác. Một số bảng nguồn có một rowversion và những người khác thì không. Do đó, cột "rowversion" trong bảng của tôi phải chấp nhận giá trị null. Tôi muốn hiểu tại sao (hoặc nếu) cột nên được varbinary (8) null thay vì nhị phân (8) null.

+0

@Andomar Tôi đã cập nhật câu hỏi của mình để giải thích lý do tôi muốn biết. –

+0

Tuyệt, bây giờ tốt hơn. Không thể rút lại một cuộc bỏ phiếu gần. – Andomar

+2

Một cột kiểu 'nhị phân (8)' sẽ ** luôn luôn ** chứa 8 byte dung lượng lưu trữ - bất kể những gì được lưu trữ bên trong nó - ngay cả 'NULL'. Một phiên bản nullable của nó - 'varbinary (8)' - tuy nhiên sẽ chỉ chiếm nhiều không gian thực sự cần thiết (cộng thêm một số chi phí). –

Trả lời

1

Một nhị phân (8) là một nhị phân có chính xác 8 byte. Một varbinary (8) là một nhị phân có tối đa 8 byte. Một null là 0 byte. Nó phải là một biểu mẫu có thể có 0 hoặc 8 byte. Vì vậy, nó phải là varbinary.

+0

Eh ... Tôi không mua nó. Cụ thể, tôi có thể có một nhị phân nullable (8) (hoặc bất kỳ loại dữ liệu cố định chiều rộng khác). –

+0

Không mua gì? Các giá trị null được ghi trong các bit riêng lẻ trên một byte riêng biệt cho hàng dữ liệu. Cột nullable đầu tiên thêm một byte vào bộ nhớ, và mỗi thứ tám nullable sau đó thêm một byte vào bộ nhớ.'Null Ness' được lưu trữ theo nghĩa bóng trên 'tiêu đề' của hàng. Khi bit đó cho null được thêm vào cho nó là null, nó có cùng dung lượng như một varbinary. – jerrylagrou

+0

Tôi đang nói rằng đặc tính không có giá trị của một cột và cho dù đó là một cột có độ dài thay đổi là các khái niệm trực giao. Cụ thể đối với trường hợp này, tại sao nullability của cột rowversion nhất thiết ngụ ý rằng nó là một varbinay (8) NULL và không nhị phân (8) null? Trước đây ngụ ý rằng nó có thể là một giá trị nhị phân của bất kỳ độ dài lên đến (và bao gồm) 8 byte (hoặc null) trong khi sau đó ngụ ý rằng nó có thể là một giá trị nhị phân của 8 byte (hoặc null). –

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