sql >> Database >  >> RDS >> Sqlserver

Hoe selecteer ik slechts een deel van het enorme binaire bestand (bestand)?

Oké, ik heb het bedacht. De manier om dit te doen is met de substring-functie, die volgens MS nauwkeurig werkt met binaire bestanden. Wat ze niet zeggen, is dat substring slechts 8.000 bytes zal retourneren, wat mij deed rijzen.

Met andere woorden, als het blob-gegevenstype afbeelding is en u dit gebruikt:

 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)

Als u echter een variabele van varbinary(max) declareert en het gegevenstype van het blobveld is varbinary(max) - of een grootte die nuttig voor u is - gebruik dan de functie substring om het gedeeltelijke binaire bestand terug te brengen in de variabele die u hebt gedeclareerd. Dit werkt gewoon goed. Gewoon zo:

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

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

De vraag werd eerder gesteld, waarom zou u SQL gebruiken om bestandsgegevens op te slaan? Het is een geldige vraag; stel je voor dat je gegevens als bestanden moet repliceren naar honderden verschillende client-apparaten (zoals iPhones), waarbij elk pakket uniek is van de andere omdat verschillende clients verschillende behoeften hebben, dan is het opslaan van de bestandspakketten als blobs in een database een stuk eenvoudiger te programmeren dan zou het zijn om programmatisch door mappen te graven om het juiste pakket te vinden om naar de client te streamen.



  1. Een lijst maken van alle tabellen die in een bepaalde opgeslagen procedure in oracle worden gebruikt?

  2. Trage import van grote MySQL-dump

  3. SQL Server-prestaties TOP IO-query -2

  4. MySQL VARCHAR(255) UTF8 is te lang voor de sleutel, maar de maximale lengte is 1000 bytes