2011-10-19 27 views
5

Tôi có một bảng Employee trong cơ sở dữ liệu SQLite. Khóa chính của ai là "ID" của loại GUID. Tôi cố gắng để tìm ra kỷ lục với id = guid 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3' với truy vấn sau đây không có may mắn:Sử dụng guid trong sqlite chọn nơi guid được lưu trữ trong sqlite db dưới dạng nhị phân

SELECT * FROM Employee 
WHERE Employee.Id = 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3' 

bất cứ ai có thể cho tôi biết làm thế nào tôi nên viết các truy vấn?

Xin cảm ơn,

+0

làm cách nào để bạn biết đó là ID phù hợp? Bạn có thể chỉ 'chọn * từ Employee' hoặc bạn có thể' chọn * từ nhân viên mà employee.id thích '% 8828%' '(có thể trả về nhiều bản ghi) để kiểm tra giá trị trả về –

+0

Tôi biết có một hàng với ID đó tồn tại trong cơ sở dữ liệu bằng cách hiển thị toàn bộ bảng trong trình khám phá máy chủ sqlite trong VS. – sean717

+0

Có thể VS thực hiện một số thay đổi để xem nó độc đáo (như thêm dấu gạch nối). Hãy thử chọn mà không có chúng. Hãy thử sử dụng giao diện người dùng khác cho SQLite. –

Trả lời

6

GUID có thể được lưu trữ dưới dạng nhị phân nhị phân; hãy thử:

SELECT * FROM Employee 
WHERE Employee.Id = X'a8828ddfef224d36935a1c66ae86ebb3'; 
+0

Có, tôi thấy rằng GUID thực sự được lưu trữ dưới dạng nhị phân. Nhưng cú pháp bạn đưa ra vẫn không hoạt động, cảm ơn. – sean717

+0

Thử: chọn hex (Id) từ Giới hạn nhân viên 10; –

+0

sean717. bạn đã tìm ra giải pháp chưa? – andySF

7

Đây là câu hỏi cũ nhưng tìm kiếm và câu trả lời được chọn là đúng, nó có thể không hoạt động với mọi người dễ dàng. Ví dụ khi sử dụng .NET bindings to SQLite.

Lý do là khi GUID ở định dạng a8828ddf-ef22-4d36-935a-1c66ae86ebb3 bạn không thể chỉ xóa dấu gạch ngang và đặt nó vào X'...'. GUID nằm trong một số phần và cơ sở dữ liệu lưu trữ nhị phân khác nhau.

Khi GUID là a8828ddf-ef22-4d36-935a-1c66ae86ebb3, nó sẽ được lưu trữ ở mức nhỏ nhất là X'df8d82a822ef364d5a93b3eb86ae661c'. Lưu ý rằng tất cả các phần được đảo ngược trong chuỗi.

Tất nhiên nếu bạn chèn dữ liệu trực tiếp bằng cách xóa dấu gạch ngang là X'a8828ddfef224d36935a1c66ae86ebb3' bạn cũng có thể truy xuất nó, nhưng nếu bạn để .NET xử lý chuyển đổi, GUID sẽ được lưu trữ dưới dạng biểu diễn byte cuối.

(Điều này tất cả đều giả định kiến ​​trúc cuối cùng nhỏ, chưa được thử nghiệm trên thiết bị cuối lớn)

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