sql >> Databasteknik >  >> RDS >> Sqlserver

Hur väljer jag bara en del av en enorm binär (fil)?

Okej, jag kom på det. Sättet att göra detta är med delsträngsfunktionen, som MS exakt säger fungerar med binärer. Vad de inte säger är att delsträngen bara kommer att returnera 8 000 byte, vilket är det som kastade mig.

Med andra ord, om blobdatatypen är bild och du använder detta:

 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 om du deklarerar en variabel av varbinary(max) och blobfältets datatyp är varbinary(max) - eller någon storlek som är användbar för dig - använd sedan delsträngsfunktionen för att ta tillbaka den partiella binären till variabeln du deklarerade. Det här fungerar bra. Precis så här:

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

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

Frågan ställdes tidigare, varför använda SQL för att lagra fildata? Det är en giltig fråga; Föreställ dig att du måste replikera data som filer till hundratals olika klientenheter (som iPhones), varje paket är unikt från det andra eftersom olika klienter har olika behov, då är det mycket lättare att programmera filpaketen som blobbar i en databas mot än det skulle vara att programmatiskt gräva igenom mappar för att hitta rätt paket att strömma ut till klienten.



  1. Släpp främmande nyckel bara om den finns

  2. valideringslänk via e-post

  3. Common Sense Licensing Changes för SQL Server 2014 Standard Edition

  4. Hur skickar jag in lösenordet till pg_dump?