0

varbinary(max)如果长度是在运行时指定的(例如,在存储过程中),那么创建类型为 的二进制零字符串的最优雅方法是什么?

我可以使用该REPLICATE函数来做到这一点,但这涉及到很多转换:

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

(它甚至不适合在线......)有没有更好的方法来做到这一点?

编辑:代码应该适用于@size > 8000

4

3 回答 3

1

原始形式

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

仍然最适合我的需求。

于 2013-05-27T08:16:55.873 回答
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))
于 2013-02-23T00:14:08.513 回答
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 )
于 2013-02-23T01:57:25.863 回答