憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
          轉(zhuǎn) http://www.cnblogs.com/xmaiC/archive/2009/04/15/1436813.html

          T-SQL之SET ANSI_NULLS

                當(dāng) SET ANSI_NULLS 為 ON 時(shí),即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 語句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 語句仍會(huì)返回零行。
                當(dāng) SET ANSI_NULLS 為 OFF 時(shí),等于 (=) 和不等于 (<>) 比較運(yùn)算符不遵守 ISO 標(biāo)準(zhǔn)。使用 WHERE column_name = NULL 的 SELECT 語句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 語句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 語句返回所有不為 XYZ_value 也不為 NULL 的行。
                當(dāng) SET ANSI_NULLS 為 ON 時(shí),所有對 null 值的比較均取值為 UNKNOWN。當(dāng) SET ANSI_NULLS 為 OFF 時(shí),如果數(shù)據(jù)值為 NULL,則所有數(shù)據(jù)對空值的比較將取值為 TRUE。如果未指定 SET ANSI_NULLS,則應(yīng)用當(dāng)前數(shù)據(jù)庫的 ANSI_NULLS 選項(xiàng)設(shè)置。有關(guān) ANSI_NULLS 數(shù)據(jù)庫選項(xiàng)的詳細(xì)信息,請參閱 ALTER DATABASE (Transact-SQL) 和設(shè)置數(shù)據(jù)庫選項(xiàng)。


          僅當(dāng)某個(gè)比較操作數(shù)是值為 NULL 的變量或文字 NULL 時(shí),SET ANSI_NULLS ON 才會(huì)影響比較。如果比較雙方是列或復(fù)合表達(dá)式,則該設(shè)置不會(huì)影響比較。
          為使腳本按預(yù)期運(yùn)行,不管 ANSI_NULLS 數(shù)據(jù)庫選項(xiàng)或 SET ANSI_NULLS 的設(shè)置如何,請?jiān)诳赡馨罩档谋容^中使用 IS NULL 和 IS NOT NULL。
          在執(zhí)行分布式查詢時(shí)應(yīng)將 SET ANSI_NULLS 設(shè)置為 ON。
                對 計(jì)算列或索引視圖創(chuàng)建或更改索引時(shí),SET ANSI_NULLS 也必須為 ON。如果 SET ANSI_NULLS 為 OFF,則針對表(包含計(jì)算列或索引視圖的索引)的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。SQL Server 將返回一個(gè)錯(cuò)誤消息,該錯(cuò)誤消息會(huì)列出所有違反所需值的 SET 選項(xiàng)。另外,在執(zhí)行 SELECT 語句時(shí),如果 SET ANSI_NULLS 為 OFF,則 SQL Server 將忽略計(jì)算列或視圖的索引值并解析選擇操作,就好像表或視圖沒有這樣的索引一樣。

          實(shí)例:
          --1.設(shè)置ANSI_NULLS為ON時(shí),返回零行
          SET ANSI_NULLS ON
          GO
          SELECT*FROM xmai WHERE id=NULL
          SELECT*FROM xmai WHERE id<>NULL
          執(zhí)行結(jié)果:
          id          name
          ----------- --------------------
          (0 行受影響)

          id          name
          ----------- --------------------
          (0 行受影響)

          --2設(shè)置ANSI_NULLS為OFF時(shí),等于 (=) 和不等于 (<>) 比較運(yùn)算符不遵守 ISO 標(biāo)準(zhǔn)。

          SET ANSI_NULLS OFF
          GO
          SELECT*FROM xmai WHERE id=NULL
          SELECT*FROM xmai WHERE id<>NULL
          執(zhí)行結(jié)果:
          id          name
          ----------- --------------------
          NULL        XMAI                
          (
          1 行受影響)

          id          name
          ----------- --------------------
          1984        NULL
          2009        HJ                  
          2007        MAIHUASHA           
          (
          3 行受影響)

          --3.使用WHERE column_name<>XYZ_value的SELECT語句返回所有不為XYZ_value也不為NULL的行。
          SELECT*FROM xmai WHERE id<>1984
          執(zhí)行結(jié)果:
          id          name
          ----------- --------------------
          2009        HJ                  
          2007        MAIHUASHA           

          (
          2 行受影響)


          posted on 2009-04-17 17:04 二胡 閱讀(570) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫
          主站蜘蛛池模板: 古交市| 玉龙| 九龙县| 济阳县| 东丰县| 惠来县| 富裕县| 松江区| 瑞金市| 宜黄县| 清丰县| 高要市| 新津县| 汶川县| 武城县| 穆棱市| 阿巴嘎旗| 阳新县| 灵璧县| 四平市| 江孜县| 临泉县| 商洛市| 松溪县| 嘉义县| 陆河县| 焉耆| 富平县| 晋江市| 桃园市| 合肥市| 金堂县| 芒康县| 海兴县| 宜阳县| 蓬莱市| 莆田市| 张家港市| 平原县| 太和县| 宜丰县|