資料控制語言DCL)
資料控制語言DCL)是用來設定或者更改資料庫使用者或角色許可權的語句,這些語句包括GRANT、DENY、REVOKE等語句,在預設狀態下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成員才有權利執行資料控制語言。
GRANT語句
GRANT語句是授權語句,它可以把語句許可權或者對象許可權授予給其他使用者和角色。
授予語句許可權的文法形式為:
GRANT {ALL | statement[,...n]} TO security_account [ ,...n ]
授予對象許可權的文法形式為:
GRANT { ALL [ PRIVILEGES ] | permission [ ,...n ] }{[ ( column [ ,...n ] ) ] ON { table | view }| ON { table | view } [ ( column [ ,...n ] ) ]| ON { stored_procedure | extended_procedure }| ON { user_defined_function } } TO security_account [ ,...n ] [ WITH GRANT OPTION ] [ AS { group | role } ]
2、DENY語句
DENY語句用於拒絕給當前資料庫內的使用者或者角色授予許可權,並防止使用者或角色通過其組或角色成員繼承許可權。否定語句許可權的文法形式為:
DENY { ALL | statement [ ,...n ] } TO security_account [ ,...n ]
否定對象許可權的文法形式為:
DENY { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } TO security_account [ ,...n ] [ CASCADE ]
3 REVOKE語句
REVOKE語句是與GRANT語句相反的語句,它能夠將以前在當前資料庫內的使用者或者角色上授予或拒絕的許可權刪除,但是該語句並不影響使用者或者角色從其他角色中作為成員繼承過來的許可權。
收回語句許可權的文法形式為:
REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ]
收回對象許可權的文法形式為:
REVOKE [ GRANT OPTION FOR ] { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } { TO | FROM } security_account [ ,...n ] [ CASCADE ] [ AS { group | role } ]
系統預存程序
系統預存程序是SQL Server系統建立的預存程序,它的目的在於能夠方便地從系統資料表中查詢資訊,或者完成與更新資料庫表相關的管理工作或其它的系統管理任務。系統預存程序可以在任意一個資料庫中執行。系統預存程序建立並存放於系統資料庫master中,並且名稱以sp_或者xp_開頭。
系統預存程序的部分樣本如下:
sp_addtype:用於定義一個使用者定義資料類型。
sp_configure:用於管理伺服器配置選項設定。
xp_sendmail:用於寄送電子郵件或呼叫資訊。
sp_stored_procedures:用於返回當前資料庫中的預存程序的清單。
sp_help:用於顯示參數清單和其資料類型。
sp_depends:用於顯示預存程序依據的對象或者依據預存程序的對象。
sp_helptext:用於顯示預存程序的定義文本。
sp_rename:用於修改當前資料庫中使用者物件的名稱。
其它語言元素
注釋
注釋是程式碼中不執行的文本字串也稱為註解)。在SQL Server中,可以使用兩種類型的注釋字元:一種是ANSI標準的注釋符“--”,它用於單行注釋;另一種是與C語言相同的程式注釋符號,即“/* */”。
變數
變數是一種語言中必不可少的組成部分。Transact-SQL語言中有兩種形式的變數,一種是使用者自己定義的局部變數,另外一種是系統提供的全域變數。
局部變數
局部變數是一個能夠擁有特定資料類型的對象,它的作用範圍僅限制在程式內部。局部變數可以作為計數器來計算迴圈執行的次數,或是控制迴圈執行的次數。另外,利用局部變數還可以儲存資料值,以供控制流程語句測試以及儲存由預存程序返回的資料值等。局部變數被引用時要在其名稱前加上標誌“@”,而且必須先用DECLARE命令定義後才可以使用。
全域變數
全域變數是SQL Server系統內部使用的變數,其作用範圍並不僅僅局限於某一程式,而是任何程式均可以隨時調用。全域變數通常儲存一些SQL Server的配置設定值和統計資料。使用者可以在程式中用全域變數來測試系統的設定值或者是Transact-SQL命令執行後的狀態值。
使用全域變數時應該注意以下幾點:
①全域變數不是由使用者的程式定義的,它們是在伺服器級定義的。
②使用者只能使用預先定義的全域變數。
③引用全域變數時,必須以標記符“@@”開頭。
④局部變數的名稱不能與全域變數的名稱相同,否則會在應用程式中出現不可預測的結果。
運算子
運算子是一些符號,它們能夠用來執行算術運算、字串串連、賦值以及在欄位、常量和變數之間進行比較。在SQL Server 2000中,運算子主要有以下六大類:算術運算子、賦值運算子、位元運算符、比較子、邏輯運算子以及字串串聯運算子
算術運算子
算術運算子可以在兩個運算式上執行數學運算,這兩個運算式可以是數字資料類型分類的任何資料類型。算術運算子包括加+)、減—)、乘*)、除/)和模數%)。
賦值運算子
Transact-SQL 中只有一個賦值運算子,即等號=)。賦值運算子使我們能夠將資料值指派給特定的對象。另外,還可以使用賦值運算子在欄位標題和為列定義值的運算式之間建立關係。
位元運算符
位元運算符使我們能夠在整型資料或者位元據image 資料類型除外)之間執行位操作。此外,在位元運算符左右兩側的運算元不能同時是位元據。
比較子
比較子用於比較兩個運算式的大小或是否相同,其比較的結果是布爾值,即TRUE表示運算式的結果為真)、FALSE表示運算式的結果為假)以及UNKNOWN。除了 text、ntext 或 image 資料類型的運算式外,比較子可以用於所有的運算式。
邏輯運算子
邏輯運算子可以把多個邏輯運算式串連起來。邏輯運算子包括AND、OR和NOT等運算子。邏輯運算子和比較子一樣,返回帶有 TRUE 或 FALSE 值的布林值資料型別。
字串串聯運算子
字串串聯運算子允許通過加號 (+) 進行字串串聯,這個加號即被稱為字串串聯運算子。例如對於語句SELECT ‘abc’+’def’,其結果為abcdef。
運算子的優先等級從高到低如下所示
括弧:);
乘、除、求模運算子:*、/、%;
加減運算子:+、- ;
比較子:=、>、<、>=、<=、<>、!=、!>、!<;
位元運算符:^、&、|;
邏輯運算子:NOT;
邏輯運算子:AND;
邏輯運算子:OR。
函數
在Transact-SQL語言中,函數被用來執行一些特殊的運算以支援SQL Server的標準命令。Transact-SQL 程式設計語言提供了三種函數:
㈠行集合函式:行集合函式可以在Transact-SQL語句中當作表引用。
㈡彙總函式:彙總函式用於對一組值執行計算並返回一個單一的值。
㈢純量涵式:純量涵式用於對傳遞給它的一個或者多個參數值進行處理和計算,並返回一個單一的值。
SQL Server中最常用的幾種函數
字串函數
字串函數可以對位元據、字串和運算式執行不同的運算,大多數字串函數只能用於char和varchar資料類型以及明確轉換成char和varchar的資料類型,少數幾個字串函數也可以用於binary和varbinary資料類型。此外,某些字串函數還能夠處理text、ntext、image資料類型的資料。
字串函數的分類:
基底字元串函數:UPPER、LOWER、SPACE、REPLICATE、STUFF、REVERSE、LTRIM、RTRIM。
字串尋找函數:CHARINDEX、PATINDEX。
長度和分析函數:DATALENGTH、SUBSTRING、RIGHT。
轉換函式:ASCH、CHAR、STR、SOUNDEX、DIFFERENCE。
日期和時間函數
日期和時間函數用於對日期和時間資料進行各種不同的處理和運算,並返回一個字串、數字值或日期和時間值。在SQL Server 2000中,日期和時間函數的類型如表2-5所示;另外,表2-6列出了日期類型的名稱、縮寫形式以及可接受的值。
數學函數
數學函數用於對數字運算式進行數學運算並返回運算結果。數學函數可以對SQL Server提供的數字資料decimal、integer、float、real、money、smallmoney、smallint 和 tinyint)進行處理。
轉換函式
一般情況下,SQL Server會自動處理某些資料類型的轉換。例如,如果比較 char 和 datetime 運算式、smallint 和 int 運算式、或不同長度的 char 運算式,SQL Server 可以將它們自動轉換,這種轉換被稱為隱性轉換。但是,無法由SQL Server自動轉換的或者是SQL Server自動轉換的結果不符合預期結果的,就需要使用轉換函式做顯示轉換。轉換函式有兩個:CONVERT和CAST。
系統函數
系統函數用於返回有關SQL Server系統、使用者、資料庫和資料庫物件的資訊。系統函數可以讓使用者在得到資訊後,使用條件陳述式,根據返回的資訊進行不同的操作。與其它函數一樣,可以在SELECT語句的SELECT和WHERE子句以及運算式中使用系統函數。
彙總函式
彙總函式可以返回整個或者幾個列或者一個列的摘要資料,它常用來計算SELECT語句查詢的統計值。彙總函式經常與 SELECT 語句的 GROUP BY 子句一同使用。
流程式控制制語句
流程式控制制語句是指那些用來控製程序執行和流程分支的命令,在SQL Server 2000中,流程式控制制語句主要用來控制SQL語句、語句塊或者預存程序的執行流程。
IF…ELSE語句
IF…ELSE語句是條件判斷語句,其中,ELSE子句是可選的,最簡單的IF語句沒有ELSE子句部分。IF…ELSE語句用來判斷當某一條件成立時執行某段程式,條件不成立時執行另一段程式。SQL Server允許嵌套使用IF…ELSE語句,而且嵌套層數沒有限制。
IF…ELSE語句的文法形式
IF Boolean_expression { sql_statement | statement_block } [ ELSE { sql_statement | statement_block } ]
BEGIN…END語句
BEGIN…END語句能夠將多個Transact-SQL語句組合成一個語句塊,並將它們視為一個單元處理。在條件陳述式和迴圈等控制流程程語句中,當符合特定條件便要執行兩個或者多個語句時,就需要使用BEGIN…END語句,其文法形式為:
BEGIN { sql_statement | statement_block } END
CASE函數
CASE函數可以計算多個條件式,並將其中一個合格結果運算式返回。CASE函數按照使用形式的不同,可以分為簡單CASE函數和搜尋CASE函數。
CASE函數的文法形式
CASE input_expressionWHEN when_expression THEN result_expression [ ...n ][ELSE else_result_expressionEND
搜尋 CASE函數的文法形式
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression END
WHILE…CONTINUE…BREAK語句
WHILE…CONTINUE…BREAK語句用於設定重複執行 SQL 陳述式或語句塊的條件。只要指定的條件為真,就重複執行語句。其中,CONTINUE語句可以使程式跳過CONTINUE語句後面的語句,回到WHILE迴圈的第一行命令。BREAK語句則使程式完全跳出迴圈,結束WHILE語句的執行。
結束WHILE語句的文法形式為:
WHILE Boolean_expression { sql_statement | statement_block }[ BREAK ] { sql_statement | statement_block } [ CONTINUE ]
GOTO語句
GOTO語句可以使程式直接跳到指定的標有標識符的位置處繼續執行,而位於GOTO語句和標識符之間的程式將不會被執行。GOTO語句和標識符可以用在語句塊、批處理和預存程序中,標識符可以為數字與字元的組合,但必須以“:”結尾。
GOTO語句的文法形式
GOTO label
……
label:
程式清單2-50:利用GOTO語句求出從1加到5的總和。
declare @sum int, @count int
select @sum=0, @count=1
label_1:
select @sum=@sum+@count
select @count=@count+1
if @count<=5
goto label_1
select @count @sum
WAITFOR語句
WAITFOR語句用於暫時停止執行SQL語句、語句塊或者預存程序等,直到所設定的時間已過或者所設定的時間已到才繼續執行。WAITFOR語句的文法形式為:
WAITFOR { DELAY 'time' | TIME 'time' }
其中,DELAY用於指定時間間隔,TIME用於指定某一時刻,其資料類型為datetime,格式為‘hh:mm:ss’。
RETURN語句
RETURN語句用於無條件地終止一個查詢、預存程序或者批處理,此時位於RETURN語句之後的程式將不會被執行。RETURN語句的文法形式為:
RETURN [ integer_expression ]
其中,參數integer_expression為返回的整型值。預存程序可以給調用過程或應用程式返回整型值。
編輯註:此系列未完,待續)
(