Hi
Not sure if this will help, but the following example packs a couple of varbinarys with 4 integers in both endians (assuming 4 bytes per integer). Then unpacks them. You shouldn't need to nibble through the binary byte by byte.
declare @i1 int = 1234
declare @i2 int = 5678
declare @i3 int = 9101
declare @i4 int = 1121
declare @vb1 varbinary(16)
declare @vb2 varbinary(16)
set @vb1 = CAST(@i1 as varbinary(16))
set @vb1 = @vb1 + CAST(@i2 as varbinary(16))
set @vb1 = @vb1 + CAST(@i3 as varbinary(16))
set @vb1 = @vb1 + CAST(@i4 as varbinary(16))
set @vb2 = CAST(REVERSE(CAST(@i1 as varbinary(16))) as varbinary(16))
set @vb2 = @vb2 + CAST(REVERSE(CAST(@i2 as varbinary(16))) as varbinary(16))
set @vb2 = @vb2 + CAST(REVERSE(CAST(@i3 as varbinary(16))) as varbinary(16))
set @vb2 = @vb2 + CAST(REVERSE(CAST(@i4 as varbinary(16))) as varbinary(16))
SELECT @vb1
SELECT @vb2
SELECT cast(substring(@vb1,1,4) as int)
, cast(substring(@vb1,5,4) as int)
, cast(substring(@vb1,9,4) as int)
, cast(substring(@vb1,13,4) as int)
SELECT cast(cast(reverse(substring(@vb2,1,4)) as varbinary(4)) as int)
, cast(cast(reverse(substring(@vb2,5,4)) as varbinary(4)) as int)
, cast(cast(reverse(substring(@vb2,9,4)) as varbinary(4)) as int)
, cast(cast(reverse(substring(@vb2,13,4)) as varbinary(4)) as int)
So applying that to your insert and reversing it as in your example, would give us the following
insert tbl_LotData(lotnumber, StartDTS, EndDTS,LotQuantity
,block0
,block1
...
)
values (@lotnumber, @startDTS,@endDTS,@LotQuantity,
cast(cast(reverse(substring(@block,1,4)) as varbinary(4)) as int)
, cast(cast(reverse(substring(@block,5,4)) as varbinary(4)) as int)
...
)