(一)
set ansi_nulls
指定在對空值使用等於 (=) 和不等於 (<>) 比較運算子時,這些運算子的 sql-92 遵從行為。
注釋sql-92 標準要求對空值的等於 (=) 或不等於 (<>) 比較取值為 false。當 set ansi_nulls 為 on 時,即使column_name 中存在空值,使用 where column_name = null 的 select 語句仍返回零行。即使column_name 中存在非空值,使用 where column_name
<> null 的 select 語句仍返回零行。
當 set ansi_nulls 為 off 時,等於 (=) 和不等於 (<>) 比較運算子不遵從 sql-92 標準。使用 wherecolumn_name = null 的 select 語句返回 column_name 中含有空值的行。使用 where column_name
<> null 的 select 語句返回列中含有非空值的行。此外,使用 where column_name <> xyz_value 的 select 語句返回所有非 xyz 值和非 null的行。
說明microsoft® sql server™ 是將空字串解釋為單個空格還是真正的空字串,取決於sp_dbcmptlevel的相容級別設定。如果相容級別小於或等於 65,sql server 就將空字串解釋為單個空格。如果相容級別等於 70,則 sql server 將空字串解釋為空字串。有關更多資訊,請參見sp_dbcmptlevel。
當 set ansi_nulls 為 on 時,所有對空值的比較均取值為 unknown。當 set ansi_nulls 為 off 時,如果資料值是 null,則所有資料對空值的比較將取值為 true。如果未指定,則應用當前資料庫的ansi nulls選項的設定。有關ansi nulls資料庫選項的更多資訊,請參見 sp_dboption 和設定資料庫選項。
為使指令碼按預期執行,不管ansi nulls資料庫選項或 set ansi_nulls 的設定是什麼,在可能包含空值的比較中使用 is null 和 is not null。
對於儲存過程,sql server 使用最初建立儲存過程時的 set ansi_nulls 設定值。無論隨後何時執行儲存過程,set ansi_nulls 的設定都還原為其最初使用的值並生效。當在儲存過程內喚醒呼叫 set ansi_nulls 時,其設定不更改。
在執行分布式查詢時應將 set ansi_nulls 設定為 on。
在計算列或索引檢視上建立或操作索引時,set ansi_nulls 也必須為 on。如果 set ansi_nulls 為 off,計算列或索引檢視上帶索引的表上的 create、update、insert 和 delete 語句將失敗。sql server 將返回乙個錯誤,列出所有違反所需值的 set 選項。另外,在執行 select 語句時,如果 set ansi_nulls 為 off,則 sql server 將忽略計算列或檢視上的索引值並解析選擇,就好象表或檢視上沒有這樣的索引一樣。
說明ansi_nulls 是在處理計算列或索引檢視上的索引時必須設定為所需值的七個 set 選項之一。還必須將選項 ansi_padding、ansi_warnings、arithabort、quoted_identifier 和 concat_null_yields_null 設定為 on,而必須將 numeric_roundabort 設定為 off。
sql server odbc 驅動程式和用於 sql server 的 microsoft ole db 提供程式在連線時自動將 ansi_nulls 設定為 on。該設定可以在 odbc 資料來源、odbc 連線特性或 ole db 連線屬性(它們在連線到 sql server 之前在應用程式中設定)中進行配置。對來自 db-library 應用程式的連線,set ansi_nulls 預設為 off。
當 set ansi_defaults 為 on 時,將啟用 set ansi_nulls。
set ansi_nulls 的設定是在執行或執行時設定,而不是在分析時設定。
許可權set ansi_nulls許可權預設授予所有使用者。
示例下例使用等於 (=) 和不等於 (<>) 比較運算子對錶中的 null 值和非空值進行比較。下例還顯示 is null 不受 set ansi_nulls 設定的影響。
-- create table t1 and insert values.
create table t1 (a int null)
insert into t1 values (null)
insert into t1 values (0)
insert into t1 values (1)
go-- print message and perform select statements.
print 'testing default setting'
declare @varname int
select @varname = null
select *
from t1
where a = @varname
select *
from t1
where a <> @varname
select *
from t1
where a is null
go-- set ansi_nulls to on and test.
print 'testing ansi_nulls on'
set ansi_nulls on
godeclare @varname int
select @varname = null
select *
from t1
where a = @varname
select *
from t1
where a <> @varname
select *
from t1
where a is null
go-- set ansi_nulls to off and test.
print 'testing set ansi_nulls off'
set ansi_nulls off
godeclare @varname int
select @varname = null
select *
from t1
where a = @varname
select *
from t1
where a <> @varname
select *
from t1
where a is null
go-- drop table t1.
drop table t1
go
請參見
=(等於)
if...else
<>(不等於)
setset ansi_defaults
where
while
(二)
set quoted_identifier off
主要是針對 雙引號可能帶來的錯誤(建立儲存過程的時候)。
用上了off使 一些資料庫的「」雙引號不會出錯。
用完記得 on 。因為系統預設是 on的。
資料庫語句 儲存過程 小知識
一 最近遇到在分頁查詢裡將某些特定的資料靠前展示問題,解決辦法 使用 row number over函式 該函式是對你 select語句返回的資料進行編號處理,從1開始。在查詢時應用了乙個排序標準後,只有通過編號才能夠保證其順序是一致的,當使用row number函式時,也需要專門一列用於預先排序以...
資料庫 儲存過程
儲存過程,stored procedure,是在大型資料庫系統中,一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。模擬於c中的函式。mysql與sqlserver是不同的。建立儲存過程 conn getconnec...
資料庫 儲存過程
在資料庫中,儲存過程屬於一種物件,是一種高效的安全的訪問資料庫的方法。下邊我們就資料庫中的儲存過程總結它的相關知識點。我們分為概述,實現和管理三個方面來總結。一,儲存過程的概述 1,概念 儲存過程 storedprocedure 是在資料庫伺服器端執行的一組t sql語句的集合,經編譯後存放在資料庫...