abc数据库中01表   a字段(只允许写入16进制。格式0x1211121等)02表   b字段(存放10进制的数据)那么
Update 01 SET a=(select b from 02 where id=1) Where name='aaa'这样的语句。会直接把查询到02表B段中的数据。写入 01表A段中我想要的是。查询02表 B段的数据后(如数据是AAAbbb)然后可有办法。直接转换成16进制。并更新到01表A段中?

解决方案 »

  1.   

    10进制转16进制函数,create function dbo.Convert10to16
    (@x int) returns varchar(1000)
    as
    begin
     DECLARE @Return varchar(1000),@ind int,@byte binary(1),@byte1 int,@byte2 int,@bin varbinary(1000)
     SELECT @bin=cast(@x as varbinary(4))
     SELECT @Return='',@ind = 1    WHILE ( @ind <= datalength(@bin) )
        BEGIN
    SELECT @byte = substring(@bin, @ind, 1);
            SET @byte1 = @byte / 16
            IF(@byte1 >= 10)
    SELECT @Return = @Return + 
    CASE @byte1
    WHEN 10 THEN 'A'
    WHEN 11 THEN 'B'
    WHEN 12 THEN 'C'
    WHEN 13 THEN 'D'
    WHEN 14 THEN 'E'
    WHEN 15 THEN 'F'
    END
    ELSE
    SELECT @Return = @Return + convert(char(1),@byte1)        SET @byte2 = @byte % 16
            IF(@byte2 >= 10)
    SELECT @Return = @Return + 
    CASE @byte2
    WHEN 10 THEN 'A'
    WHEN 11 THEN 'B'
    WHEN 12 THEN 'C'
    WHEN 13 THEN 'D'
    WHEN 14 THEN 'E'
    WHEN 15 THEN 'F'
    END
    ELSE
    SELECT @Return = @Return + convert(char(1),@byte2) SELECT @ind = @ind + 1;
        END  return @Return
    end
      

  2.   

    里面也有两个函数可以参考http://blog.csdn.net/maco_wang/article/details/6254966
      

  3.   


    Update 01 
     SET a=(select dbo.Convert10to16(cast(b as int)) 
            from 02 where id=1) 
     Where name='aaa'