关于 T-SQL 的几点小九九
2009-06-08 10:31:48 来源:WEB开发网您是否发现了什么,一些关于 NULL 的细节,是的,我在创建表的时候显示定义了 NOT NULL。一直以来,我都习惯于在任何情况下创建表时候显示声明字段的 NOT NULL 或者 NULL。这是个好习惯,我一直都这么觉得,可为什么是好习惯我却是最近才明了,请您听我细细道来。事实上,如果您在创建表时,不显示声明字段是否为 NULL,SQL Server 会假设其为 NOT NULL。
您会说我的 SQL Server 默认的是允许字段为 NULL 值啊,没错,您的错觉来自于许多与 SQL Server 共同工作的工具或者界面都开启了一个会话设置,使默认为 NULL 值。我们当然也可以通过一个会话设置或数据库选项使 SQL Server 本身默认允许 NULL 值。如果在创建表时列定义中不显示声明 NULL 或者 NOT NULL,然后您把那些脚本放在一台与您之前使用过的服务器,有着不同默认设置的数据库服务器上执行,将得到相反的结果。
您是否还发现,我实际上在创建 ProcurementPlan 表时,将其所有列均声明为 NOT NULL,并且在逻辑上本应该可以允许为 NULL 值的列上定义了默认值,这又是为什么呢?简单点说吧,要处理 NULL 值给存储引擎增加了复杂度,因为 SQL Server 在每条记录中都设置了一个特殊的 bitmap 来显示哪些允许 NULL 的列上存储的真的是空值。如果允许 NULL,在访问每一行的时候 SQL Server 都必须对这个 bitmap 进行解码。更进一步说,允许 NULL 值同时也增加了应用程序的复杂度,因为总是要编写一些特殊的逻辑来处理空值的情况。
因为 NULL 值的一些微妙之处,我遵从了 Kalen Delaney 导师给出的意见:?可能的话,将表中所有的列都显示的声明为 NOT NULL,并且为丢失的或未知的项定义默认值。说真的,我觉得这个建议非常的棒,在实际运用过程中,给我带来很多意想不到的思路,例如下面我将描述的最后一个话题。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接