1. 命名规则:
l 第一个字母必须是Unicode2.0标准定义的字母、下划线、at符号(@)和数字符号(#);
l 后续字符可以是Unicode2.0标准定义的字母、来自基本拉丁字母或其他国家/地区脚本的十进制数字、at符号(@)、美元符号($)、数字符号(#)或下划线;
l 标识符不能是Transact-SQL的保留字;
l 不允许嵌入空格或其他特殊字符;
l 标识符长度不大于128字符,本地临时表标识符不大于116字符。
注:SQL Server2000中,常规标识符的格式规则取决于数据库的兼容级别,兼容级别可以用系统存储过程sp_dbcmptlevel来设置。以上是兼容级别为80时的规则。
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