binary 变量怎么赋值啊??? DECLARE @Effect binary(20)一共20个字节,我怎么对每个字节赋值?C++有数组下标,这个sql要怎么写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.cnblogs.com/ljhdo/p/4530293.html 直接赋值正常数值会帮你自动转成0x00XXXXXX的 如果字符串时不支持隐性转换e.g.SELECT CAST('aa' AS VARBINARY(100))DECLARE @BIN VARBINARY(20)=0x6161SELECT CAST(@BIN AS VARCHAR(2)) 我想要实现这样的:Effect [0] = 1Effect [1] = 2Effect [2] = 3....Effect [19] = 19怎么给每个字节设定自己想要的数值啊?你发的这个文章,我看了很多遍了,没讲怎么给每个字节赋值。。 如果我的binary有1000个字节,我是不是要写 0x0000000000000000000000000000000 ... 一共1000个位啊,不能给指定字节赋值么。。我不是要存字符串,我要存整数我要给指定字节,赋值不同的数值。为什么要这样做呢, 说说你的原因吧. 我要写一个sql调用存储过程,这个存储过程有个参数是binary(20)所以,我得定义一个binary(20),设后赋上我所希望的值,才行啊。 数据类型问题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 你客户端可以用char数组吧 然后直接赋值给字段不行吗? 或者用steam 串数据流对象 进行赋值我用其他语言这两种方式都可以存byte数组 或者你把数据每一个byte 先转为2位16进制 然后拼接起来传参 select @Effect = substring(convert(varbinary,1),4,1) + substring(convert(varbinary,2),4,1) + substring(convert(varbinary,3),4,1) -- 直接赋值这个可以解决我的问题。但是我看不懂意思,能解释一下为什么这样写么? varbinary 默认长度是4,这里指的是datalength的长度,也就是说数字1转成varbinary的值是0x00000001,只有最后一位有用,所以用substring获取最后一位罢了 把每个substring() 的返回结果相加的意思呢? 我试了下这样写:SET @Effect = 0x01 + 0x02 + 0x03结果也可以啊。那就不需要使用substring了?这样的话,我还是不理解,为什么16进制相加,不是数值的数学上的相加,而是可以把0x01放到第1个字节,0x02放到第2个字节,0x03放到第3个字节?而不是等于 0x06? binary和varbinary的+运算时按照字符型运算的,如果是真正意义的加减,使用位运算符 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 = 111SET @e1 = 222SET @e2 = 333SET @e3 = 444SET @e4 = 555SET @e5 = 666SET @e6 = 777SET @e7 = 888SET @e8 = 999SET @e9 = 100SET @Effect = @e0 + @e1 + @e2 + @e3 + @e4 + @e5 + @e6 + @e7 + @e8 + @e9-- 遍历二进制,并打印DECLARE @p intSELECT @p = 1while @p <= 20begin DECLARE @out int Set @out = SubString(@Effect, @p, 2) print @out Set @p = @p + 2end搞定了,可以这样子。可以吧? 补充一句,在游戏服务器里,Effect是 WORD Effect[10] 类型所以,我上面的sql脚本是每两个字节存一个数值。(这是装备的10个附加属性id) 小菜鸟求助高手 问sql语句,关于多条件多字段查询 送分题 full join连接问题 SQL2005 怎么得到某个表所占的字节大小呢? 如此查询,一个过分的要求? 求sql,根据任意父ID,求所有子ID 我是应该继续搞DELPHI或是搞PB或VC! 求救!聚合查询 sql 问题 mssql2008 如何跟踪视图的查询返回结果
e.g.
SELECT CAST('aa' AS VARBINARY(100))
DECLARE @BIN VARBINARY(20)=0x6161
SELECT CAST(@BIN AS VARCHAR(2))
我想要实现这样的:
Effect [0] = 1
Effect [1] = 2
Effect [2] = 3
....
Effect [19] = 19怎么给每个字节设定自己想要的数值啊?
你发的这个文章,我看了很多遍了,没讲怎么给每个字节赋值。。
如果我的binary有1000个字节,我是不是要写 0x0000000000000000000000000000000 ... 一共1000个位啊,
不能给指定字节赋值么。。
我不是要存字符串,我要存整数
我要给指定字节,赋值不同的数值。为什么要这样做呢, 说说你的原因吧. 我要写一个sql调用存储过程,这个存储过程有个参数是binary(20)
所以,我得定义一个binary(20),设后赋上我所希望的值,才行啊。
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
我用其他语言这两种方式都可以存byte数组
select @Effect = substring(convert(varbinary,1),4,1) + substring(convert(varbinary,2),4,1) + substring(convert(varbinary,3),4,1) -- 直接赋值这个可以解决我的问题。
但是我看不懂意思,能解释一下为什么这样写么?
把每个substring() 的返回结果相加的意思呢?
SET @Effect = 0x01 + 0x02 + 0x03结果也可以啊。
那就不需要使用substring了?这样的话,我还是不理解,为什么16进制相加,不是数值的数学上的相加,而是可以把0x01放到第1个字节,0x02放到第2个字节,0x03放到第3个字节?
而不是等于 0x06?
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
搞定了,可以这样子。
可以吧?
所以,我上面的sql脚本是每两个字节存一个数值。(这是装备的10个附加属性id)