1. 命名規則:安全
l 第一個字母必須是Unicode2.0標準定義的字母、下劃線、at符號(@)和數字符號(#);服務器
l 後續字符能夠是Unicode2.0標準定義的字母、來自基本拉丁字母或其餘國家/地區腳本的十進制數字、at符號(@)、美圓符號($)、數字符號(#)或下劃線;網絡
l 標識符不能是Transact-SQL的保留字;ide
l 不容許嵌入空格或其餘特殊字符;函數
l 標識符長度不大於128字符,本地臨時表標識符不大於116字符。操作系統
注:SQL Server2000中,常規標識符的格式規則取決於數據庫的兼容級別,兼容級別能夠用系統存儲過程sp_dbcmptlevel來設置。以上是兼容級別爲80時的規則。code
2. 特殊字符說明
如下字符位於標識符開始位置時具備特殊意義:
l 以@符號開始的標識符表示局部變量或參數;
l 以@@符號開始的標識符表示全局變量;
l 以#符號開始的標識符表示臨時表或過程;
l 以##符號開始的標識符表示全局臨時對象;
l --單行註釋;
l /*…*/多行註釋。(多行註釋不能跨越批處理)
1. 命名規則:
l 標識符長度不大於128字符(不包括分隔符字符),本地臨時表標識符不大於116字符;
l 標識符的主體能夠是包含當前代碼頁內字母(分隔符自己除外)的任意組合。
2. 分隔標識符類型:
l 被引用的標識符用雙引號分隔開,例如SELECT * FROM 「My Table」;
l 括在括號中的標識符用方括號分隔,例如SELECT * FROM [My Table]。
在SQL Server2000中,一個對象的全稱語法格式爲:
server.database.owner.object
其中,server爲服務器名,database爲數據庫名,owner爲全部者,object爲對象名。默認狀況下,server爲本地服務器,database爲當前數據庫,owner爲在指定的數據庫中與當前鏈接會話的登錄標識相對應的數據庫用戶或者數據庫全部者。
1. %—包含零個或更多字符的任意字符串
例如:查找姓名中包含有「華」字的全部學生
WHERE sname LIKE ‘%華%’
2. _—任何單個字符
例如:查找姓王,名字包含3個字的學生
WHERE sname LIKE ‘王__’
3. [] —指定範圍或集合中的任何單個字符
例如:查找姓劉和姓王,名字包含3個字的學生
WHERE sname LIKE ‘[劉,王]__’
4. [^]—不屬於指定範圍或集合的任何單個字符
例如:查找除姓劉和姓王之外,名字包含3個字的學生其餘學生
WHERE sname LIKE ‘[^劉,王]__’
變量名稱
說明
@@CONNECTIONS
返回自SQL Server本次啓動以來,所接受的鏈接或試圖鏈接的次數
@@CPU_BUSY
返回自SQL Server本次啓動以來,CPU工做的時間,單位爲毫秒
@@CURSOR_ROWS
返回遊標打開後,遊標中的行數
@@DATEFIRST
返回SET DATAFIRST參數的當前值
@@DBTS
返回當前數據庫的當前timestamp數據類型的值
@@ERROR
返回上次執行SQL語句產生的錯誤編號
@@FETCH_STATUS
返回FETCH語句遊標的狀態
@@IDENTITY
返回最新插入的IDENTITY列值
@@IDLE
返回自SQL Server本次啓動以來,CPU空閒的時間,單位爲毫秒
@@IO_BUSY
返回自SQL Server本次啓動以來,CPU處理輸入和輸出操做的時間,單位爲毫秒
@@LANGID
返回本地當前使用的語言標識符
@@LANGUAGE
返回當前使用的語言名稱
@@LOCK_TIMEOUT
返回當前的鎖定超時設置,單位爲毫秒
@@MAX_CONNECTIONS
返回SQL Server容許同時鏈接的最大用戶數目
@@MAX PRECISION
返回當前服務器設置的decimal和numeric數據類型使用的精度
@@NESTLEVEL
返回當前存儲過程的嵌套層數
@@OPTIONS
返回當前SET選項信息
@@PACK_RECEIVED
返回自SQL Server本次啓動以來,經過網絡讀取的輸入數據包數目
@@PACK_SENT
返回自SQL Server本次啓動以來,經過網絡發送的輸出數據包數目
@@PACKET_ERRORS
返回自SQL Server本次啓動以來,SQL Server中出現的網絡數據包的錯誤數據
@@PROCID
返回當前的存儲過程標識符
@@REMSERVER
返回註冊記錄中顯示的遠程數據服務器名稱
@@ROWCOUNT
返回上一個語句所處理的行數
@@SERVERNAME
返回運行SQL Server的本地服務器名稱
@@SERVICENAME
返回SQL Server運行時註冊鍵名稱
@@SPID
返回服務器處理標識符
@@TEXTSIZE
返回當前TESTSIZE選項的設置值
@@TIMETICKS
返回一個計時單位的微秒數,操做系統的一個計時單位是31.25毫秒
@@TOTAL_ERRORS
返回自SQL Server本次啓動以來,磁盤的讀寫錯誤次數
@@TOTAL_READ
返回自SQL Server本次啓動以來,讀磁盤的次數
@@TOTAL_WRITE
返回自SQL Server本次啓動以來,寫磁盤的次數
@@TRANCOUNT
返回當前鏈接的有效事務數
@@VERSION
返回當前SQL Server服務器的日期,版本和處理器類型
類別
數據類型
字節
取值範圍
精度
整數型
bigint
8
int
4
smallint
2
tinyint
1
0~255
邏輯數值型
bit
1,0或NULL
小數數據型
decimal
numeric
貨幣型
money
8
4
smallmoney
4
4
近似數值型
float
4
7
real
8
15
字符型
char
1~8000
varchar
text
Unicode字符型
nchar
1~8000
nvarchar
ntext
二進制數據
binary
1~8000
varbinary
1~8000
image
日期時間型
datetime
smalldatetime
其餘類型
cursor
sal_variant
table
timestamp
uniqueidentifier
SQL Server中的運算夫及其優先級以下所示(優先級由高到低)
l +(正)、-(負)、~(按位取反)
l *(乘)、/(除)、%(取模,及求餘)
l +(加)、+(鏈接)、-(減)
l =、>、<、>=、<=、<>、!= 、!< 、!>
l ^(位異或)、&(位與)、|(位或)
l NOT
l AND
l ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
l =(賦值)
注:全部運算符均遵循左結合型,即同一表達式中若出現多個優先級相同的運算符時,將按從左到右的順序對錶達式進行求值
1.【格式】
BEGIN
{
sql語句|語句塊
}
END
2.【示例】
BEGIN
DECLARE @MyVar float
SET @MyVar = 456.256
BEGIN
PRINT CAST (@MyVar AS varchar(12))
END
END
1.【格式】
IF Boolean_expression
{sql語句|語句塊}
[ELSE
{sql語句|語句塊}]
2.【示例】
USE School
IF (SELECT AVG(degree) FROM score WHERE cno=’3-105’)>80
BEGIN
PRINT ‘課程:3-105’
PRINT ‘考試成績還不錯’
END
ELSE
BEGIN
PRINT ‘課程:3-105’
PRINT ‘考試成績通常’
END
1.【簡單CASE格式】
CASE input_expression
WHEN when_expression THEN result_expression
[…n]
[ELSE else_result_expression]
END
2.【簡單CASE示例】
USE School
GO
SELECT tname AS ‘姓名’,depart AS ‘單位’,
CASE prof
WHEN ‘教授’ THEN ‘高級職稱’
WHEN ‘副教授’ THEN ‘高級職稱’
WHEN ‘講師’ THEN ‘中級職稱’
WHEN ‘助教’ THEN ‘初級職稱’
END AS ‘職稱類型’
FROM teacher
GO
3.【搜索CASE格式】
CASE
WHEN Boolean_expression THEN result_expression
[…n]
[ELSE else_result_expression]
END
4.【搜索CASE示例】
USE School
GO
SELECT sno AS ‘學號’,cno AS ‘課程號’,
CASE
WHEN degree>=90 THEN ‘A’
WHEN degree>=80 THEN ‘B’
WHEN degree>=70 THEN ‘C’
WHEN degree>=60 THEN ‘D’
WHEN degree<60 THEN ‘E’
END AS ‘成績’
FROM score ORDER BY sno
GO
1.【格式】
WHILE Boolean_expression
{sql語句|語句塊}
[BREAK]
{sql語句|語句塊}
[CONTINUE]
2.【示例】
DECLARE @s int,@i int
SET @i = 0
SET @s = 0
WHILE @i<=100
BEGIN
SET @s = @s+@i
SET @i = @i+1
END
PRINT ‘1+2+…+100=’+CAST(@s AS char(25))
1.【格式】
GOTO lable
2.【示例】
DECLARE @avg float
USE School
If(SELECT COUNT(*) FROM score WHERE sno=’108’)=0
GOTO label1
BEGIN
PRINT ‘108學號學生的平均成績:’
SELECT @avg=AVG(degree) FROM score WHERE sno=’108’
PRINT @avg
RETURN
END
Label1:
PRINT ‘108學號的學生無成績’
1.【格式】
RETURN [integer_expression]
2.【示例】
USE School
GO
CREATE PROC MyPro @no char(5)
AS RETURN(SELECT AVG(degree)FROM score WHERE sno=@no)
1.【格式】
WAITFOR {DELAY ‘time’ | TIME ‘time’}
2.【示例】
BEGIN
WAITFOR TIME ‘1:10:00’
PRINT ‘如今是1:10:00’
END
函數分類
函數
說明
聚合函數
COUNT
SUM
AVG
MIN
MAX
配置函數
遊標函數
日期和時間函數
DAY
MONTH
YEAR
GETDATE
數學函數
元數據函數
行集函數
安全性函數
字符串函數
系統函數
系通通計函數
文本和圖像函數
1.【格式】
2.【示例】
USE test
GO
CREATE FUNCTION CubicVolume
--輸入參數
(@CubeLength decimal(4,1),@CubeWidth decimal(4,1),@CubeHeight decimal(4,1))
RETURNS decimal(12,3) --返回立方體的體積
AS
BEGIN
RETURN(@CubeLength*@CubeWidth*CubeHeight)
END
GO
語句類型
語句
說明
數據查詢語言DQL
SELECT
從數據庫表中檢索數據和列
數據操做語言DML
INSERT
向數據庫表中添加新數據行
UPDATE
更新數據庫表中的數據
DELETE
從數據庫表中刪除數據行
數據定義語言DDL
CREATE DATABASE
建立數據庫
ALTER DATABASE
修改數據庫
DROP DATABASE
刪除數據庫
CREATE TABLE
建立數據庫表
ALTER TABLE
修改數據庫表結構
DROP TABLE
從數據庫中刪除表
CREATE VIEW
建立視圖
ALTER VIEW
修改視圖
DROP VIEW
從數據庫中刪除試圖
CREATE INDEX
建立索引
DROP INDEX
刪除索引
CREATE PROCEDURE
建立存儲過程
DROP PROCEDURE
刪除存儲過程
CREATE TRIGGER
建立觸發器
DROP TRIGGER
刪除觸發器
CREATE SCHEMA
添加模式
DROP SCHEMA
刪除模式
CREATE DOMAIN
建立數據值域
ALTER DOMAIN
改變域定義
DROP DOMAIN
刪除域
數據控制語言DCL
CRANT
授予用戶訪問權限
DENY
拒絕用戶訪問
REVOKE
解除用戶訪問權限
事務控制
COMMIT
結束當前事務
ROLLBACK
終止當前事務
SET TRANSACTION
定義當前事務數據訪問特徵
程序化SQL
DECLARE
爲查詢設定遊標
EXPLAN
爲查詢描述數據訪問計劃
OPEN
檢索查詢結果打開一個遊標
FETCH
檢索一行查詢結果
CLOSE
關閉遊標
PREPARE
爲動態執行準備SQL語句
EXECUTE
動態執行SQL語句
DESCRIBE
描述準備好的查詢
1.【格式】
SELECT 列名錶
[INTO 新表名]
FROM 表或視圖名
[WHERE 查詢限定條件]
[GROUP BY 分組表達式]
[HAVING 分組條件]
[ORDER BY 次序表達式]
2.【示例】查詢score表中至少有5名學生選修的並以3開頭的課程號的平均分數。
SELECT cno,AVG(degree) AS ‘平均分’
FROM score
WHERE cno LIKE ‘3%’
GROUP BY cno
HAVING COUNT(*)>5
注:SQL的執行順序是:
①執行WHERE子句,從表中選取行;
②由GROUP BY對選區的行進行分組;
③執行聚合函數;
④執行HAVING子句選區知足條件的分組(HAVING子句聚合函數的做用域爲每一分組)。
1.【格式】
INSERT INTO <table_name>
[(<column_name>[{,<column_name>}…])]
VALUES(<value>[{,<value>}…])
注:「<>」爲必選項,「[]」爲可選項,「{}」爲可重複出現項。
2.【示例】
INSERT INTO score
(sno,cno,score)
VALUES(1001,254,’95’)
1.【格式】
UPDATE<table_name>
SET<set clause expression>[{,< set clause expression >}…]
[WHERE <search_condition>]
注:「<>」爲必選項,「[]」爲可選項,「{}」爲可重複出現項。
2.【示例】
UPDATE 商品信息
SET 產地=
(SELECT 供應商所在城市
FROM 供應商信息
WHERE 供應商名稱=’南方電訊’),
備註=’貨億到’
WHERE 產地=’上海市’
1.【格式】
DELETE FROM<table_name>
[WHERE <search_condition>]
注:「<>」爲必選項,「[]」爲可選項,「{}」爲可重複出現項。
2.【示例】
DELETE FROM 業務員信息
WHERE 業務員姓名 LIKE ‘黃__’
1.【格式】
CREATE DATABASE database_name
[
[ON [filespec]]
[ LOG ON [filespec]]
]
filespec定義爲
([NAME=logical_file_name,]
FILENAME=’os_file_name’
[,SIZE=size]
[,MAXSIZE={max_size | UNLIMITED}]
[,FILEGROWTH=growth_increment])
2.【示例】
CREATE DATABASE School
ON
(NAME= School,
FILENAME='d:/Program Files/Microsoft SQL Server/MSSQL/Data/ School_Data.mdf',
SIZE=50MB,
MAXSIZE=2000,
FILEGROWTH=20)
LOG ON
(NAME= School_Log,
FILENAME='d:/Program Files/Microsoft SQL Server/MSSQL/Data/ School_Log.ldf',
SIZE=50MB,
MAXSIZE=2000,
FILEGROWTH=20)
1.【格式】
ALTER DATABASE database_name
{ ADD FILE filespec
| ADD LOG FILE filespec
| REMOVE FILE logical_file_name
| MODIFY FILE filespec
| MODIFY NAME=new_dbname
}
filespec定義爲
([NAME=logical_file_name,]
FILENAME=’os_file_name’
[,SIZE=size]
[,MAXSIZE={max_size | UNLIMITED}]
[,FILEGROWTH=growth_increment])
2.【示例】
1.【格式】
DROP DATABASE database_name
2.【示例】
DROP DATABASE School
1.【格式】
CREATE TABLE table_name
(
column_name1 data_type [NULL | NOT NULL] [PRIMARY | UNIQUE][FOREIGN KEY [(column_name)]] REFERENCES ref_table [(ref_column)]
[column_name2 data_type…]
…
)
2.【示例】
CREATE TABLE book (
bid int NOT NULL PRIMARY KEY,
bname char(8) NOT NULL,
authorid int FOREIGN KEY REFERENCES authors(authorid)
)
1.【格式】
ALTER TABLE table_name
ADD [column_name data_type]
[PRIMARY KEY | CONSTRAIN]
[FOREIGN KEY (column_name)
REFERENCES ref_table(ref_column)]
DROP [CONSTRAINT] constraint_name | COLUMN column_name
2.【示例】
ALTER TABLE book ADD price int
1.【格式】
DROP TABLE table_name
2.【示例】
DROP TABLE book
1.【格式】
CREATE VIEW [database_name.][owner.]view_name [(column [,…n])]
[WITH view_attribute [,…n]]
AS
Select_statement
[WITH CHECK OPTION]
view_attribute定義爲:
{ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
2.【示例】
USE School
GO
CREATE VIEW st2_degree
AS
SELECT student.sname AS ‘姓名’,course.cname AS ‘課程’,score.degree AS ‘成績’
FROM student,course,score
WHERE student.sno=score.sno AND course.cno=score.cno
GO
1.【格式】
ALTER VIEW [database_name.][owner.]view_name [(column [,…n])]
[WITH view_attribute [,…n]]
AS
select_statement
[WITH CHECK OPTION]
view_attribute定義爲:
{ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
2.【示例】
ALTER VIEW 珠寶信息_VIEW(商品名稱,單價)
AS
SELECT 名稱編號,單價
FROM 商品信息
WHERE 單價>1000
1.【格式】
DROP VIEW {view_name} [,…n]
2.【示例】
USE test
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS _
WHERE TABLE_NAME=’View1’)
DROP VIEW View1
GO
1.【格式】
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name
ON {table_name | ivew_name} (column [ASC | DESC][,…n])
[WITH index_option [,…n]]
[ON filegroup]
index_option定義爲
{ PAD_INDEX | FILLFACTOR=fillfactor | IGNORE_DUP_KEY | DROP_EXISTING | STATISTICS_NORECOMPUTE | SORT_IN_TEMPDB}
2.【示例】
USE School
IF EXISTS(SELECT name FROM sysindexes WHERE name=’IDX_tno’)
DROP INDEX teacher.IDX_tno
GO
USE School
CREATE INDEX IDX_tno ON teacher(tno)
GO
1.【格式】
DROP INDEX ‘table.index | view.index’ [,…n]
2.【示例】
USE test
GO
DROP INDEX table1.Idx1
GO
1.【格式】
CREATE PROC[EDURE] procedure_name [; number]
[{@parameter data_type} [VARYING ][ = default][OUTPUT]]
[,…n]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement [,…n]
2.【示例】
USE School
IF EXISTS(SELECT name FROM sysobjects WHERE name=’stud_degree’ AND type=’P’)
DROP PROCEDURE stud_degree
GO
USE school
GO
CREATE PROCEDURE stud_degree
AS
SELECT student.sno,student.sname,course.cname,score.degree
FROM student,course,score
WHERE student.sno=score.sno AND course.cno=score.cno
ORDER BY student.sno
GO
1.【格式】
2.【示例】
1.【格式】
DROP PROCEDURE procedure_name
2.【示例】
DROP PROCEDURE test_ret
1.【格式】
CREATE TRIGGER trigger_name ON { table_name | view_name }
[WITH ENCRYPTION]
{
{ {FOR | AFTER | INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE]}
[WITH APPEND]
[NOT FOR REPLICATION]
AS
[{IF UPDATE (column)
[{ AND | OR UPDATE (column)}
[…n]
| IF (COLUMNS_UPDATED() {bitwise_operator} updated_bitmask)
{comparison_operator} column_bitmask […n]
}]
sql_statement […n]
}
}
2.【示例】
CREATE TRIGGER [Hotel_Department_Update] ON dbo.Hotel_Department
FOR INSERT, UPDATE
AS
IF NOT EXISTS (SELECT * FROM Hotel WHERE ItemID IN (SELECT ItemID FROM inserted))
BEGIN
PRINT '更新數據庫失敗,所屬記錄不存在!'
ROLLBACK TRAN --撤消操做
END
RETURN
GO
1.【格式】
ALTER TRIGGER trigger_name ON (table_name | view_name)
[WITH ENCRYPTION]
{
{(FOR | AFTER | INSTEAD OF ) {[DELETE] [,] [INSERT] [,] [UPDATE]}
[NOT FOR REPLICATION]
AS
Sql_statement […n]
}
|
{(FOR | AFTER | INSTEAD OF) {[INSERT] [,] [UPDATE] }
[NOT FOR REPLICATION]
AS
{IF UPDATE (column)
[{AND | OR} UPDATE (column)]
[…n]
| IF (COLUMNS_UPDATED() {bitwise_operator}
updated_bitmask)
{comparison_operator} column_bitmask […n]
}
sql_statement […n]
}
}
2.【示例】
1.【格式】
DROP TRIGGER {trigger_name} [,…n]
2.【示例】
DROP TRIGGER trig1