7

Was ist die maximale Größe einer Datei, die ich mit Varbinary (max) in SQL Server 2008 R2 einfügen kann? Ich habe versucht, den Maximalwert in der Spalte auf mehr als 8.000 Bytes zu ändern, aber es lässt mich nicht, also ich schätze das Maximum ist 8.000 Bytes, aber von this article on MSDN, es sagt, dass die maximale Speichergröße ist 2^31- 1 Bytes:SQL Server 2008 R2 Varbinary Maximale Größe

varbinary [(n | max)]

variabler Länge Binärdaten. n kann ein Wert von 1 bis 8.000 sein. max zeigt an, dass die maximale Speichergröße 2^31-1 Byte beträgt. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Bytes. Die eingegebenen Daten können 0 Byte lang sein. Das ANSI-SQL-Synonym für varbinary ist binär variierend.

Wie kann ich größere Dateien in einem varbinary Feld speichern? Ich erwäge nicht einen Filestream verwenden, da die Dateien, die ich von 200kb bis 1MB max sind gespeichert werden soll, wird der Code Ich verwende:

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

ich in der Lage gewesen, dass Code erfolgreich auf Dateien auszuführen weniger oder gleich als 8000 Bytes. Wenn ich mit einer Datei 8001 Byte Größe versuche, wird es fehlschlagen. Mein Dateifeld in der Tabelle hat ein Feld namens "Datei" Typ varbinary(8000) was ich wie gesagt nicht zu einem größeren Wert ändern kann.

+1

Wie haben Sie es versucht? Können Sie den Code anzeigen, den Sie dazu verwendet haben, und die Tabellenstruktur für die Tabelle erstellen? Auch gibt es so etwas wie 'nvarbinary' nicht. –

+0

Entschuldigung, ich meinte varbinary (max), ich habe auch den Code hinzugefügt, den ich verwendet habe, vielen Dank –

+0

Haben Sie die Einstellungen für den Kompatibilitätsmodus überprüft? –

Antwort

15

Ich kann dieses Szenario nicht reproduzieren. Ich habe versucht, die folgenden:

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; 

Ergebnisse:

-------- 
39578 

Wenn dies bei 8K gekappt zu werden, dann würde ich vermuten, dass entweder eine der folgenden Bedingungen erfüllt ist:

  1. Die Säule ist eigentlich VARBINARY(8000).

  2. Sie wählen die Daten in Management Studio aus und analysieren die Länge der Daten, die dort angezeigt werden. Dies ist auf maximal 8192 Zeichen in den Ergebnissen auf Text begrenzt, wenn dies der Fall ist, ist die Verwendung von DATALENGTH() direkt gegen die Spalte ein viel besserer Ansatz.

1

ich würde es wagen, zu sagen, Datei-Stream für Dateien größer als 1 MB auf der Grundlage des folgenden von verwenden: MS TechNet | FILESTREAM Overview.

In SQL Server können BLOBs Standard varbinary(max) Daten sein, die die Daten in Tabellen oder FILESTREAM varbinary(max) Objekte speichern, die die Daten im Dateisystem speichern. Die Größe und Verwendung der Daten bestimmt ob Sie Datenbankspeicher oder Dateisystemspeicher verwenden sollten. Wenn die folgende Bedingungen erfüllt sind, sollten Sie überlegen FILESTREAM mit:

  • Objekte, die gespeichert werden, im Durchschnitt größer als 1 MB.
  • Schneller Lesezugriff ist wichtig.
  • Sie entwickeln Anwendungen, die eine mittlere Schicht für die Anwendungslogik verwenden.

Für kleinere Objekte, varbinary(max) BLOBs in der Datenbank zu speichern bietet oft bessere Streaming-Leistung.

1

"SET TEXTSIZE" Gibt die Größe der varchar(max), nvarchar(max), varbinary(max), text, ntext und Bilddaten durch eine Anweisung SELECT zurückgegeben.

select @@TEXTSIZE 

Der SQL Server Native Client ODBC-Treiber und SQL Server Native Client OLE DB-Provider für SQL Server automatisch TEXTSIZE-2147483647 beim Anschließen. Die maximale Einstellung für SET TEXTSIZE ist 2 Gigabyte (GB), in Byte angegeben. Eine Einstellung von 0 setzt die Größe auf den Standardwert (4 KB) zurück.

Wie erwähnt, sollten Sie für große Dateien den Dateistream bevorzugen.

Verwandte Themen