关于Mssql中的varbinary的使用

来源:互联网 发布:北上广打拼 知乎 编辑:程序博客网 时间:2024/06/14 02:05

在一项目中用到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,这样就避免转换发生改变的问题。但是至于数据为什么会发生变化,就不明白了