STUFF()函数是针对字符操作而非字节操作的。

解决方案 »

  1.   

    SET @bin =  cast(left(@bin,69)  as binary(69))
               +0x02
               +cast(right(@bin,58) as binary(58))
      

  2.   

    libin_ftsafe(子陌红尘) 的方法也有问题。
    1> declare @a binary(20),@b binary(20)
    2> set @a=0xa102a304a506a708a910a112a314
    3> set @b=@a
    4> print @a
    5> set @a=convert(binary(20),stuff(@a,10,1,0x02))
    6> set @b=cast(left(@b,9) as binary(9))+0x02+cast(right(@b,10) as binary(10))
    7> print @a
    8> print @b
    9> go
    (1 row affected)
    (1 row affected)
    0xA102A304A506A708A910A112A314000000000000
    (1 row affected)
    (1 row affected)
    0xA102A304A506A708A910A112A314000002000000
    0xA102A304A506A708A902A708A910A112A3140000
    1>
      

  3.   

    改了下!!!!
    declare @a binary(20),@b binary(20),@c binary(20)
    set @a=0xa102a304a506a708a910a112a314
    set @b=@a
    set @c=@a
    print @a
    set @a=convert(binary(20),stuff(@a,10,1,0x02))
    --set @b=cast(left(@b,9) as binary(9))+0x02+cast(right(@b,10) as binary(10))
    set @b = cast(substring(@c,1,9) + 0x02 + substring(@c,11,10) as binary(20))
    print @a
    print @b
    go
    0xA102A304A506A708A910A112A314000000000000
    0xA102A304A506A708A910A112A314000002000000
    0xA102A304A506A708A902A112A314000000000000这下就正确了 还是用substring来操作~