NULL在SQLServer数据库日志文件中的存储
日志文件ldf中的null ? 参考日志文件结构 ? ? static byte[] ReadRowData()??? {??????? //代码略去??????? return null;??? }??? static void AnerlizeNull()??? {??????? byte[] data = ReadRowData();//表示一行数据的二进制??????? //从第二个字节算起,data[2]??????? short index = 2;??????? //第二字节内容为pos_columns_count,表示第pos_columns_count个字节存放了列数信息,可以把本字节理解为指针??????? short pos_columns_count = BitConverter.ToInt16(data,index);??????? //pos_columns_count内容为data_columns_count,表示这个表有data_columns_count列??????? short data_columns_count = BitConverter.ToInt16(data,pos_columns_count);??????? //pos_columns_count的后两个字节开始表示了Null列信息,Null列信息不止占用1个字节,因为每列按位保存,如果列多,他的占用字节也多??????? short pos_null_map = (short)(pos_columns_count + 2);??????? //算Null信息占用多少字节??????? int data_null_map_length = (int)System.Math.Ceiling((double)data_columns_count / 8);??????? //读取Null列的标志内容??????? byte[] data_null_map = new byte[data_null_map_length];??????? System.Array.Copy(data,pos_null_map,data_null_map,data_null_map_length);??????? //这里就可以开始检查一个表格的任何一列是否null了,null的数据是不在数据区的,只记录在Null列的标志内容中。??????? //比如看第10列是否null??????? checkNull(data_null_map,10);??? }??? static bool checkNull(byte[] map,short col_order)??? {??????? int mapIndex = (col_order - 1) / 8;??????? int mapExp = (col_order - 1) % 8;??????? int iResult = (int)System.Math.Pow(2,mapExp);??????? return (iResult & map[mapIndex]) != 0;??? } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQL Server sqlldr装载数据实现代码
- mysql 5.7.13 安装配置方法图文教程(win10)
- sql – LINQ to Entities在DateTime.DayOfWeek上加入
- sqlserver 查询当前数据库中的所有用户表,当前数据库中所有
- sql-server – 添加sql表的唯一约束作为另一个sql表的外键引
- sql – 基于列的顺序查询速度
- sql – 有效地在数据库中存储项目位置(用于排序)
- sql-server – 删除dbo.来自SQLServer(2005)Management Stu
- MYSQL updatexml()函数报错注入解析
- sql – H2 – DATEADD表示完整的一天