Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment sélectionner juste une partie d'un énorme binaire (fichier) ?

OK, j'ai compris. Pour ce faire, utilisez la fonction de sous-chaîne, qui, selon MS, fonctionne avec les binaires. Ce qu'ils ne disent pas, c'est que la sous-chaîne ne renverra que 8 000 octets, ce qui m'a déconcerté.

En d'autres termes, si le type de données blob est image et que vous utilisez ceci :

 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)

Cependant, si vous déclarez une variable de varbinary(max) et que le type de données du champ blob est varbinary(max) - ou une taille qui vous est utile - utilisez la fonction substring pour ramener le binaire partiel dans la variable que vous avez déclarée. Cela fonctionne très bien. Juste comme ça :

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

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

La question a été posée plus tôt, pourquoi utiliser SQL pour stocker les données des fichiers ? C'est une question valable; imaginez que vous devez répliquer des données sous forme de fichiers sur des centaines de périphériques clients différents (comme des iPhones), chaque package étant unique car différents clients ont des besoins différents, puis stocker les packages de fichiers sous forme de blobs sur une base de données est beaucoup plus facile à programmer plutôt que de fouiller par programmation dans les dossiers pour trouver le bon paquet à diffuser vers le client.