今天遇到个在数据库中进行数据转换的问题,我在数据库中用十六进制形式存储了一些数据,但是我想用存储过程选出来时数据要用十进制形式显示,我在数据库中没有找到相应的函数或者方法进行这种操作。例如:十进制:4097对应的十六进制为1001,我在数据库中存的是1001,以varchar的形式存储的。当然如果在C#程序中这种转换就非常简单了:Convert.ToInt32(rfid, 16).ToString(),这样十六进制的rfid就转换成十进制了。
     后来想到了SQL 2005集成了CLR功能,可以用编写普通程序的方式编写存储过程或函数等。于是就在vs2005中新建一个sqlserver project的项目,关联到相应的数据库,截图太麻烦了,相信大家也都明白,我这就不截图了,建完项目后新建一个“用户定义的函数”项,然后添加下列代码:
    [Microsoft.SqlServer.Server.SqlFunction]
    
public static SqlString GetIntRFID(SqlString rfid)
    
{
        
// 在此处放置代码
        string str;
        
if (rfid.Value.Equals("NNNN"))
            str 
= String.Empty;
        
else
            str 
= Convert.ToInt32(rfid.Value, 16).ToString();
        
return str;
    }

然后编译生成,在点击部署,这样在sql2005数据库中就能找到相应的函数,然后调用此函数,参数为数据库中16进制的数,返回的为10进制的数值,这样就达到了自己的目的,并且个人觉得相对与自己写一个把16进制转换成10进制的函数要简单的多。
   sql2005默认好像是没有启用clr功能的,可以先查询一下:exec sp_configure 'clr enabled'  如果config_value项为0,则表示没有启用,要执行 exec sp_configure 'clr enabled' ,1使它变为1,最后运行 reconfigure with override完成操作。

      微软的东西更新太快,看来只有先了解下,等需要的时候在深入.

posted on 2007-05-24 14:45  Tiu  阅读(381)  评论(0编辑  收藏  举报