資料庫儲存過程相關知識

2022-01-15 23:44:05 字數 3798 閱讀 8154

(一)

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語句的集合,經編譯後存放在資料庫...