首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章
SQL Server误区30日谈-Day6-有关NULL位图的三个误区
char nchar varchar nvarchar的区别
在SQLSERVER内部有很多地方都使用到了位图技术,包括执行计划,数据库系统页面,复制,还有这篇文章说到的数据行中的NULL位图
执行计划中有位图运算符
数据库系统页面有:DCM页面、BCM页面,详细请看:SQL Server 2008 存储结构之DCM、BCM
复制:Replication的犄角旮旯(三)--聊聊@bitmap(@bitmap 是binary类型,即二进制串;简单来说,它是用来表示所操作的字段位置的参数,通过@bitmap,分发代理从distribution.dbo.msrepl_commands中读取命令时(update操作),才会知道哪些列进行了更新;)
而这些位图技术的作用无疑都是为了 标志位
标志哪些地方发生了变化,发生了变化的就标记为1,没有发生变化的就标记为0
建立环境
建表
1 USE [pratice] 2 GO 3 4 5 --允许空,varchar类型 6 CREATE TABLE testnullvarchar(id INT ,NAME VARCHAR(20) NULL) 7 GO
插入数据
1 --插入数据 2 INSERT INTO [dbo].[testnullvarchar] ( [id],[Name] ) 3 SELECT 1 ,NULL UNION ALL 4 SELECT 2,'你' 5 GO
查看
1 SELECT * FROM testnullvarchar
建立DBCCResult表
1 CREATE TABLE DBCCResult ( 2 PageFID NVARCHAR(200), 3 PagePID NVARCHAR(200), 4 IAMFID NVARCHAR(200), 5 IAMPID NVARCHAR(200), 6 ObjectID NVARCHAR(200), 7 IndexID NVARCHAR(200), 8 PartitionNumber NVARCHAR(200), 9 PartitionID NVARCHAR(200), 10 iam_chain_type NVARCHAR(200), 11 PageType NVARCHAR(200), 12 IndexLevel NVARCHAR(200), 13 NextPageFID NVARCHAR(200), 14 NextPagePID NVARCHAR(200), 15 PrevPageFID NVARCHAR(200), 16 PrevPagePID NVARCHAR(200) 17 ) 18 GO