views:

1095

answers:

2

What is the most efficient way of reading just part of the binary data from a varbinary(MAX) field (not using FileStreams) in SQL Server 2008?

When writing data to the column the VarBinary.Write() function is available in T-SQL, allowing bytes to be written to the field incrementally, but there doesn't appear to be a similar function available for reading data.

I know of the DataReader.GetBytes() method in .Net which will select just the bytes you ask for, but does this carry a performance overhead with it? i.e. will the select in sqlserver read all of the bytes in the database, and then give the getBytes() method all of these bytes for it to take the subset of bytes requested from them?

Thanks for any help.

+3  A: 

You use SUBSTRING. This reads a snippet from your varbinary data on the server, and only returns the snippet to the client.

Remus Rusanu
+1 interesting! I had no idea I could use SUBSTRING on a VARBINARY column! :-)
marc_s
Very useful, thanks.
grrrrrrrrrrrrr
A: 

Using DataReader.GetBytes() is possible without overhead, afaik. But you'll have to call the ExecuteReader() with the CommandBehavior.SequentialAccess option.

d0rk