Создайте двоичную строку из нулей с переменной длиной
Какой самый элегантный способ создать строку двоичных нулей, типа 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))