7

Jaki jest maksymalny rozmiar pliku, który mogę wstawić przy użyciu varbinary (max) w SQL Server 2008 R2? Próbowałem zmienić maksymalną wartość w kolumnie na więcej niż 8 000 bajtów, ale nie pozwala mi to, więc domyślam się, że maksymalna to 8 000 bajtów, ale od this article on MSDN, mówi ona, że ​​maksymalny rozmiar pamięci to 2^31- 1 bajtów:SQL Server 2008 R2 Varbinary Max Size

varbinary [(n | maks)]

zmiennej długości danych binarnych. n może mieć wartość od 1 do 8 000. max wskazuje, że maksymalny rozmiar pamięci to 2^31-1 bajtów. Rozmiar pamięci to rzeczywista długość wprowadzonych danych + 2 bajty. Wprowadzone dane mogą mieć długość 0 bajtów. Nazwa ANSI SQL dla varbinary jest zmienna binarna .

Jak mogę przechowywać większe pliki w polu varbinary? Ja nie rozważa wykorzystanie FILESTREAM ponieważ pliki Chcę zapisać się od 200kb do 1MB max Kod używam:

UPDATE [table] 
SET file = (SELECT * FROM OPENROWSET (BULK 'C:\A directory\A file.ext', SINGLE BLOB) alias) 
WHERE idRow = 1 

byłem w stanie wykonać ten kod z powodzeniem do plików mniejsza lub równa niż 8000 bajtów. Jeśli spróbuję z plikiem o rozmiarze 8001 bajtów, to się nie powiedzie. Moje pole pliku w tabeli ma pole o nazwie "file" typ varbinary(8000), które, jak powiedziałem, nie mogę zmienić na większą wartość.

+1

Jak próbowałeś? Czy możesz pokazać kod użyty do tego i strukturę tabeli dla tabeli? Również nie ma czegoś takiego jak "nvarbinary". –

+0

Niestety chodziło mi o varbinary (max), dodałem również kod, którego użyłem, dziękuję bardzo –

+0

Czy sprawdziłeś ustawienia trybu zgodności? –

Odpowiedz

15

Nie mogę odtworzyć tego scenariusza. Próbowałem następujące:

USE tempdb; 
GO 

CREATE TABLE dbo.blob(col VARBINARY(MAX)); 

INSERT dbo.blob(col) SELECT NULL; 

UPDATE dbo.blob 
    SET col = (SELECT BulkColumn 
    FROM OPENROWSET(BULK 'C:\Folder\File.docx', SINGLE_BLOB) alias 
); 

SELECT DATALENGTH(col) FROM dbo.blob; 

Wyniki:

-------- 
39578 

Jeśli to jest uzyskiwanie ograniczona 8K wtedy myślę, że albo jeden z następujących warunków:

  1. Kolumna jest faktycznie VARBINARY(8000).

  2. Wybierasz dane w Management Studio i analizujesz długość danych, które są tam wyświetlane. Ogranicza się to maksymalnie do 8192 znaków w wynikach do tekstu, jeśli tak jest, więc używanie wartości DATALENGTH() bezpośrednio w stosunku do kolumny jest znacznie lepszym rozwiązaniem.

1

bym śmiał powiedzieć, użyć strumienia pliku dla plików większych niż 1 MB w oparciu o następujące od: MS TechNet | FILESTREAM Overview.

W SQL Server, BLOB może być standardowe dane varbinary(max) przechowująca danych w tabelach lub FILESTREAM varbinary(max) obiektów, które przechowują danych w systemie plików. Rozmiar i użycie danych określa, czy należy używać pamięci bazy danych lub pamięci masowej systemu plików. Jeśli następujące warunki są spełnione, należy rozważyć użycie FILESTREAM:

  • obiektów, które są przechowywane są przeciętnie większe niż 1 MB.
  • Szybki dostęp do odczytu jest ważny.
  • Tworzysz aplikacje, które używają warstwy środkowej dla logiki aplikacji.

Dla mniejszych obiektów, przechowywanie varbinary(max) BLOB w bazie danych często zapewnia lepszą wydajność przesyłania strumieniowego.

1

"SET TEXTSIZE" Określa rozmiar varchar(max), nvarchar(max), varbinary(max), text, ntext i danych obrazowych zwracanych przez SELECT oświadczeniu.

select @@TEXTSIZE 

Kierowca SQL Server Macierzysta klient i ODBC SQL Server Macierzysta klient OLE DB Provider for SQL Server automatycznie ustawić TEXTSIZE do 2147483647 podczas podłączania. Maksymalne ustawienie dla SET TEXTSIZE to 2 gigabajty (GB), określone w bajtach. Ustawienie 0 resetuje rozmiar do wartości domyślnej (4 KB).

Jak wspomniano, w przypadku dużych plików powinieneś preferować strumień plików.

Powiązane problemy