Создайте двоичную строку из нулей с переменной длиной

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

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

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

(Это даже не вписывается в линию...) Есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ: код должен работать для @size > 8000,

3 ответа

Решение

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

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

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

; 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 )

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

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))
Другие вопросы по тегам