在一项目中用到MSSQL中的varbinary,在使用存储时发现下面问题
执行语句
DECLARE @SQLTxt VARCHAR(400), @AlarmContent VARBINARY(400)
SET @AlarmContent = 0xD4040002
SET @SQLTxt =
'SELECT CAST(''' + CAST(@AlarmContent AS VARCHAR(400)) + ''' AS VARBINARY(400))'
print @SQLTxt
EXEC(@SQLTxt)
结果如下
----------------------------------
0x3F0002
(1 行受影响)
把我传入的数据给改变了,但是下面这样就不更改
执行语句
DECLARE @byte1 VARBINARY(400), @str VARCHAR(400), @byte2 VARBINARY(400)
SET @byte1 = 0xD4040002
SELECT @byte1
SET @str = CAST(@byte1 AS VARCHAR(400))
SELECT @str
SET @byte2 = CAST(@str AS VARBINARY(400))
SELECT @byte2
结果如下
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0xD4040002
(1 行受影响)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
(1 行受影响)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0xD4040002
(1 行受影响)
郁闷中......
由于最近状态太差(估计是我太懒了,哈哈),交一个哥们找问题
然后参考各个资料
http://support.microsoft.com/kb/104829/zh-cn
http://msdn.microsoft.com/zh-cn/library/ms187928.aspx
但是通过Convert转换似乎和MSDN上使用Style不同结果,不知道MSDN上Convert的Style是啥意思。
解决:
最后终于找到一个函数(MSSQL2005)master.dbo.fn_varbintohexstr
发现以前的思路是有问题,先转换成varchar,再转换成varbinary,傻了...
目的是组sql语句,其实可以直接把varbinary转换成16进制字符,这样使用 master.dbo.fn_varbintohexstr就可以搞定的。因为在语句中是可以直接使用binary,如select 0xD4040002,这样就避免转换发生改变的问题。但是至于数据为什么会发生变化,就不明白了