DECLARE @Effect binary(20)一共20个字节,我怎么对每个字节赋值?C++有数组下标,这个sql要怎么写呢?

解决方案 »

  1.   

    http://www.cnblogs.com/ljhdo/p/4530293.html
      

  2.   

    直接赋值正常数值会帮你自动转成0x00XXXXXX的
      

  3.   

    如果字符串时不支持隐性转换
    e.g.
    SELECT CAST('aa' AS VARBINARY(100))
    DECLARE @BIN VARBINARY(20)=0x6161
    SELECT CAST(@BIN AS VARCHAR(2))
      

  4.   


    我想要实现这样的:
    Effect [0] = 1
    Effect [1] = 2
    Effect [2] = 3
    ....
    Effect [19] = 19怎么给每个字节设定自己想要的数值啊?
    你发的这个文章,我看了很多遍了,没讲怎么给每个字节赋值。。
      

  5.   


    如果我的binary有1000个字节,我是不是要写 0x0000000000000000000000000000000 ... 一共1000个位啊,
    不能给指定字节赋值么。。
    我不是要存字符串,我要存整数
    我要给指定字节,赋值不同的数值。为什么要这样做呢, 说说你的原因吧. 我要写一个sql调用存储过程,这个存储过程有个参数是binary(20)
    所以,我得定义一个binary(20),设后赋上我所希望的值,才行啊。
      

  6.   

    数据类型问题DECLARE @Effect binary(20)    -- binary 定长数据,非null时自动填满
    select @Effect = substring(convert(varbinary,1),4,1) + substring(convert(varbinary,2),4,1) + substring(convert(varbinary,3),4,1) -- 直接赋值
    select @Effect = substring(@Effect,1,4) + substring(convert(varbinary,5),4,1) + substring(@Effect,5,15)     -- 非 null 时替换指定位置数据
    select @Effect
      

  7.   

    你客户端可以用char数组吧 然后直接赋值给字段不行吗? 或者用steam 串数据流对象 进行赋值
    我用其他语言这两种方式都可以存byte数组
      

  8.   

    或者你把数据每一个byte 先转为2位16进制 然后拼接起来传参
      

  9.   


    select @Effect = substring(convert(varbinary,1),4,1) + substring(convert(varbinary,2),4,1) + substring(convert(varbinary,3),4,1) -- 直接赋值这个可以解决我的问题。
    但是我看不懂意思,能解释一下为什么这样写么?
      

  10.   

    varbinary 默认长度是4,这里指的是datalength的长度,也就是说数字1转成varbinary的值是0x00000001,只有最后一位有用,所以用substring获取最后一位罢了
      

  11.   


    把每个substring() 的返回结果相加的意思呢?
      

  12.   

    我试了下这样写:
    SET @Effect = 0x01 + 0x02 + 0x03结果也可以啊。
    那就不需要使用substring了?这样的话,我还是不理解,为什么16进制相加,不是数值的数学上的相加,而是可以把0x01放到第1个字节,0x02放到第2个字节,0x03放到第3个字节?
    而不是等于 0x06?
      

  13.   

    binary和varbinary的+运算时按照字符型运算的,如果是真正意义的加减,使用位运算符
      

  14.   

    DECLARE @Effect binary(20)DECLARE @e0 binary(2), @e1 binary(2), @e2 binary(2), @e3 binary(2), @e4 binary(2), @e5 binary(2), @e6 binary(2), @e7 binary(2), @e8 binary(2), @e9 binary(2)SET @e0 = 111
    SET @e1 = 222
    SET @e2 = 333
    SET @e3 = 444
    SET @e4 = 555
    SET @e5 = 666
    SET @e6 = 777
    SET @e7 = 888
    SET @e8 = 999
    SET @e9 = 100SET @Effect = @e0 + @e1 + @e2 + @e3 + @e4 + @e5 + @e6 + @e7 + @e8 + @e9-- 遍历二进制,并打印
    DECLARE @p int
    SELECT @p = 1while @p <= 20
    begin
    DECLARE @out int
    Set @out = SubString(@Effect, @p, 2)
    print @out Set @p = @p + 2
    end
    搞定了,可以这样子。
    可以吧?
      

  15.   

    补充一句,在游戏服务器里,Effect是 WORD Effect[10] 类型
    所以,我上面的sql脚本是每两个字节存一个数值。(这是装备的10个附加属性id)