sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo selecciono solo una parte de un enorme binario (archivo)?

Bien, lo descubrí. La forma de hacerlo es con la función de subcadena, que MS dice con precisión que funciona con binarios. Lo que no dicen es que la subcadena devolverá solo 8,000 bytes, que es lo que me desconcertó.

En otras palabras, si el tipo de datos del blob es una imagen y usa esto:

 select substring(BlobField,0,100000000) 
 from TableWithHugeBlobField
 where ID = SomeIDValue

 --all you'll get is the first 8K bytes (use DataLength function to get the size)

Sin embargo, si declara una variable de varbinary(max) y el tipo de datos del campo blob es varbinary(max), o algún tamaño que le resulte útil, utilice la función de subcadena para recuperar el binario parcial en la variable que declaró. Esto funciona bien. Así:

 Declare @PartialImage varbinary(max) 
 select @PartialImage = substring(BlobField, 0, 100000000) --1GB
 from TableWithHugeBlobField
 where ID = SomeIDValue

 select DataLength(@PartialImage) -- should = 1GB

La pregunta se planteó anteriormente, ¿por qué usar SQL para almacenar datos de archivos? Es una pregunta válida; imagine que tiene que replicar datos como archivos en cientos de dispositivos cliente diferentes (como iPhones), cada paquete es único entre sí porque los diferentes clientes tienen necesidades diferentes, luego almacenar los paquetes de archivos como blobs en una base de datos es mucho más fácil de programar en contra de lo que sería excavar mediante programación a través de las carpetas para encontrar el paquete correcto para transmitir al cliente.