收藏本站 收藏本站
積木網首頁 - 軟件測試 - 常用手冊 - 站長工具 - 技術社區
首頁 > 數據庫 > mssql2005 > 正文

首頁 - PHP - 數據庫 - 操作系統 - 游戲開發 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell編程 - DOS命令 - jQuery - CSS樣式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

sql server 關于設置null的一些建議

我們設計表時,在字段是否允許Null值這個問題上,有時會爭論一番。

數據庫牛人Kalen Delaney則給了一下建議:

1,永遠不要在用戶表中允許NULL值
2,在用戶表定義中包含一個NOT NULL限制
3,不要依賴數據庫屬性來控制NULL值的行為

對于第一點,我們反向說,如果允許NULL,會給我們帶來什么影響。

1,SQL 在每條記錄中都設置了一個特殊的bitmap來顯示哪些允許空值的列上存儲的真的是空值。如果是NULL,在訪問每一行的時候SQL Server都必須對這個bitmap進行解碼。
2,允許NULL還增加了應用程序代碼的復雜度,總的添加一些特殊的邏輯來處理這個NULL值,這常常會導致bug。

第二點,在包含不允許NULL的列上,要加入一些默認值,如果不允許NULL,但是還沒有加默認值,在沒有顯示列插入的話,就會造成INSERT的失敗,SQL Server默認在INSERT中,對沒有顯示的列做NULL插入。

最后一點,主要涉及到于NULL值的比較。在我們印象中,是用IS NULL,IS NOT NULL比較呢,還是用=,<>比較呢。這取決于數據庫選項ANSI NULLS,我們不可能更改數據庫選項(我們大部分不是DBA),但是我們可以使用會話設置SET ANSI_NULLS相當于數據庫選項ANSI NULLS。當這個選項為真是,所有與空值的比較都將得出FALSE,代碼必須使用IS NULL條件來判斷是否為空,而當這個選項為假時,如果進行比較的兩個值都是空值將得出TRUE,SQL Server允許將 =NULL作為IS NULL的同義詞,將<> NULL 作為IS NOT NULL的同義詞。

如果忘記這個選項,建議用IS NULL判斷空,IS NOT NULL判斷非空。

測試如下:

在t3表中只有兩行數據,如圖:

查看圖片

SET ANSI_NULLS OFF 時:

查看圖片

SET ANSI_NULLS ON 時

查看圖片

總結下來,最優的辦法是:在設計表的時候,不要允許字段為NULL,并為字段附上默認值

SQL Server 在Management Studio中使用Web瀏覽器
我們在SQLServerManagementStudio中寫SQL的時候,避免不了在瀏覽器和SSMS兩者之間頻繁切換,并浪費時間,殊不知,SSMS中自帶有一個Web瀏覽器,和操作查詢標

SQL Server 使用 SET FMTONLY ON 獲得表的元數據
有時,我們需要獲得某張表所有的元數據,我們可能想到的是通過查詢系統表獲得,但是這比較繁瑣,而在SQLServer2005(包含)以后,提供了一個比較簡單

把CSV文件導入到SQL Server表中的方法
有時候我們可能會把CSV中的數據導入到某個數據庫的表中,比如做報表分析的時候。對于這個問題,我想一點也難不倒程序人員吧!但是要是SQLServer能

本周排行

更新排行

強悍的草根IT技術社區,這里應該有您想要的! 友情鏈接:b2b電子商務
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP備05050695號
捕鱼大师辅助软件 十一选五稳赚技巧 加拿大快乐8开奖官方吗 经典股票论坛 江苏快三江苏11选5 亿融配资 海南4+1玩法,1是哪个 广东快乐10分玩法介绍 海南4 1走势图 山西快乐十分近50期 快乐十分每期落号教学视频 湖南快乐十分下载 玩一分快三赢了4万多 股票融资是什么意思啊券 江西快3appqicp—me 下载炒股软件手机版 广东彩票好彩1最新开奖