Использование SQL Server 2008.
Пример таблицы:
CREATE table dbo.blobtest
(id int primary key not null,
name nvarchar(200) not null,
data varbinary(max) null)
Пример запроса:
select id, name,
cast((case when data is null then 0 else 1 end) as bit) as DataExists
from dbo.blobtest
Теперь запрос должен вернуть столбец «DataExists», который возвращает 0, если BLOB-объект равен нулю, иначе 1.
Все это прекрасно работает, но мне интересно, насколько это эффективно. т. е. нужно ли серверу SQL выполнять чтение всего большого двоичного объекта в его память, или есть какая-то оптимизация, чтобы он просто выполнял достаточно операций чтения, чтобы выяснить, является ли большой двоичный объект нулевым или нет?
(FWIW, опция sp_tableoption "типы большого значения вне строки" для этого примера установлена в OFF).