2011-10-19 19 views
5

Tengo una tabla Employee en la base de datos SQLite. Cuya clave principal es "ID" de tipo GUID. Trato de encontrar el registro con id = guid 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3' con la siguiente consulta sin suerte:Usando guid en sqlite seleccione donde guid se almacena en sqlite db como binarios

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

¿Puede alguien decirme cómo debo escribir la consulta?

Gracias,

+0

¿cómo sabes que es el ID de la derecha? ¿Puedes simplemente 'seleccionar * del empleado' o puedes' seleccionar * del empleado donde empleado.id como '% 8828%' '(puede devolver varios registros) para verificar el valor devuelto –

+0

Sé que hay una fila con tal ID existe en la base de datos mostrando la tabla completa en el explorador de servidor sqlite en VS. – sean717

+0

Quizás VS cambie un poco para verlo bien (como agregar guiones). Intenta seleccionar sin ellos. Intenta usar otra IU en el SQLite. –

Respuesta

6

El GUID probablemente se está almacenando como un blob binario; Prueba:

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

Sí, encontré que el GUID está efectivamente almacenado como un binario. Pero la sintaxis que diste todavía no funciona, gracias. – sean717

+0

Pruebe: seleccione hex (Id) del límite de empleado 10; –

+0

sean717. ¿Has encontrado una solución? – andySF

7

Esta es una vieja pregunta, pero aparece con búsquedas y aunque la respuesta seleccionada es correcta, puede que no funcione para todos fácilmente. Por ejemplo, al usar enlaces .NET a SQLite.

La razón es que cuando el GUID está en formato a8828ddf-ef22-4d36-935a-1c66ae86ebb3 no puede simplemente eliminar los guiones y ponerlo en X'...'. El GUID se divide en varias partes y la base de datos almacena el binario de forma diferente.

Cuando el GUID es a8828ddf-ef22-4d36-935a-1c66ae86ebb3 se almacenará en little endian como X'df8d82a822ef364d5a93b3eb86ae661c'. Tenga en cuenta que todas las partes se invierten dentro de la cadena.

Por supuesto, si inserta los datos directamente eliminando los guiones como X'a8828ddfef224d36935a1c66ae86ebb3', también puede recuperarlos con eso, pero si permite que .NET maneje la conversión, GUID se almacenará como pequeñas representaciones de bytes endian.

(Esto asume toda la arquitectura endian pequeño, no se han probado en big endian)