sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu vybrat pouze část velkého binárního souboru (souboru)?

Dobře, přišel jsem na to. Způsob, jak toho dosáhnout, je pomocí funkce podřetězec, o které MS přesně říká, že pracuje s binárními soubory. Neříkají, že podřetězec vrátí pouze 8 000 bajtů, což mě vyhodilo.

Jinými slovy, pokud je datovým typem objektu blob image a použijete toto:

 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)

Pokud však deklarujete proměnnou varbinary(max) a datový typ pole blob je varbinary(max) – nebo nějaká velikost, která je pro vás užitečná – pak použijte funkci podřetězec k vrácení částečné binární hodnoty do proměnné, kterou jste deklarovali. Tohle funguje dobře. Přesně takto:

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

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

Otázka byla položena dříve, proč používat SQL k ukládání dat souborů? Je to platná otázka; Představte si, že musíte replikovat data jako soubory do stovek různých klientských zařízení (jako jsou iPhony), přičemž každý balíček je od druhého jedinečný, protože různí klienti mají různé potřeby, a pak je mnohem snazší naprogramovat ukládání balíčků souborů jako bloby do databáze. proti, než by bylo programově prohledávat složky, abyste našli správný balíček, který by se dal vysílat klientovi.



  1. Co je systém správy databází a relačních databází (RDBMS)

  2. Chyba MySQL 1118 (velikost řádku je příliš velká) při obnově databáze Django-mailer

  3. Chyba při provádění uložené procedury Oracle v SSRS:PLS-00306:nesprávný počet nebo typy argumentů ve volání

  4. Jak se připojit k databázi AWS MySQL / MariaDB RDS nebo EC2 z MySQL WorkBench