sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan vælger jeg kun en del af en enorm binær (fil)?

Ok, jeg fandt ud af det. Måden at gøre dette på er med substring-funktionen, som MS præcist siger fungerer med binære filer. Hvad de ikke siger er, at understrengen kun vil returnere 8.000 bytes, hvilket er det, der kastede mig ud.

Med andre ord, hvis blob-datatypen er billede, og du bruger denne:

 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)

Men hvis du erklærer en variabel af varbinary(max) og blob-feltdatatypen er varbinary(max) - eller en størrelse, der er nyttig for dig - så brug delstrengfunktionen til at bringe den delvise binære tilbage til den variabel, du erklærede. Det her fungerer fint. Bare sådan her:

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

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

Spørgsmålet blev stillet tidligere, hvorfor bruge SQL til at gemme fildata? Det er et gyldigt spørgsmål; Forestil dig, at du er nødt til at replikere data som filer til hundredvis af forskellige klientenheder (såsom iPhones), hver pakke er unik fra den anden, fordi forskellige klienter har forskellige behov, så er det meget nemmere at programmere filpakkerne som blobs i en database imod, end det ville være at programmæssigt grave gennem mapper for at finde den rigtige pakke til at streame ud til klienten.



  1. Sikker MySQL-adgangskode på delt hosting

  2. Trim bagerste rum med PostgreSQL

  3. Hvordan får man kvartal fra dato i Oracle?

  4. En oversigt over Quests nyeste databaseovervågningstjeneste - Spotlight Cloud