2013-02-22 4 views
0

Что является самым элегантным способом создания строки двоичных нулей типа varbinary(max), если длина указана во время выполнения (например, в хранимой процедуре)?Создать двоичную строку нулей с переменной длиной

Я мог бы сделать это с помощью функции REPLICATE, но включает в себя много литья:

CAST(REPLICATE(CAST(CAST(0 AS tinyint) AS varbinary(max)), @size) 
    AS varbinary(max)) 

(Он даже не помещается на линии ...) Есть ли лучший способ сделать это ?

EDIT: Код должен работать для @size > 8000.

+0

Возможно, вы можете скрыть свое выражение в функции, чтобы скрыть детали. –

ответ

0

Оригинальная форма

CAST(REPLICATE(CAST(CAST(0 AS tinyint) AS varbinary(max)), @size) 
    AS varbinary(max)) 

все еще подходит моим потребностям лучше всего.

0

Лучше или короче? :)

declare @size int 
set @size = 3 


select CAST(REPLICATE(CAST(CAST(0 AS tinyint) AS varbinary(max)), @size) AS varbinary(max)), 
     cast(replace(space(@size), ' ', 0x0) as varbinary(max)) 
+0

Извините, забыли упомянуть о важнейшем требовании - 'SPACE' не будет генерировать более 8000 символов ... – krlmlr

0
; with Foo as (
    select 1 as Size 
    union all 
    select Size * 2 
    from Foo 
    where Size < 65536) 
    select Size, Cast(Replicate(Char(0), Size) as VarBinary(MAX)) as WideZero 
    from Foo 
    option (maxrecursion 0) 
Смежные вопросы