设置varbinary中的位

时间:2018-11-17 21:44:32

标签: sql-server

我有一个varbinary列,其位数可以大于32。如何设置/测试在varbinary列中具有其位数的位?

我试图做

convert(varbinary(max), power(2, @bit_number))

让我得到varbinary,但仅限于浮点数。

有一个扩展的存储过程,可以在数据库中对两个varbinaries进行或运算,但是我需要传递这个长的varbinary掩码,或者也许有一种方法可以知道它的编号来更新varbinary中的某个字节?

1 个答案:

答案 0 :(得分:0)

您始终可以将varbinary转换为字符串,对其进行操作,然后将其转换回。例如,尝试以下操作:

DECLARE @Foo varbinary(max)
SELECT @Foo = 0x0123456789abcdef0123456789abcdef

DECLARE @Temp varchar(max)
SELECT @Temp = CONVERT(varchar(max), @Foo, 1)
DECLARE @ByteOffset integer;
SELECT @ByteOffset = 3 --offset into varbinary to access
DECLARE @GetValue binary(1)
SELECT @GetValue = CONVERT(binary(1), '0x' + SUBSTRING(@Temp, (@ByteOffset * 2) + 3, 2),1 )
PRINT @GetValue -- fetch the value at @ByteOffset

DECLARE @SetValue binary(1)
SELECT @SetValue = 0x04 --value to modify
DECLARE @Foo2 varbinary(max)
SELECT @Foo2 = CONVERT(varbinary(max), SUBSTRING(@Temp, 1, (@ByteOffset * 2) + 2) + SUBSTRING(CONVERT(varchar, @SetValue, 1), 3, 2) + SUBSTRING(@Temp, (@ByteOffset * 2) + 5, LEN(@Temp)), 1)
PRINT @Foo2 --contains the new varbinary with @ByteOffset updated with @SetValue